diff --git a/stepmania/src/NetworkSyncManager.cpp b/stepmania/src/NetworkSyncManager.cpp index 94609d732e..7f9ba77559 100644 --- a/stepmania/src/NetworkSyncManager.cpp +++ b/stepmania/src/NetworkSyncManager.cpp @@ -42,6 +42,7 @@ const ScreenMessage SM_ChangeSong = ScreenMessage(SM_User+5); NetworkSyncManager::NetworkSyncManager( LoadingWindow *ld ) { + LANserver = NULL; //So we know if it has been created yet if( GetCommandlineArgument( "runserver" )) { ld->SetText("Initilizing server..."); LANserver = new StepManiaLanServer; diff --git a/stepmania/src/NetworkSyncManager.h b/stepmania/src/NetworkSyncManager.h index e92733b1fb..3defaac6ba 100644 --- a/stepmania/src/NetworkSyncManager.h +++ b/stepmania/src/NetworkSyncManager.h @@ -84,6 +84,8 @@ public: int m_iSelectMode; void SelectUserSong(); + bool isLanServer; //Must be public for ScreenNetworkOptions + StepManiaLanServer *LANserver; private: #if !defined(WITHOUT_NETWORKING) @@ -112,10 +114,6 @@ private: bool Listen(unsigned short port); PacketFunctions m_packet; - - bool isLanServer; - StepManiaLanServer *LANserver; - #endif }; diff --git a/stepmania/src/ScreenNetworkOptions.cpp b/stepmania/src/ScreenNetworkOptions.cpp index d9935f9864..df413c9cc2 100644 --- a/stepmania/src/ScreenNetworkOptions.cpp +++ b/stepmania/src/ScreenNetworkOptions.cpp @@ -8,10 +8,12 @@ #include "ScreenManager.h" #include "ScreenTextEntry.h" #include "ScreenPrompt.h" +#include "NetworkSyncServer.h" enum { PO_CONNECTION, + PO_SERVER, NUM_NETWORK_OPTIONS_LINES }; @@ -20,11 +22,18 @@ enum { NO_CONNECT }; +enum { + NO_STOP_SERVER=0, + NO_START_SERVER +}; + OptionRowData g_NetworkOptionsLines[NUM_NETWORK_OPTIONS_LINES] = { OptionRowData( "Connection", true, "PRESS START" ), + OptionRowData( "Server", true, "PRESS START" ) }; const ScreenMessage SM_DoneConnecting = ScreenMessage(SM_User+1); +const ScreenMessage SM_ServerNameEnter = ScreenMessage(SM_User+2); ScreenNetworkOptions::ScreenNetworkOptions( CString sClassName ) : ScreenOptions( sClassName ) { @@ -33,6 +42,11 @@ ScreenNetworkOptions::ScreenNetworkOptions( CString sClassName ) : ScreenOptions g_NetworkOptionsLines[PO_CONNECTION].choices.clear(); g_NetworkOptionsLines[PO_CONNECTION].choices.push_back("Disconnect"); g_NetworkOptionsLines[PO_CONNECTION].choices.push_back("Connect..."); + + g_NetworkOptionsLines[PO_SERVER].choices.clear(); + g_NetworkOptionsLines[PO_SERVER].choices.push_back("Stop"); + g_NetworkOptionsLines[PO_SERVER].choices.push_back("Start..."); + Init( INPUTMODE_SHARE_CURSOR, @@ -65,6 +79,20 @@ void ScreenNetworkOptions::HandleScreenMessage( const ScreenMessage SM ) NSMAN->DisplayStartupStatus(); } break; + case SM_ServerNameEnter: + if( !ScreenTextEntry::s_bCancelledLast ) + { + if ( NSMAN->LANserver == NULL) + NSMAN->LANserver = new StepManiaLanServer; + NSMAN->LANserver->servername = ScreenTextEntry::s_sLastAnswer; + if (NSMAN->LANserver->ServerStart()) + { + NSMAN->isLanServer = true; + SCREENMAN->SystemMessage( "Server Started." ); + } + else + SCREENMAN->SystemMessage( "Server FAILED to start." ); + } } ScreenOptions::HandleScreenMessage( SM ); @@ -87,6 +115,18 @@ void ScreenNetworkOptions::MenuStart( PlayerNumber pn, const InputEventType type break; } break; + case PO_SERVER: + switch (m_Rows[GetCurrentRow()]->GetOneSharedSelection()) + { + case NO_START_SERVER: + SCREENMAN->TextEntry( SM_ServerNameEnter, "Enter a server name...", "", NULL ); + break; + case NO_STOP_SERVER: + if ( NSMAN->LANserver != NULL ) + NSMAN->LANserver->ServerStop(); + break; + } + break; default: ScreenOptions::MenuStart( pn, type ); }