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
00098
00099
00102 CigiIncomingMsg();
00103
00104
00107 virtual ~CigiIncomingMsg();
00108
00109
00110
00111
00112
00113
00114
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
00163
00164
00169 CigiBasePacket * GetFirstPacket(void);
00170
00171
00176 CigiBasePacket * GetNextPacket(void);
00177
00178
00179
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
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
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
00412
00413
00420 void UsingIteration(bool IterationIn=true) { Iteration = IterationIn; }
00421
00422
00429 bool CheckIteration(void) { return(Iteration); }
00430
00431
00432
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
00495
00496
00508 int RegisterUserPacket(CigiBasePacket *Packet,
00509 Cigi_uint8 PacketID,
00510 bool HostSend,
00511 bool IGSend);
00512
00513
00514
00515 protected:
00516
00517
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
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_)