I just unrolled a new communication protocol for my game engine. it allows for funky behaviors when communicating, that just due to me allowing everything to be functional over the network.

I have home brew code resulting in bidirectional streams that relies on tokens and serialized object data to communicate. Connections can be Active ( host ) or Passive ( client ) btw for referrence.

Tokens - Null Token ( 0x00 ) Active or Passive; used generally for alignment
KernelToken - Generally Active Behavior
KernelSetStateToken - Active only
KernelGetStateToken - Active or Passive
KernelLoadModuleToken - Active only
KernelUnloadModuleToken - Active only
KernelLinkStreamToken - Active only
KernelUnlinkStreamToken - Active only
KernelVariableSendToken - Active only
KernelVariableRequestToken - Active or Passive
KernelVariableRemoveToken - Active only
GloablToken - Either Active or Passive communication
GlobalHandshakeToken - Active only
GlobalTerminateToken - Active or Passive
GlobalAcknowledgementToken - Passive only
GlobalSuccessToken - Active only
GlobalSynchronizeToken - Active or Passive
GlobalPendingToken - Passive only
GlobalFlushToken - Active only
Module - Generally Active Behavior
ModuleRequestObjectToken - Active only
ModuleCollectGarbageToken - Active or Passive
ModuleReapObjectsToken - Active or Passive
ModuleCloseLibrary - Active only
ModuleCreateObjectToken - Active only
ModuleDestroyObjectToken - Active only
ModuleSendCommandToken - Active only
ModuleListenCommandToken - Active only
ExecutableResourceToken - Generally Active Behavior
LinkScrutByteCodeToken - Active only
UnlinkScrutByteCodeToken - Active only
ExecuteScrutByteCodeToken - Active only
SendScrutByteCodeToken - Active only
TranslateScriptToken - Active only
LoadScriptToken - Active only
UnloadScriptToken - Active only
SendScribbleToken - Active only
SendScrasmToken - Active only
ExecuteScriptToken - Active only
PauseScriptToken - Active only
ObjectToken - Active or Passive Behavior
ObjectNullToken - Active or Passive only
ObjectPointerToken - Active or Passive only
ObjectReferenceToken - Active or Passive only
ObjectSerializedToken - Active or Passive only
StreamToken - Generally Active Behavior
StreamRewindToken - Active only
StreamFlushToken - Active only
StreamNullToken - Active or Passive

and these tokens only allow the communication of objects, so therefore simple data must be encoded in an object to be communicated ( Dator anyone! ) Here is some example resulting network communications worked out by hand, may not be perfect yet.


Machine 1 - Active Connection ( host )
Machine 2 - Passive Connection ( client )

Remember which machine is Active and Passive Connection. A Passive connection
can never request to send executable resources to the Active connection; this
eliminates the possibility of the client taken control of the host. Not all
request are appropriate and process successfully depending on Connection
Status.

Begin Communication
Connection via handshake and confirmed success
Machine 1 >> Machine 2 -> GlobalHandshakeToken
Machine 2 >> Machine 1 -> GlobalAcknowledgementToken
Machine 1 >> Machine 2 -> GlobalSuccessToken

--- pass tokens within this block for proper communication ---

End Communication
Connection passed handshake will now terminate
Machine 1 >> Machine 2 -> GlobalTerminateToken
Machine 2 >> Machine 1 -> GlobalAcknowledgementToken
Machine 1 >> Machine 2 -> GlobalSuccessToken

-----------------------------------------------------------------------

Example Blocks of Communication

Send program, then translation, execution and delete on target machine
Machine 1 >> Machine 2 -> SendScribbleToken
Machine 2 >> Machine 1 -> GlobalPendingToken
Machine 1 >> Machine 2 -> ObjectSerializedToken
Machine 1 >> Machine 2 -> GlobalAcknowledgementToken
Machine 2 >> Machine 1 -> GlobalSuccessToken
Machine 1 >> Machine 2 -> TranslateScriptToken
Machine 2 >> Machine 1 -> GlobalAcknowledgement
Machine 1 >> Machine 2 -> GlobalSuccessToken
Machine 1 >> Machine 2 -> ExecuteScrutByteCodeToken
Machine 2 >> Machine 1 -> GlobalAcknowledgement
Machine 1 >> Machine 2 -> GlobalSuccessToken
Machine 1 >> Machine 2 -> UnlinkScrutByteCodeToken
Machine 2 >> Machine 1 -> GlobalAcknowledgement
Machine 1 >> Machine 2 -> GlobalSuccessToken

Request object from machine
Machine 1 >> Machine 2 -> ModuleRequestObjectToken
Machine 2 >> Machine 1 -> GlobalAcknowledgementToken
Machine 1 >> Machine 2 -> GlobalPendingToken
Machine 2 >> Machine 1 -> ObjectSerializedToken
Machine 1 >> Machine 2 -> GlobalAcknowledgementToken
Machine 2 >> Machine 1 -> GlobalSuccessToken

So can I get anyones input on this new protocol developed in house; am I headed in the correct dirrection at least. Im on Version 7 of my game engine, yet only Version 2 of my network protocol ( shows how slow my networking withing my engine advanced )