Ferreteria/v0.6/clade/Sys/Data/Engine/Conn: Difference between revisions

From Woozle Writes Code
< Ferreteria‎ | v0.6‎ | clade‎ | Sys‎ | Data‎ | Engine
Jump to navigation Jump to search
No edit summary
No edit summary
Line 19: Line 19:
{{!}}-
{{!}}-
{{!}} '''View'''* [i] {{!}}{{!}} {{l/ver/clade|IO\O|View}}
{{!}} '''View'''* [i] {{!}}{{!}} {{l/ver/clade|IO\O|View}}
}}
==Code==
''as of 2025-10-01''
{{fmt/php/block|1=
interface iConn extends BaseIface, HasRostIface {
    // INVOCATION
    //#[BaseIface] function Open() : ActionIface;
    //#[BaseIface] function Shut() : ActionIface;
    // OBJECTS
    function OOper() : OperIface;
    function OSock() : SockIface;  // code-to-cmd-endpoint
    // UI
    //#[\Woozalia\Ferret\IO\iAspect] function DescribeInline() : string;
}
abstract class caConn extends BaseClass implements SelfIface {
    use HasRostTrait;
    // ++ CONFIG ++ //
    // #[Oper]
    abstract protected function OperType() : string;
    // -- CONFIG -- //
    // ++ SETUP ++ //
    public function __construct(string $sSlug, private SockIface $oSock) {
        $this->WithSlug($sSlug);
    }
    public function OSock() : SockIface { return $this->oSock; }
    // -- SETUP -- //
    // ++ OBJECTS ++ //
    public function Inspect() : ViewIface { return new ($this->InspectorClass())($this,$this->OSock(),$this->OCred(),$this); }
    // SHORTCUT
    protected function OCred() : CredsIface { return $this->OSock()->OCred(); }
    // #[Oper]
    private $oOper=NULL;
    #public function HoldOper(OperIface $o) : void { $this->oOper = $o; }
    // #[Oper]
    public function OOper() : OperIface { return $this->oOper ?? ($this->oOper = $this->OOperNew()); }
    // #[Oper]
    protected function OOperNew() : OperIface {
        $sType = $this->OperType();
        $osOper = OperAdmin::FromClassSlug($sType);
        if ($osOper->HasIt()) {
            $scOper = $osOper->GetIt();
            #$echo $this->ReflectThis()->Report();
            #echo $scOper::ReflectSelf()->Report();
            #$oOper = new ($scOper);
            $oOper = $scOper::AccessSelf();
            $oOper->WithConn($this);  // give new Oper a pointer to its Conn
        } else {
            echo self::CodingPrompt("This Connection expects an engine of type '$sType' to be defined.");
            $oOper = NULL;
        }
        return $oOper;
    }
    // -- OBJECTS -- //
}
}}
}}

Revision as of 13:07, 2 October 2025

clade: Sys\Data\Engine\Conn
Clade Family

Plug
AnObject

Conn MyMar
Clade Aliases
Alias Clade
Base* [c,i] Plug
Creds* [i] Creds
HasRost* [i,t] AnObject
Player* [i] Player
Sock* [i] Socket
View* [i] View
Subpages

Code

as of 2025-10-01

interface iConn extends BaseIface, HasRostIface {
    // INVOCATION
    //#[BaseIface] function Open() : ActionIface;
    //#[BaseIface] function Shut() : ActionIface;
    // OBJECTS
    function OOper() : OperIface;
    function OSock() : SockIface;  // code-to-cmd-endpoint
    // UI
    //#[\Woozalia\Ferret\IO\iAspect] function DescribeInline() : string;
}

abstract class caConn extends BaseClass implements SelfIface {
    use HasRostTrait;

    // ++ CONFIG ++ //

    // #[Oper]
    abstract protected function OperType() : string;

    // -- CONFIG -- //
    // ++ SETUP ++ //

    public function __construct(string $sSlug, private SockIface $oSock) {
        $this->WithSlug($sSlug);
    }
    public function OSock() : SockIface { return $this->oSock; }

    // -- SETUP -- //
    // ++ OBJECTS ++ //

    public function Inspect() : ViewIface { return new ($this->InspectorClass())($this,$this->OSock(),$this->OCred(),$this); }

    // SHORTCUT
    protected function OCred() : CredsIface { return $this->OSock()->OCred(); }

    // #[Oper]
    private $oOper=NULL;
    #public function HoldOper(OperIface $o) : void { $this->oOper = $o; }
    // #[Oper]
    public function OOper() : OperIface { return $this->oOper ?? ($this->oOper = $this->OOperNew()); }
    // #[Oper]
    protected function OOperNew() : OperIface {
        $sType = $this->OperType();
        $osOper = OperAdmin::FromClassSlug($sType);
        if ($osOper->HasIt()) {
            $scOper = $osOper->GetIt();
            #$echo $this->ReflectThis()->Report();
            #echo $scOper::ReflectSelf()->Report();
            #$oOper = new ($scOper);
            $oOper = $scOper::AccessSelf();
            $oOper->WithConn($this);  // give new Oper a pointer to its Conn
        } else {
            echo self::CodingPrompt("This Connection expects an engine of type '$sType' to be defined.");
            $oOper = NULL;
        }
        return $oOper;
    }

    // -- OBJECTS -- //
}