#ifndef MEETING_H #define MEETING_H #include #include #include "smanager.h" #include "pline.h" #include "types.h" class MPOptionWidget; /** Internal class : net meeting. */ class NetMeeting : public KDialogBase { TQ_OBJECT public: // "gameName" and "gameId" are TQByteArray because they are // used for ID comparing between games. NetMeeting(const cId &id, Socket *, MPOptionWidget *option, bool server, TQWidget *parent = 0, const char * name = 0); virtual ~NetMeeting(); protected slots: void readNotifier(int socket); virtual void textChanged(const TQString &) = 0; virtual void typeChanged(MeetingCheckBox::Type) = 0; virtual void reject(); virtual void accept(); protected: enum PlayerState { NewPlayer, IdChecked, Accepted }; TQValueList players; bool server; MeetingLine *spl; WidgetList *wl; SocketManager sm; MPOptionWidget *ow; cId id; bool socketRemoved; void appendLine(const MeetingLineData &pld, bool server); void removeLine(uint i); void setType(const TypeInfo &ti); void setText(const TextInfo &ti); void cleanReject(const TQString &str = TQString()); bool checkState(uint i, PlayerState s); bool checkAndSetState(uint i, PlayerState os, PlayerState ns); bool ready() const; virtual void idFlag(uint i) { dataError(i); } virtual void newFlag(uint i) { dataError(i); } virtual void endFlag(uint i) { dataError(i); } virtual void modTypeFlag(uint i) { dataError(i); } virtual void modTextFlag(uint i) { dataError(i); } virtual void delFlag(uint i) { dataError(i); } virtual void modOptFlag(uint i) { dataError(i); } virtual void playFlag(uint i) { dataError(i); } virtual void netError(uint i, const TQString &str) = 0; virtual void writeToAll(uint i=0) = 0; void readError(uint i); void writeError(uint i); void dataError(uint i); void brokeError(uint i); void message(const TQString &str); private: TQLabel *labWait; TQStatusBar *status; void waiting(); void readData(uint i); }; class ServerNetMeeting : public NetMeeting { TQ_OBJECT public: ServerNetMeeting(const cId &id, const RemoteHostData &rhd, MPOptionWidget *options, TQPtrList &arhd, TQWidget *parent = 0, const char * name = 0); private slots: void newHost(int); void textChanged(const TQString &text); void typeChanged(MeetingCheckBox::Type); void accept(); void optionsChanged(); private: TQPtrList &rhd; void idFlag(uint i); void newFlag(uint i); void endFlag(uint i); void modTypeFlag(uint i); void modTextFlag(uint i); void netError(uint i, const TQString &str); void writeToAll(uint i = 0); void disconnectHost(uint i, const TQString &str); }; class ClientNetMeeting : public NetMeeting { TQ_OBJECT public: ClientNetMeeting(const cId &id, const RemoteHostData &rhd, MPOptionWidget *options, TQWidget *parent = 0, const char * name = 0); private slots: void textChanged(const TQString &text); void typeChanged(MeetingCheckBox::Type); private: TQValueList bds; void idFlag(uint); void newFlag(uint); void endFlag(uint); void delFlag(uint); void modTypeFlag(uint); void modTextFlag(uint); void modOptFlag(uint); void playFlag(uint); void writeToAll(uint i=0); void netError(uint, const TQString &str); }; #endif // MEETING_H