77 lines
1.6 KiB
PHP
77 lines
1.6 KiB
PHP
<?php
|
|
|
|
namespace App\Models;
|
|
|
|
use Illuminate\Database\Eloquent\Builder;
|
|
use Illuminate\Database\Eloquent\Model;
|
|
|
|
use App\Classes\Frame as FrameClass;
|
|
use App\Classes\Frame\Ansi as AnsiFrame;
|
|
use App\Classes\Frame\Videotex as VideotexFrame;
|
|
|
|
use App\Classes\Server;
|
|
use App\Classes\Server\Ansi as AnsiServer;
|
|
use App\Classes\Server\Videotex as VideotexServer;
|
|
|
|
class Mode extends Model
|
|
{
|
|
public function frames()
|
|
{
|
|
return $this->hasMany(Frame::class);
|
|
}
|
|
|
|
/**
|
|
* Return a frame class for the Model
|
|
*
|
|
* @param Model $o
|
|
* @return FrameClass
|
|
* @throws \Exception
|
|
*/
|
|
public function frame(Model $o): FrameClass
|
|
{
|
|
switch (strtolower($this->name)) {
|
|
case 'ansi':
|
|
return new AnsiFrame($o);
|
|
case 'videotex':
|
|
return new VideotexFrame($o);
|
|
default:
|
|
throw new \Exception('Unknown Frame type: '.$mo->name);
|
|
}
|
|
}
|
|
|
|
/**
|
|
* Fetch a specific frame from the DB
|
|
*
|
|
* @param int $frame
|
|
* @param string $index
|
|
* @return FrameClass
|
|
* @throws \Exception
|
|
*/
|
|
//@todo Move Server $so first
|
|
public function frameLoad(int $frame,string $index='a',Server $so): FrameClass
|
|
{
|
|
return $this->frame(
|
|
// Return our internal test frame.
|
|
($frame == '999' and $index == 'a')
|
|
? $so->testFrame()
|
|
: $this->frames()
|
|
->where('frame','=',$frame)
|
|
->where('index','=',$index)
|
|
->firstOrFail()
|
|
);
|
|
}
|
|
|
|
/**
|
|
* Return our server instance
|
|
*/
|
|
public function server()
|
|
{
|
|
switch (strtolower($this->name)) {
|
|
case 'ansi': return new AnsiServer($this);
|
|
case 'videotex': return new VideotexServer($this);
|
|
|
|
default:
|
|
throw new \Exception('Unknown server type: '.$this->name);
|
|
}
|
|
}
|
|
} |