PetriCode examples -- Simple Framing Protocol (SFP): The Code

This page shows the generated code for the SFP using groovy bindings and templatesa

Sender.groovy

class Sender {
def Idle 
def Open 
def Receiver
        def Open(server){
if(!Idle) throw new Exception('unfulfilled precondition: Idle')
        /*vars: [__TOKEN__, socket]*/

def __TOKEN__

def socket

        socket = new Socket(server.host, server.port)

this.Receiver =  socket
        
        

}
def Send(msg){
if(!Open) throw new Exception('unfulfilled precondition: Open')
        /*vars: [__TOKEN__, msg, OutgoingMessage, __LOOP_VAR__]*/

def __TOKEN__


def OutgoingMessage

def __LOOP_VAR__

          OutgoingMessage = msg.getChars().toList().collate(5).collect{ new String(it.toArray(new char[0])) }
 
__LOOP_VAR__ = true
while(__LOOP_VAR__){
        def  m = OutgoingMessage.remove(0)
 

  if(OutgoingMessage.size() == 0){
    __TOKEN__ = [1,m]
  } else {
    __TOKEN__ = [0,m]
  }
   


  Receiver.getOutputStream().newObjectOutputStream().writeObject( __TOKEN__)
  
        
__LOOP_VAR__ = ( 0 == __TOKEN__[0] ) 
}

        
        

}
def Close(){
if(!Open) throw new Exception('unfulfilled precondition: Open')
        /*vars: [__TOKEN__]*/

def __TOKEN__

        
        
        

}

}

	

Reciever.groovy

		class Receiver {
def Idle 
def Ready 
def Sender
        def Init(rport){
if(!Idle) throw new Exception('unfulfilled precondition: Idle')
        /*vars: [__TOKEN__, socket]*/

def __TOKEN__

def socket

        socket = new ServerSocket(rport).accept()

this.Sender =  socket
        
        

}
def ReceiverClose(){
if(!RReady) throw new Exception('unfulfilled precondition: RReady')
        /*vars: [__TOKEN__]*/

def __TOKEN__

        
        
        

}
def ReceiverReceive(){
if(!RReady) throw new Exception('unfulfilled precondition: RReady')
        /*vars: [__TOKEN__, mss, __LOOP_VAR__]*/

def __TOKEN__

def mss

def __LOOP_VAR__

        mss =  []

__LOOP_VAR__ = true
while(__LOOP_VAR__){
        
def p =  Sender.getInputStream().newObjectInputStream().readObject()
mss.add(p)

 

  __TOKEN__ = p
   



        
__LOOP_VAR__ = ( 0 == __TOKEN__[0] ) 
}
StringBuffer sb = new StringBuffer()
mss.each{ sb.append(it[1].toString() ) }
 __TOKEN__ = sb.toString()
 
        
        

}

}