CXM_generic_protocol.anubis 1.1 KB
/*
 * 
 * User: David RENE
 * Date: 25/04/2007
 * Time: 16:20
 * (c) Calexium
 *
 */

read system/muscle.anubis
read system/data_io.anubis
read tools/basis.anubis

read calexium_lib/CXM_message_constants.anubis

public define Int32 _CXM_ERROR      = 0.
public define Int32 _CXM_OK         = 1.
public define Int32 _CXM_UNKNOW_CMD = 2.

public define One
  send_ACK_error
  (
    RWStream  conn,
    Int32     cmd_id
  )=
  with err_msg = message(_CXM_ACK),
  forget(add_int32(err_msg, "_CMD", cmd_id));
  forget(add_int32(err_msg, "_STATUS", _CXM_ERROR));
  forget(send_message_by_Stream(conn, err_msg))
  .
  
public define One
  send_ACK_ok
  (
    RWStream  conn,
    Int32     cmd_id
  )=
  with ok_msg = message(_CXM_ACK),
  forget(add_int32(ok_msg, "_CMD", cmd_id));
  forget(add_int32(ok_msg, "_STATUS", _CXM_OK));
  forget(send_message_by_Stream(conn, ok_msg))
  .
  
public define Maybe(Message)
  wait_for_reply
  (
    RWStream conn
  ) =
  if unflatten_message(make_data_io(weaken(conn))) is
  {
    failure       then 
      sleep(1);
      wait_for_reply(conn),
    success(msg)  then   success(msg)
  }.