#ifndef EGO_H
#define EGO_H
#include "Message.h"
#include <list>
#include <queue>

enum states
{
   NEWCONNECTION,
   GETUSERNAME,
   CHECKUSERNAME,
   GETPASSWORD,
   GETNEWPASSWORD,
   MAINMENU,
   CHATMODE,
   WHITEBOARD,
   WAITTOCLOSE
};

class Ego
{
   int desc;
   ofstream outdata;
   char* inputbuffer;
   int inputbufferlen;
   queue<Message*> inBuffer;
   queue<Message*> outBuffer;
   char username[32];
   char password[32];
   states state;
   public:
   Ego( char * , int descriptor );
   ~Ego();
   int idle;
   int  descriptor();
   bool input();
   bool output();
   Message* command();
   states getstate();
   void setstate(states);

   void setuser(char*);
   char* getuser();

   void setpass(char*);
   bool passmatch(char*);

   void write( Message* );
   void write();
   bool read();
   void parse();

   void inroom( Message* );
   void listinroom();
   void announce( Ego* );
   void left( Ego* );
};
extern list<Ego*> Elist;
#endif
