protected IEnumerator ProcessConnection_Server(Socket socket, Connection.ConnectionPurpose purpose, byte?standardisedBattleLevel = null) { NetworkStream stream = Connection.CreateNetworkStream(socket); //Verify connection if (!Connection.VerifyConnection_Server(stream, purpose, errCallback: canvasController.SetStatusMessageError, statusCallback: canvasController.SetStatusMessage)) { stream.Close(); Launch(connectionMode); //Reset section yield break; } switch (purpose) { case Connection.ConnectionPurpose.Battle: yield return(StartCoroutine(ProcessVerifiedConnection_Server_Battle(stream, standardisedBattleLevel))); break; case Connection.ConnectionPurpose.Trade: yield return(StartCoroutine(ProcessVerifiedConnection_Server_Trade(stream))); break; default: Debug.LogError("Unknown connection purpose to processes"); stream.Close(); break; } }
protected void Run_Client(Connection.ConnectionPurpose purpose, string addressString, int port = -1) { if (!Connection.TryConnectToServer( out Socket socket, errCallback: canvasController.SetStatusMessageError, statusCallback: canvasController.SetStatusMessage, ipAddress: addressString, port: port)) { socket?.Close(); SetInteractable(true); return; }
protected IEnumerator Server_Coroutine(Connection.ConnectionPurpose purpose, byte?standardisedLevel, int port = -1) { if (serverConnectionToProcess != null) { serverConnectionToProcess?.Close(); Debug.LogWarning("Connection waiting to be processed"); canvasController.SetStatusMessageError("Server connection trying to be opened whilst one already active"); SetInteractable(true); } canvasController.SetStatusMessage("Setting up server..."); Connection.TryStartHostServer( startedListeningListener: (IPEndPoint endPoint) => //Started listening { canvasController.SetStatusMessage($"Listening for connection at {endPoint.Address}:{endPoint.Port}..."); }, clientConnectedListener: null, //Async server doesn't use clientConnectedListener errCallback: canvasController.SetStatusMessageError, statusCallback: canvasController.SetStatusMessage, port: port); Socket sock; while (true) { sock = Connection.FetchAsyncNewClient(); if (sock != null) { break; } yield return(new WaitForFixedUpdate()); } connectionPurpose = purpose; SetServerConnectionToProcess(sock, standardisedLevel); }
private void GoButtonListener() { string addressString = addressInput.text; string purposeString = purposeDropdownOptions[purposeDropdown.value]; Connection.ConnectionPurpose purpose = purposeDropdownOptionValues[purposeString]; string standardisedLevelString = standarisedLevelDropdownOptions[standarisedLevelDropdown.value]; byte? standardisedLevel = standardisedLevelDropdownOptionValues[standardisedLevelString]; int port; if (portInput.text == "") { port = -1; } else { if (!int.TryParse(portInput.text, out port)) { canvasController.SetStatusMessageError("Invalid port provided"); return; } } switch (connectionMode) { case ConnectionMode.Server: SetInteractivityForServerListening(); Run_Server(purpose, standardisedLevel, port); break; case ConnectionMode.Client: SetInteractable(false); Run_Client(purpose, addressString, port); break; default: Debug.LogError("Unknown connection mode - " + connectionMode); return; } }
protected void Run_Server(Connection.ConnectionPurpose purpose, byte?standardisedLevel, int port = -1) { StartCoroutine(Server_Coroutine(purpose, standardisedLevel, port)); }