about summary refs log tree commit diff
path: root/src/engine/server.h
diff options
context:
space:
mode:
authorMagnus Auvinen <magnus.auvinen@gmail.com>2010-05-29 07:25:38 +0000
committerMagnus Auvinen <magnus.auvinen@gmail.com>2010-05-29 07:25:38 +0000
commit72c06a258940696093f255fb1061beb58e1cdd0b (patch)
tree36b9a7712eec2d4f07837eab9c38ef1c5af85319 /src/engine/server.h
parente56feb597bc743677633432f77513b02907fd169 (diff)
downloadzcatch-72c06a258940696093f255fb1061beb58e1cdd0b.tar.gz
zcatch-72c06a258940696093f255fb1061beb58e1cdd0b.zip
copied refactor to trunk
Diffstat (limited to 'src/engine/server.h')
-rw-r--r--src/engine/server.h81
1 files changed, 81 insertions, 0 deletions
diff --git a/src/engine/server.h b/src/engine/server.h
new file mode 100644
index 00000000..52e6ec6a
--- /dev/null
+++ b/src/engine/server.h
@@ -0,0 +1,81 @@
+#ifndef ENGINE_SERVER_H
+#define ENGINE_SERVER_H
+#include "kernel.h"
+#include "message.h"
+
+class IServer : public IInterface
+{
+	MACRO_INTERFACE("server", 0)
+protected:
+	int m_CurrentGameTick;
+	int m_TickSpeed;
+
+public:
+	/*
+		Structure: CClientInfo
+	*/
+	struct CClientInfo
+	{
+		const char *m_pName;
+		int m_Latency;
+	};
+	
+	int Tick() const { return m_CurrentGameTick; }
+	int TickSpeed() const { return m_TickSpeed; }
+
+	virtual const char *ClientName(int ClientID) = 0;
+	virtual bool ClientIngame(int ClientID) = 0;
+	virtual int GetClientInfo(int ClientID, CClientInfo *pInfo) = 0;
+	virtual void GetClientIP(int ClientID, char *pIPString, int Size) = 0;
+	virtual int *LatestInput(int ClientID, int *pSize) = 0;
+	
+	virtual int SendMsg(CMsgPacker *pMsg, int Flags, int ClientID) = 0;
+
+	template<class T>
+	int SendPackMsg(T *pMsg, int Flags, int ClientID)
+	{
+		CMsgPacker Packer(pMsg->MsgID());
+		if(pMsg->Pack(&Packer))
+			return -1;
+		return SendMsg(&Packer, Flags, ClientID);
+	}
+	
+	virtual void SetBrowseInfo(char const *pGameType, int Progression) = 0;
+	virtual void SetClientName(int ClientID, char const *pName) = 0;
+	virtual void SetClientScore(int ClientID, int Score) = 0;
+	
+	virtual int SnapNewID() = 0;
+	virtual void SnapFreeID(int ID) = 0;
+	virtual void *SnapNewItem(int Type, int Id, int Size) = 0;
+
+	virtual void SnapSetStaticsize(int ItemType, int Size) = 0;
+};
+
+class IGameServer : public IInterface
+{
+	MACRO_INTERFACE("gameserver", 0)
+protected:
+public:
+	virtual void OnInit() = 0;
+	virtual void OnConsoleInit() = 0;
+	virtual void OnShutdown() = 0;
+	
+	virtual void OnTick() = 0;
+	virtual void OnPreSnap() = 0;
+	virtual void OnSnap(int ClientID) = 0;
+	virtual void OnPostSnap() = 0;
+	
+	virtual void OnMessage(int MsgId, CUnpacker *pUnpacker, int ClientID) = 0;
+
+	virtual void OnClientConnected(int ClientID) = 0;
+	virtual void OnClientEnter(int ClientID) = 0;
+	virtual void OnClientDrop(int ClientID) = 0;
+	virtual void OnClientDirectInput(int ClientID, void *pInput) = 0;
+	virtual void OnClientPredictedInput(int ClientID, void *pInput) = 0;
+	
+	virtual const char *Version() = 0;
+	virtual const char *NetVersion() = 0;
+};
+
+extern IGameServer *CreateGameServer();
+#endif