/// <summary> /// Takes the data from the very first server transmission (spreadsheet data), and sets up the spreadsheet using it. /// </summary> /// <param name="aSocketState"></param> /// <param name="handshakeCompletedHandler"></param> private void startupDataRecieved(SocketState aSocketState, handleStartupData handshakeCompletedHandler) { if (!isTheConnectionAlive()) { return; } if (aSocketState.ErrorOccured) { handshakeCompletedHandler(new StartupData(aSocketState.ErrorMesssage)); closeConnection(); return; } IList <String> startupData = Networking.getMessageStringsFromBufferSeperatedByCharacter(aSocketState, '\n'); //Expects 1 Lines Of Startup Data, If It Isn't Recieved Continue Listening And Resets Buffer if (startupData.Count() < 1) { Networking.resetGrowableBufferWithMessagesSeperatedByCharacter(aSocketState, startupData, '\n'); Networking.listenForData(aSocketState, (ss) => { startupDataRecieved(ss, handshakeCompletedHandler); }); return; } // vinc: parse startup message to dictionary //string[] startupData_array = startupData[0].Trim().Split('\t'); string[] startupData_array = startupData[0].Split('\t'); handshakeCompletedHandler(new StartupData(startupData_array, startupData[0])); initialized = true; }
/// <summary> /// Connect this controller to the specified server, using the passed hostname, spreadsheet name, and handler to call when the handshake is complete. /// </summary> /// <param name="hostname"></param> /// <param name="spreadsheetName"></param> /// <param name="handshakeCompletedHandler"></param> public void connectToServer(string hostname, string spreadsheetName, handleStartupData handshakeCompletedHandler) { if (isTheConnectionAlive()) { return; } int connectedTimeout = 2500; Socket s = Networking.ConnectToNetworkNode( hostname, (ss) => { handleConnectedToServer(ss, spreadsheetName, handshakeCompletedHandler); }, Networking.DEFAULT_PORT, connectedTimeout ); }
/// <summary> /// Takes the data from the very first server transmission (spreadsheet data), and sets up the spreadsheet using it. /// </summary> /// <param name="aSocketState"></param> /// <param name="handshakeCompletedHandler"></param> private void startupDataRecieved(SocketState aSocketState, handleStartupData handshakeCompletedHandler) { if (!isTheConnectionAlive()) { return; } if (aSocketState.ErrorOccured) { handshakeCompletedHandler(new StartupData(aSocketState.ErrorMesssage)); closeConnection(); return; } IList <String> startupData = Networking.getMessageStringsFromBufferSeperatedByCharacter(aSocketState, '\n'); //Expects 1 Lines Of Startup Data, If It Isn't Recieved Continue Listening And Resets Buffer if (startupData.Count() < 1) { Networking.resetGrowableBufferWithMessagesSeperatedByCharacter(aSocketState, startupData, '\n'); Networking.listenForData(aSocketState, (ss) => { startupDataRecieved(ss, handshakeCompletedHandler); }); return; } //int playerId; //int worldWidth; //int worldHeight; //Int32.TryParse(setupData[0], out playerId); //Int32.TryParse(setupData[1], out worldWidth); //Int32.TryParse(setupData[2], out worldHeight); // vinc: parse startup message to dictionary string[] startupData_array = startupData[0].Trim().Split('\t'); //vinc: ensure there are even number of string in startupData if (!startupData_array[0].Equals("Startup") || startupData_array.Length % 2 != 0) { throw new ArgumentException(); } handshakeCompletedHandler(new StartupData(startupData_array)); initialized = true; }
/// <summary> /// The method to use when we've connected to the Server. /// </summary> /// <param name="aSocketState"></param> /// <param name="spreadsheetName"></param> /// <param name="handshakeCompletedHandler"></param> private void handleConnectedToServer(SocketState aSocketState, string spreadsheetName, handleStartupData handshakeCompletedHandler) { clientSocketState = aSocketState; if (aSocketState.ErrorOccured) { handshakeCompletedHandler(new StartupData(aSocketState.ErrorMesssage)); closeConnection(); return; } //Networking.Send(aSocketState.TheSocket, spreadsheetName + '\n'); Networking.Send(aSocketState.TheSocket, "Connect\t" + spreadsheetName + "\t\n"); Networking.listenForData(aSocketState, (ss) => { startupDataRecieved(ss, handshakeCompletedHandler); }); }