/*************************************************************************** OnlineChat.h - description ------------------- begin : Thu Jan 29 2004 copyright : (C) 2004 by upi email : upi@feel ***************************************************************************/ #ifndef ONLINECHAT_H #define ONLINECHAT_H /** The "mortal.net" chat protocoll should be simple enough... [LOGGING IN] Server: Client: N Server: OK [CHATTING] Server: J - User joins. Server: L - User leaves. Server: N - Nick change. Server: W - Whois response Server: Y - You are now known as... Server: C - Someone has challenged you! Server: M - Public message. Server: S - Server message. Client: M - Send message. Client: W - WHOIS query Client: L - Quit Client: C - Challenge a user */ #include "SDL_net.h" #include #include class CReadline; class CTextArea; struct SDL_Surface; typedef std::map TNickMap; class COnlineChat { public: COnlineChat(); ~COnlineChat(); bool Start(); void Stop(); void DoOnlineChat(); protected: void Redraw(); void Update(); // Read network traffic. Might get disconnected... void SendRawData( char a_cID, const std::string& a_rsData ); void ReceiveMsg( char a_cID, char* a_pcData ); void ReceiveUser( char a_cID, char* a_pcData ); void DrawNickList(); void Menu(); protected: TCPsocket m_poSocket; ///< The TCP/IP network socket. SDLNet_SocketSet m_poSocketSet; ///< SDLNet construct for watching the socket. char m_acIncomingBuffer[4096]; ///< Received data goes here. int m_iIncomingBufferSize; ///< How much of the buffer is filled? std::string m_sLastError; ///< The last error message from SDLNet SDL_Surface* m_poScreen; SDL_Surface* m_poBackground; CReadline* m_poReadline; CTextArea* m_poTextArea; bool m_bMyNickIsOk; TNickMap m_asNicks; }; #endif // ONLINECHAT_H