#ifndef SERVER_ABSTRACTUSERINTERFACE
#define SERVER_ABSTRACTUSERINTERFACE

#include "serverinfo_user_container.h"
#include "pb/server_message.pb.h"

class Response;
class SessionEvent;
class GameEventContainer;
class RoomEvent;

class Server;

class Server_AbstractUserInterface : public ServerInfo_User_Container {
protected:
	Server *server;
public:
	Server_AbstractUserInterface(Server *_server) : server(_server) { }
	Server_AbstractUserInterface(Server *_server, const ServerInfo_User_Container &other) : ServerInfo_User_Container(other), server(_server) { }
	virtual ~Server_AbstractUserInterface() { }
	
	virtual void sendProtocolItem(const Response &item) = 0;
	virtual void sendProtocolItem(const SessionEvent &item) = 0;
	virtual void sendProtocolItem(const GameEventContainer &item) = 0;
	virtual void sendProtocolItem(const RoomEvent &item) = 0;
	void sendProtocolItemByType(ServerMessage::MessageType type, const ::google::protobuf::Message &item);
	
	static SessionEvent *prepareSessionEvent(const ::google::protobuf::Message &sessionEvent);
};

#endif
