e9ecf5c85e
netutils.* Generici server e client di rpc via Sockets git-svn-id: svn://10.65.10.50/trunk@4502 c028cbd2-c16b-5b4b-a496-9718f37d4682
116 lines
2.9 KiB
C++
Executable File
116 lines
2.9 KiB
C++
Executable File
#ifndef __NETUTILS_H__
|
|
#define __NETUTILS_H__
|
|
|
|
#ifdef NO_MFC
|
|
#define STRICT
|
|
#include <windows.h>
|
|
#include "assoc.h"
|
|
#endif
|
|
|
|
class TConnection;
|
|
|
|
typedef int (*ConnectionFunction)(TConnection& conn, void* pJolly);
|
|
|
|
class TLanManager : public CObject
|
|
{
|
|
#ifdef NO_MFC
|
|
TAssoc_array m_mapConn;
|
|
#else
|
|
CMap<DWORD, DWORD, TConnection*, TConnection*> m_mapConn;
|
|
#endif
|
|
|
|
protected:
|
|
DWORD AddConnection(TConnection* pConn);
|
|
|
|
virtual TConnection* OnCreateConnection(DWORD id);
|
|
virtual BOOL OnRemoveConnection(DWORD id);
|
|
|
|
public:
|
|
virtual BOOL IsServer() const { return FALSE; }
|
|
virtual BOOL IsClient() const { return FALSE; }
|
|
virtual BOOL IsOk() const { return FALSE; }
|
|
|
|
virtual BOOL Execute(DWORD id, const char* cmd);
|
|
virtual BOOL Request(DWORD id, const char* cmd);
|
|
|
|
int ForEachConnection(ConnectionFunction f, void* pJolly);
|
|
|
|
BOOL HasConnections() const;
|
|
TConnection* GetConnection(DWORD id) const;
|
|
|
|
BOOL RemoveConnection(DWORD id);
|
|
void RemoveAllConnections();
|
|
|
|
TLanManager();
|
|
virtual ~TLanManager();
|
|
};
|
|
|
|
class TLanServer : public TLanManager
|
|
{
|
|
CString m_strName;
|
|
|
|
public:
|
|
const CString& Name() const { return m_strName; }
|
|
|
|
virtual BOOL IsServer() const { return TRUE; }
|
|
|
|
virtual BYTE* GetBuffer(DWORD dwSize) = 0;
|
|
BYTE* GetBufferSetString(const char* str);
|
|
BYTE* GetBufferSetBool(BOOL ok);
|
|
BYTE* GetBufferSetInteger(long n);
|
|
|
|
TLanServer(const char* name) : m_strName(name) { }
|
|
virtual ~TLanServer() { }
|
|
};
|
|
|
|
class TLanClient : public TLanManager
|
|
{
|
|
protected:
|
|
virtual TConnection* OnQueryConnection(const char* service,
|
|
const char* server) = 0;
|
|
public:
|
|
virtual BOOL IsClient() const { return TRUE; }
|
|
|
|
DWORD QueryConnection(const char* service,
|
|
const char* server = NULL);
|
|
|
|
virtual BOOL Execute(DWORD id, const char* cmd);
|
|
virtual BOOL Request(DWORD id, const char* cmd);
|
|
virtual BYTE* GetBuffer(DWORD& dwSize) = 0;
|
|
virtual void ReleaseBuffer() = 0;
|
|
|
|
BOOL RequestString(DWORD id, const char* cmd, CString& res);
|
|
BOOL RequestInteger(DWORD id, const char* cmd, long& num);
|
|
BOOL RequestBool(DWORD id, const char* cmd, BOOL& ok);
|
|
};
|
|
|
|
class TConnection : public CObject
|
|
{
|
|
TLanManager* m_pManager;
|
|
DWORD m_dwId;
|
|
|
|
protected:
|
|
int ParseCommand(const char* cmd, CStringArray& argv);
|
|
|
|
public:
|
|
DWORD Id() const { return m_dwId; }
|
|
|
|
TLanManager& Manager() const { return *m_pManager; }
|
|
TLanServer& Server() const;
|
|
|
|
virtual BOOL Execute(const char* cmd);
|
|
virtual BOOL Request(const char* cmd);
|
|
|
|
BOOL ReturnBool(int b) const { return Server().GetBufferSetBool(b) != NULL; }
|
|
BOOL ReturnInteger(long n) const { return Server().GetBufferSetInteger(n) != NULL; }
|
|
BOOL ReturnString(const CString& s) const { return Server().GetBufferSetString(s) != NULL; }
|
|
|
|
TConnection(TLanManager* lm, DWORD id);
|
|
virtual ~TConnection();
|
|
};
|
|
|
|
enum OsType { WINDOWS_31, WINDOWS_95, WINDOWS_NT };
|
|
OsType GetOsType();
|
|
|
|
#endif
|