/// <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;
        }
示例#2
0
        /// <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
                );
        }
示例#3
0
        /// <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;
        }
示例#4
0
        /// <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); });
        }