CigiIncomingMsg.h

Go to the documentation of this file.
00001 
00064 #if !defined(_CIGI_INCOMING_MESSAGE_INCLUDED_)
00065 #define _CIGI_INCOMING_MESSAGE_INCLUDED_
00066 
00067 #include <stdlib.h>
00068 #include "CigiMessage.h"
00069 #include "CigiMessageBuffer.h"
00070 #include "CigiBaseEventProcessor.h"
00071 #include "CigiBaseSignalProcessing.h"
00072 #include "CigiSignalType.h"
00073 
00074 
00075 //=========================================================
00078 typedef void (* CigiCBProcessor)(CigiBasePacket *Packet);
00079 
00080 
00081 class CigiDefaultPacket;
00082 
00083 class CigiSession;
00084 
00085 
00086 //=========================================================
00089 class CIGI_SPEC CigiIncomingMsg : public CigiMessage  
00090 {
00091 
00092    friend class CigiSession;
00093 
00094 public:
00095 
00096 
00097    //==> Management
00098 
00099    //=========================================================
00102    CigiIncomingMsg();
00103 
00104    //=========================================================
00107         virtual ~CigiIncomingMsg();
00108 
00109 
00110 
00111    //==> Processing Member functions
00112 
00113 
00114    //+> Processing Incoming Messages
00115 
00116    //=========================================================
00128         int ProcessIncomingMsg(Cigi_uint8 *Buff, int Size);
00129 
00130    //=========================================================
00140         int ProcessIncomingMsg(void)
00141    {
00142       int Rslt = CIGI_ERROR_UNEXPECTED_NULL;
00143       if(CrntMsgBuf != NULL)
00144          Rslt = ProcessIncomingMsg(CrntMsgBuf->Buffer,
00145                                    CrntMsgBuf->BufferFillCnt);
00146 
00147       return(Rslt);
00148    }
00149 
00150    //=========================================================
00159         void ProcessPacket(int PcktId, CigiBasePacket *Pckt);
00160 
00161 
00162    //+> Iterative packet processing method calls
00163 
00164    //=========================================================
00169         CigiBasePacket * GetFirstPacket(void);
00170 
00171    //=========================================================
00176         CigiBasePacket * GetNextPacket(void);
00177 
00178 
00179    //+> Packet Processor Management
00180 
00181    //=========================================================
00191         int RegisterEventProcessor(int PacketID,
00192                               CigiBaseEventProcessor *EventMgr);
00193 
00194    //=========================================================
00204         int UnregisterEventProcessor(int PacketID,
00205                               CigiBaseEventProcessor *EventMgr);
00206 
00207 
00208    //=========================================================
00218    int RegisterCallBack(int PacketID, CigiCBProcessor CallBack);
00219 
00220    //=========================================================
00230    int UnregisterCallBack(int PacketID, CigiCBProcessor CallBack);
00231 
00232 
00233    //=========================================================
00241    int RegisterSignalProcessor(CigiBaseSignalProcessing *SignalMgr);
00242 
00243    //=========================================================
00251    int UnregisterSignalProcessor(CigiBaseSignalProcessing *SignalMgr);
00252 
00253 
00254    //=========================================================
00262    int RegisterUnrecognizedPacketEvent(CigiBaseEventProcessor *EventMgr)
00263    {
00264         return(RegisterEventProcessor(0,EventMgr));
00265    }
00266 
00267    //=========================================================
00275    int UnregisterUnrecognizedPacketEvent(CigiBaseEventProcessor *EventMgr)
00276    {
00277       return(UnregisterEventProcessor(0,EventMgr));
00278    }
00279 
00280 
00281    //=========================================================
00289    int RegisterUnrecognizedPacketCallBack(CigiCBProcessor CallBack)
00290    {
00291       return(RegisterCallBack(0,CallBack));
00292    }
00293 
00294    //=========================================================
00302    int UnregisterUnrecognizedPacketCallBack(CigiCBProcessor CallBack)
00303    {
00304       return(UnregisterCallBack(0,CallBack));
00305    }
00306 
00307    //=========================================================
00315    int RegisterUnhandledPacketEvent(CigiBaseEventProcessor *EventMgr)
00316    {
00317         return(RegisterEventProcessor(256,EventMgr));
00318    }
00319 
00320    //=========================================================
00328    int UnregisterUnhandledPacketEvent(CigiBaseEventProcessor *EventMgr)
00329    {
00330       return(UnregisterEventProcessor(256,EventMgr));
00331    }
00332 
00333 
00334    //=========================================================
00342    int RegisterUnhandledPacketCallBack(CigiCBProcessor CallBack)
00343    {
00344       return(RegisterCallBack(256,CallBack));
00345    }
00346 
00347    //=========================================================
00355    int UnregisterUnhandledPacketCallBack(CigiCBProcessor CallBack)
00356    {
00357       return(UnregisterCallBack(256,CallBack));
00358    }
00359 
00360 
00361    //==> Buffer Packing Managers
00362 
00363 
00364    //=========================================================
00369    Cigi_uint8 *GetNextBuffToLoad(void);
00370 
00371    //=========================================================
00375    void AdvanceCrntBuffer(void);
00376 
00377    //=========================================================
00382    void SetCrntMsgSize(int MsgSize)
00383    {
00384       if(CrntMsgBuf != NULL)
00385          CrntMsgBuf->BufferFillCnt = MsgSize;
00386    }
00387 
00388 
00389 
00390    //==> Accessing Member Variable Values functions
00391 
00392    //=========================================================
00396    Cigi_uint8 * GetMsgBuffer()
00397    {
00398       if(CrntMsgBuf == NULL)
00399          AdvanceCrntBuffer();
00400 
00401       return(CrntMsgBuf->Buffer);
00402    }
00403 
00404    //=========================================================
00408    int GetMsgBufSize(void) { return(CrntMsgBuf->BufferSize); }
00409 
00410 
00411    //+> Iteration Method Flag
00412 
00413    //=========================================================
00420    void UsingIteration(bool IterationIn=true) { Iteration = IterationIn; }
00421 
00422    //=========================================================
00429    bool CheckIteration(void) { return(Iteration); }
00430 
00431 
00432    //+> Reader's CIGI Version
00433 
00434    //=========================================================
00442         void SetReaderVersion(CigiVersionID &Version);
00443 
00444    //=========================================================
00453    int SetReaderCigiVersion(const int CigiVersionIn, bool bndchk=true)
00454    {
00455       CigiVersionID tVer(CigiVersionIn,0);
00456       SetReaderVersion(tVer);
00457       return(CIGI_SUCCESS);
00458    }
00459 
00460    //=========================================================
00471    int SetReaderCigiVersion(const int CigiVersionIn, const int CigiMinorVersionIn, bool bndchk=true)
00472    {
00473       CigiVersionID tVer(CigiVersionIn,CigiMinorVersionIn);
00474       SetReaderVersion(tVer);
00475       return(CIGI_SUCCESS);
00476    }
00477 
00478    //=========================================================
00482    int GetReaderCigiVersion(void) const
00483    {
00484       return(ReaderVersion.CigiMajorVersion);
00485    }
00486 
00487    //=========================================================
00491    int GetReaderCigiMinorVersion(void) const { return(ReaderVersion.CigiMinorVersion); }
00492 
00493 
00494    //+> Registering
00495 
00496    //=========================================================
00508         int RegisterUserPacket(CigiBasePacket *Packet,
00509                           Cigi_uint8 PacketID,
00510                           bool HostSend,
00511                           bool IGSend);
00512 
00513 
00514 
00515 protected:
00516 
00517    //==> Member variables
00518 
00519    //=========================================================
00526    bool Iteration;
00527 
00528    //=========================================================
00532    Cigi_uint8 *CrntPacket;
00533 
00534    //=========================================================
00539    int ReadBufferPos;
00540 
00541    //=========================================================
00545    list<CigiBaseEventProcessor *>EventList[257];
00546 
00547    //=========================================================
00551    list<CigiCBProcessor>CallBackList[257];
00552 
00553    //=========================================================
00557    list<CigiBaseSignalProcessing *>SignalList;
00558 
00559    //=========================================================
00563    bool Swap;
00564 
00565    //=========================================================
00569    CigiVersionID MostMatureCigiVersionReceived;
00570 
00571    //=========================================================
00575    CigiVersionID ProcessingVersion;
00576 
00577    //=========================================================
00582    CigiVersionID ReaderVersion;
00583 
00584    //=========================================================
00587    CigiBasePacket *IncomingHandlerTbl[256];
00588 
00589    //=========================================================
00593    CigiSignalType::Type SignalTbl[256];
00594 
00595    //=========================================================
00599    CigiDefaultPacket *DefaultPckt;
00600 
00601 
00602    //==> Member protected functions
00603 
00604    //=========================================================
00612    bool SignalJump(const Cigi_uint8 PacketID, CigiBasePacket *Packet);
00613 
00614    //=========================================================
00620         void ClearTbls(bool Complete);
00621 
00622    //=========================================================
00626         void SetIncomingHostV1Tbls(void);
00627 
00628    //=========================================================
00632         void SetIncomingIGV1Tbls(void);
00633 
00634    //=========================================================
00638         void SetIncomingHostV2Tbls(void);
00639 
00640    //=========================================================
00644         void SetIncomingIGV2Tbls(void);
00645 
00646    //=========================================================
00650         void SetIncomingHostV3Tbls(void);
00651 
00652    //=========================================================
00656         void SetIncomingIGV3Tbls(void);
00657 
00658    //=========================================================
00662         int CheckFirstPacket(Cigi_uint8 *Buff);
00663 
00664 
00665 };
00666 
00667 #endif // !defined(_CIGI_INCOMING_MESSAGE_INCLUDED_)

Generated on Wed Apr 29 08:59:56 2009 for CCL by  doxygen 1.4.7