From 858ab01ae91982a5f247aa37084404fc72d7950d Mon Sep 17 00:00:00 2001 From: Steve Checkoway Date: Wed, 17 Mar 2004 06:05:52 +0000 Subject: [PATCH] Clean up NetworkSyncManager --- stepmania/src/NetworkSyncManager.cpp | 49 ++++++++++++++-------------- stepmania/src/NetworkSyncManager.h | 32 ++++++++---------- stepmania/src/StepMania.cpp | 7 ++-- stepmania/src/ezsockets.cpp | 13 ++++---- 4 files changed, 48 insertions(+), 53 deletions(-) diff --git a/stepmania/src/NetworkSyncManager.cpp b/stepmania/src/NetworkSyncManager.cpp index 3f25317818..d29e86bcdd 100644 --- a/stepmania/src/NetworkSyncManager.cpp +++ b/stepmania/src/NetworkSyncManager.cpp @@ -15,25 +15,27 @@ #include "ezsockets.h" #include "RageLog.h" - -NetworkSyncManager::NetworkSyncManager () +NetworkSyncManager::NetworkSyncManager(int argc, char **argv) { - //No Code + NetPlayerClient = new EzSockets; + if (argc > 1) + Connect(argv[1],8765); + else + useSMserver = false; } NetworkSyncManager::~NetworkSyncManager () { - if (useSMserver!=1) - return ; //Close Connection to server nicely. - NetPlayerClient.close(); - return ; + if (useSMserver) + NetPlayerClient->close(); + delete NetPlayerClient; } int NetworkSyncManager::Connect(char * addy, int port) { if (port!=8765) - return (-1); + return -1; //Make sure using port 8765 //This may change in future versions //It is this way now for protocol's purpose. @@ -43,21 +45,21 @@ int NetworkSyncManager::Connect(char * addy, int port) //will be connecting to localhost, this port does not matter. - NetPlayerClient.create(); //Initilize Socket + NetPlayerClient->create(); //Initilize Socket - if(!NetPlayerClient.connect(addy,port)) { + if(!NetPlayerClient->connect(addy,port)) { useSMserver = -1; //If connection to socket fails, tell //other network functions to not do anything } else { useSMserver = 1; //Utilize other network funtions } - return (1); + return 1; } -void NetworkSyncManager::ReportScore (int playerID, int step, int score, int combo) +void NetworkSyncManager::ReportScore(int playerID, int step, int score, int combo) { if (useSMserver!=1) //Make sure that we are using the network - return ; + return; netHolder SendNetPack; //Create packet to send to server @@ -66,12 +68,11 @@ void NetworkSyncManager::ReportScore (int playerID, int step, int score, int com SendNetPack.m_score=score; //Load packet with aproperate info SendNetPack.m_step=step-1; - NetPlayerClient.send((char*)&SendNetPack, sizeof(netHolder)); - //Send packet to server - return; + //Send packet to server + NetPlayerClient->send((char*)&SendNetPack, sizeof(netHolder)); } -void NetworkSyncManager::ReportSongOver () +void NetworkSyncManager::ReportSongOver() { if (useSMserver!=1) //Make sure that we are using the network return ; @@ -83,17 +84,16 @@ void NetworkSyncManager::ReportSongOver () SendNetPack.m_score=0; //Use PID 21 (Song over Packet) SendNetPack.m_step=0; - NetPlayerClient.send((char*)&SendNetPack, sizeof(netHolder)); + NetPlayerClient->send((char*)&SendNetPack, sizeof(netHolder)); return; } -void NetworkSyncManager::StartRequest () +void NetworkSyncManager::StartRequest() { if (useSMserver!=1) return ; - vector tmp; //Temporary vector used by receive function - //when waiting + vector tmp; //Temporary vector used by receive function when waiting LOG->Trace("Requesting Start from Server."); @@ -104,14 +104,15 @@ void NetworkSyncManager::StartRequest () SendNetPack.m_score=0; //PID 20 (Song Start Request Packet) SendNetPack.m_step=0; - NetPlayerClient.send((char*)&SendNetPack, sizeof(netHolder)); + NetPlayerClient->send((char*)&SendNetPack, sizeof(netHolder)); LOG->Trace("Waiting for RECV"); //Block until go is recieved. - NetPlayerClient.receive(tmp); + NetPlayerClient->receive(tmp); LOG->Trace("Starting Game."); - return ; } +//Global and accessable from anywhere +NetworkSyncManager *NSMAN; diff --git a/stepmania/src/NetworkSyncManager.h b/stepmania/src/NetworkSyncManager.h index 9840b19c41..14ab91390a 100644 --- a/stepmania/src/NetworkSyncManager.h +++ b/stepmania/src/NetworkSyncManager.h @@ -13,15 +13,12 @@ ----------------------------------------------------------------------------- */ -#include "ezsockets.h" - -static int useSMserver; //Using network or not? -static EzSockets NetPlayerClient; //Socket used for network traffic +class EzSockets; class NetworkSyncManager { public: - NetworkSyncManager(); + NetworkSyncManager(int argc, char **argv); ~NetworkSyncManager(); void ReportScore(int playerID, int step, int score, int combo); @@ -38,22 +35,21 @@ public: int m_step; int m_score; int m_combo; + bool useSMserver; + EzSockets *NetPlayerClient; + private: + struct netHolder //Data structure used for sending data to server + { + int m_playerID; //PID (also used for Commands) + int m_step; //SID (StepID, 0-6 for Miss to Marv, 7,8 for boo and ok) + int m_score; //Player's Score + int m_combo; //Player's Current Combo + }; + }; -class netHolder //Data structure used for sending data to server -{ -public: - int m_playerID; //PID (also used for Commands) - int m_step; //SID (StepID, 0-6 for Miss to Marv, 7,8 for boo and ok) - int m_score; //Player's Score - int m_combo; //Player's Current Combo -}; - -//Static this class inside itself -//so that other parts of the program that include -//NetworkSyncManager can use "currentNetPlayer" -static NetworkSyncManager currentNetPlayer; +extern NetworkSyncManager *NSMAN; #endif diff --git a/stepmania/src/StepMania.cpp b/stepmania/src/StepMania.cpp index 4feab48a75..f74610274f 100644 --- a/stepmania/src/StepMania.cpp +++ b/stepmania/src/StepMania.cpp @@ -870,10 +870,6 @@ int main(int argc, char* argv[]) #endif - if (argc > 1) - currentNetPlayer.Connect (argv[1],8765); - - /* Almost everything uses this to read and write files. Load this early. */ FILEMAN = new RageFileManager( argv[0] ); FILEMAN->MountInitialFilesystems(); @@ -977,6 +973,8 @@ int main(int argc, char* argv[]) UNLOCKMAN = new UnlockSystem; MODELMAN = new ModelManager; delete loading_window; // destroy this before init'ing Display + + NSMAN = new NetworkSyncManager(argc, argv); DISPLAY = CreateDisplay(); @@ -1038,6 +1036,7 @@ int main(int argc, char* argv[]) } #endif + SAFE_DELETE( NSMAN ); SAFE_DELETE( SCREENMAN ); /* Delete INPUTMAN before the other INPUTFILTER handlers, or an input * driver may try to send a message to INPUTFILTER after we delete it. */ diff --git a/stepmania/src/ezsockets.cpp b/stepmania/src/ezsockets.cpp index 879d9e7c13..875820c110 100644 --- a/stepmania/src/ezsockets.cpp +++ b/stepmania/src/ezsockets.cpp @@ -12,8 +12,10 @@ Windows-Based OSes. ********************************************/ +#ifdef _WINDOWS +//We need the Winsock32 Libary #pragma comment(lib,"wsock32.lib") - //We need the Winsock32 Libary +#endif #include "ezsockets.h" @@ -75,13 +77,10 @@ bool EzSockets::listen() { bool EzSockets::accept(EzSockets &socket) { //Windows wants it defined as a signed int -#if defined(WIN32) + //As does everything else -- Steve int length = sizeof(socket); -#else - unsigned int length = sizeof(socket); -#endif - socket.sock = ::accept(sock, (struct sockaddr *) & socket.addr,& length); + socket.sock = ::accept(sock, (struct sockaddr *)&socket.addr,&length); if (socket.sock < 0) { return false; } @@ -272,7 +271,7 @@ bool EzSockets::connect(std::string host, int port) { #else addr.sin_family = AF_INET; addr.sin_port = htons(port); - int status = inet_pton ( AF_INET, host.c_str(), &addr.sin_addr ); + inet_pton ( AF_INET, host.c_str(), &addr.sin_addr ); int desc = ::connect(sock,(struct sockaddr *)&addr,sizeof(addr)); #endif