Files
EF3-Interface/PcDmis/Base/Interfac/Msi/Hsi/SevenOcean/CMMIO_BASE.H
T
2013-05-09 20:29:54 +08:00

116 lines
2.8 KiB
C++

#ifndef CMMIO_BASE_H
#define CMMIO_BASE_H
#include <WinBase.h>
#include <WinDef.h>
#define MAX_OUTPUT_BUFFER_SIZE 2048
#define MAX_RECIEVE_BUFFER_SIZE 16000
// TCP, serial style routines
struct SerialList
{
struct SerialList *Next;
DWORD Bytes;
int Item;
char *Buffer;
};
class CMMIO
{
private:
// For now we are not using the transmit list
// struct SerialList *m_TXHead;
char m_terminator;
BOOL m_usesTerminator;
char m_InputBuffer[MAX_RECIEVE_BUFFER_SIZE];
int CurrentPointer;
char m_sLastMessage[MAX_RECIEVE_BUFFER_SIZE];
struct SerialList *m_RXHead;
struct SerialList *m_RXTail;
char *m_RXTempPtr;
CString m_LastError;
BOOL m_hasError;
protected:
CString m_lastErrMsg;
int m_iNbMsgWaiting;
BOOL m_UseBuffferedSend;
CRITICAL_SECTION m_QueueLock;
CRITICAL_SECTION m_ReadLock;
CRITICAL_SECTION m_WriteLock;
struct SerialList *m_SXHead;
struct SerialList *m_SXTail;
char *m_SXTempPtr;
protected:
virtual void Init();
int AddReceived( const char *Buffer,DWORD Bytes); // [7/30/2004]
void Error(CString sErr) {
TRACE(sErr);
m_LastError = sErr;
m_hasError = TRUE;
}
virtual DWORD Close();
public:
CMMIO()
{
InitializeCriticalSection( &m_QueueLock ); // Sean Flynn mutex needs to be initialized prior to attempting to lock otherwise it will core
InitializeCriticalSection( &m_ReadLock ); // initializing here will ensure the mutex is always initialized
InitializeCriticalSection( &m_WriteLock );
Init();
};
virtual ~CMMIO()
{
DeleteCriticalSection( &m_QueueLock ); // Clean up the mutexes resources when the destructor is called.
DeleteCriticalSection( &m_ReadLock );
DeleteCriticalSection( &m_WriteLock );
};
virtual DWORD Open() {
return 0;
}
BOOL getError(CString& sErr) {
BOOL hasError = m_hasError;
if (m_hasError)
{
sErr = m_LastError;
m_hasError = FALSE;
}
return (hasError);
}
virtual int GetNextReceived(char *inputBuf=NULL);
virtual int HasNextReceived(void) {
return (m_RXHead ? m_RXHead->Bytes : FALSE);
}
virtual void SetTerminateChar(char ch) {
m_terminator=ch;
m_usesTerminator=TRUE;
}
virtual void LineReceive(char* s, int nbCharAvail, BOOL ignoreDelimiter = FALSE);
virtual CString GetLastErrStr() {
return m_lastErrMsg;
}
typedef void(*p_fstr)(CString);
void SetCallback(p_fstr);
virtual DWORD Send(LPCSTR buffer, int l, BOOL needsResponse=FALSE) = 0; // [8/11/2004]
virtual DWORD Send(CString buffer, BOOL needsResponse=FALSE); // [8/11/2004]
virtual bool IsValid() = 0; // pure virtual function
protected:
p_fstr m_pReceiveNotify;
};
#endif // CMMIO_BASE_H