You cannot select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
mitlib.pub/MITLIB/commdll/TCPIP/BufferedSocket.h

71 lines
2.2 KiB
C

#pragma once
#include <afxmt.h>
#include <afxsock.h>
#include "ConcurrentQueue.h"
#ifdef BUILD_COMMDLL
#define COMMDLL_DLLCLASS __declspec(dllexport)
#else
#define COMMDLL_DLLCLASS __declspec(dllimport)
#endif
class IBufferSocketCallBack
{
public:
virtual void OnReceive(const char *buffer, int len) = 0;
virtual void OnDisconnect(int errorCode) = 0;
};
class COMMDLL_DLLCLASS CBufferedSocket
{
// Forward declaration of internal classes
public:
class CBufferedSocketMessage;
class CBufferMessageThread;
class CReceivingThread;
class CSenderThread;
class CInternalMessageThread;
friend class CInternalMessageThread;
friend class CReceivingThread;
friend class CSenderThread;
// Private fields
private:
CConcurrentQueue<CBufferedSocketMessage> *m_pMessageQueue;
CConcurrentQueue<CBufferedSocketMessage> *m_pSendQueue;
CBufferMessageThread *m_pMessageThread;
CBufferMessageThread *m_PSenderThread;
IBufferSocketCallBack *m_pCallBack;
CReceivingThread *m_pReceivingThread;
CEvt *m_hConnectedEvent;
SOCKET s;
bool bIsConnected;
// Private methods
protected:
void OnReceive(const char* buf, size_t len);
void OnDisconnect(int errorCode);
int Read(char *buf, size_t size);
int Write(const char* buf, size_t len);
private:
CBufferedSocket(const CBufferedSocket&);
// Public methods
public:
CBufferedSocket(IBufferSocketCallBack *pCallBack);
~CBufferedSocket(void);
void ProcessMessage(CBufferedSocketMessage &message);
void Close();
bool Connect(const char* IpAddress, int port);
bool Send(const char* buf, size_t len, int milliSeconds = INFINITE);
bool IsConnected()
{
return bIsConnected;
}
bool WaitConnected();
bool WaitConnected(int milliseconds);
/* returns the percentage representing how full the send queue is */
double SendQueueFullState();
};