00001 00002 00003 #ifndef RCS_OI_HH 00004 #define RCS_OI_HH 00005 00006 #include "cms.hh" /* class CMS */ 00007 #include "nml.hh" /* class NML, typedef NML_FORMAT_PTR */ 00008 #include "nmlmsg.hh" /* class NMLmsg */ 00009 #include "cmd_msg.hh" /* class RCS_CMD_MSG */ 00010 #include "oi_msg.hh" /* class RCS_OI_REQUEST_MSG, */ 00011 /* class RCS_OI_REPLY_MSG */ 00012 /* class RCS_OI_REQUEST_CHANNEL, */ 00013 /* class RCS_OI_REPLY_CHANNEL */ 00014 00015 enum OI_MODE_TYPE 00016 { 00017 OI_TELEOPERATION, 00018 OI_BLOCKED, 00019 OI_ACCEPTING_REQUESTS, 00020 OI_EMERGENCY_REQUESTS_ONLY, 00021 }; 00022 00023 class RCS_OI 00024 { 00025 protected: 00026 RCS_OI_REQUEST_CHANNEL * request_channel; /* channel for operator to */ 00027 /* send requests to */ 00028 RCS_OI_REPLY_CHANNEL *reply_channel; /* channel for operator to */ 00029 /* recieve replies from */ 00030 RCS_OI_REQUEST_MSG *request_msg; /* pointer to last request recvd */ 00031 RCS_OI_REPLY_MSG *reply_msg; /* pointer to reply to be sent */ 00032 int new_request_msg; /* is the request_msg new? */ 00033 int new_reply_msg; /* is the reply_msg new? */ 00034 NMLTYPE request_type; 00035 NMLTYPE reply_type; 00036 OI_MODE_TYPE mode; 00037 NODE *node; 00038 int oi_list_id; 00039 00040 virtual void interpret_request (); /* interpret incoming requests */ 00041 virtual void choose_command_for_node (); /* convert request to command */ 00042 virtual void choose_reply (); /* form replies */ 00043 00044 public: 00045 RCS_OI (NML_FORMAT_PTR, char *name, char *process, char *file, NODE * n); 00046 RCS_OI (); 00047 virtual ~ RCS_OI (); 00048 00049 RCS_CMD_MSG *cmd_for_node; /* command node will use if operator */ 00050 /* request succeeds */ 00051 int cmd_for_node_new; /* is cmd_for_node new? */ 00052 int request_flag; /* NODE checks this flag if */ 00053 00054 virtual int get_request (); 00055 virtual void set_mode (OI_MODE_TYPE); 00056 virtual void acknowledge_request (); /* NODE calls this if cmd_for_node */ 00057 /* will be used. */ 00058 virtual void request_done (); /* NODE calls this when status == done */ 00059 virtual void cycle (); /* NODE calls this every cycle */ 00060 virtual int send_reply (); /* send out replies. */ 00061 }; 00062 00063 #endif