theKernel 10.0 NHI1 - theKernel - theLink - theConfig - theSq3Lite - theCompiler - theBrain - theGuard
c - tcl - cs - py - rb - jv - cc
Loading...
Searching...
No Matches
Callback Signature List

List of all callback defined by jvmkkernel

The callback have to be a Java proc or method

Callback signature

package jvmkkernel;
public interface MkObjectDeleteIF {
void Callback (String typeName, int typeHdl, int objHdl);
}

Read more about how to define a service-callback in theLink .

Callback example

RPC server

Example about the delete-callback-setup from the RPC server example/jv/LibSq3LiteRpcServer.java

ServerSetup : The DeleteCallback is usually installed in the Setup-Callback but only once.

    if (ConfigGetIsParent()) {
      // call “RpcObjectDeleteCall” ONLY when deleting an instance whose class name matches the regular expression “^Sq3”
      MkObjectC.DeleteCallbackSetup("LibSq3LiteRpcServer", new RpcObjectDeleteCall(),"^Sq3");
    }

The DeleteCallback is called before the deletion. In the RPC example, the RPC client is informed about the impending deletion.

  class RpcObjectDeleteCall implements MkObjectDeleteIF {
    public void Callback ( String typeName, int typeHdl, int objHdl ) {
      Send("E","%DEL:CHH",typeName,typeHdl,objHdl);
    }
  }

ServerCleanup : If the RPC server is deleted, the DeleteCallback is no longer needed and is therefore also deleted.

    if (ConfigGetIsParent()) {
      MkObjectC.DeleteCallbackCleanup("LibSq3LiteRpcServer");
    }

RPC client

Example about the delete-callback-setup from the RPC client example/tcl/LibSq3LiteRpcClient.tcl

Constructor: Add the DeleteCallback-Service if not already available :

oo::define Sq3LiteRpc constructor { rpcHdl args} {
  next $rpcHdl {*}$args

  # only use "DeleteCallback" on the initial (Parent) context
  set parentRpc         [$rpcHdl LinkGetParent]

  # add service "%DEL" as static-callback "Sq3LiteDestructor"
  $parentRpc ServiceCreate "%DEL" [list Sq3LiteRpc Sq3LiteDestructor $rpcHdl]
}

DeleteCallback: If the objHdl is still available delete the obj :

oo::define Sq3LiteRpc self method Sq3LiteDestructor {parentRpc childRpc} {
  set typName [$parentRpc ReadSTR]
  set typHdl  [$parentRpc ReadHDL]
  set objHdl  [$parentRpc ReadHDL]

  # type=MyClassS -> rpc=MyClassRpc
  set classRpc  [string replace $typName end end Rpc]

  # hdl=objHdl -> obj
  set obj   [$childRpc CacheLookup $classRpc $objHdl]

  # is "obj" already deleted ?
  if {$obj eq "MK_NULL"} return

  # now delete "obj"
  try {
    # the "objHdl" is already deleted on server, avoid resent 
    $obj hdl 0
    $obj destroy
  } on error {} {
    [$parentRpc ErrorCatch] Println
  }
}
oo::define Sq3LiteRpc export Sq3LiteDestructor
Member MkObjectDeleteCallbackSetup_RT (MK_RT mkrt, MK_STRN ident, MkObjectDeleteCallF fCall, MK_CBP callback, MkObjectDeleteFreeF fFree, MK_STRN filter)
MkObjectDeleteCallbackSetup