#ifndef
OTSERV_PROTOCOL_H
#define
OTSERV_PROTOCOL_H
#include <stdio.h>
#include <boost/utility.hpp>
#include <boost/shared_ptr.hpp>
class NetworkMessage;
class OutputMessage;
class Connection;
typedef boost::shared_ptr<OutputMessage> OutputMessage_ptr;
#define CLIENT_VERSION_MIN 760
#define CLIENT_VERSION_MAX 760
#define STRING_CLIENT_VERSION "Please download the new client version from our website.
http://www.vexeria.pl"
class Protocol : boost::noncopyable
{
public:
Protocol(Connection* connection)
{
m_connection = connection;
m_rawMessages = false;
m_refCount = 0;
}
virtual ~Protocol() {}
virtual void parsePacket(NetworkMessage& msg){};
void onSendMessage(OutputMessage_ptr msg);
void onRecvMessage(NetworkMessage& msg);
virtual void onRecvFirstMessage(NetworkMessage& msg) = 0;
Connection* getConnection() { return m_connection;}
const Connection* getConnection() const { return m_connection;}
void setConnection(Connection* connection) { m_connection = connection; }
uint32_t getIP() const;
int32_t addRef() {return ++m_refCount;}
int32_t unRef() {return --m_refCount;}
protected:
//Use this function for autosend messages only
OutputMessage_ptr getOutputBuffer();
void setRawMessages(bool value) { m_rawMessages = value; }
virtual void releaseProtocol();
virtual void deleteProtocolTask();
friend class Connection;
private:
OutputMessage_ptr m_outputBuffer;
Connection* m_connection;
bool m_rawMessages;
uint32_t m_refCount;
};
#endif