X-Git-Url: https://git.ucc.asn.au/?p=progcomp2012.git;a=blobdiff_plain;f=judge%2Fmanager%2Fnetwork_controller.h;h=31b0c92b06e69ac292daeb566abca14a4427d95a;hp=7b9af300f35910f7d0dcf3a8e6c7ca23f68dd3e1;hb=f37d392713a0b6fec7a2c543edcd8402156f3744;hpb=73d5a5dab8881b9ed5f93a675d64f86a9b45e6bc diff --git a/judge/manager/network_controller.h b/judge/manager/network_controller.h index 7b9af30..31b0c92 100644 --- a/judge/manager/network_controller.h +++ b/judge/manager/network_controller.h @@ -1,51 +1,57 @@ -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include - - #include "controller.h" +#include "ai_controller.h" +#include "human_controller.h" +#include "network.h" #ifndef NETWORK_CONTROLLER_H #define NETWORK_CONTROLLER_H - class NetworkController : public Controller { public: - NetworkController(const Piece::Colour & newColour, const char * newName = "no-name"); - virtual ~NetworkController(); + NetworkController(const Piece::Colour & colour, Network * newNetwork) : Controller(colour), network(newNetwork) {} + virtual ~NetworkController() {} - virtual bool Valid() {return sfd != -1;} - - virtual void Message(const char * string); - virtual MovementResult QuerySetup(const char * opponentName, std::string setup[]) {fprintf(stderr, "NetworkController unimplemented!\n"); assert(false);} - virtual MovementResult QueryMove(std::string & buffer) {fprintf(stderr, "NetworkController unimplemented!\n"); assert(false);} + //virtual void Message(const char * message) = 0; + virtual bool Valid() const {return network->Valid();} protected: - int sfd; int cfd; - static const int port = 4950; + Network * network; }; -class Server : public NetworkController +class NetworkSender : public NetworkController { public: - Server(const Piece::Colour & newColour, const char * newName = "no-name"); - virtual ~Server() {} + NetworkSender(const Piece::Colour & colour, Controller * newController, Network * newNetwork) : NetworkController(colour, newNetwork), controller(newController) {} + virtual ~NetworkSender() {delete controller;} + + virtual bool Valid() const {return NetworkController::Valid() && controller->Valid();} + + virtual void Message(const char * message) + { + //fprintf(stderr,"NetworkSender sending message %s to underlying controller\n", message); + controller->Message(message); + } + + virtual MovementResult QuerySetup(const char * opponentName, std::string setup[]); + virtual MovementResult QueryMove(std::string & buffer); + + private: + Controller * controller; + }; -class Client : public NetworkController +class NetworkReceiver : public NetworkController { public: - Client(const Piece::Colour & newColour, const char * newName = "no-name", const char * server="127.0.0.1"); - virtual ~Client() {} + NetworkReceiver(const Piece::Colour & colour, Network * newNetwork) : NetworkController(colour, newNetwork) {} + virtual ~NetworkReceiver() {} + + virtual void Message(const char * message) {} //Do nothing (Counter intuitive much) + virtual MovementResult QuerySetup(const char * opponentName, std::string setup[]); + virtual MovementResult QueryMove(std::string & buffer); + + }; #endif //NETWORK_CONTROLLER_H