void Start() { m_Portal = GetComponent <GameNetPortal>(); m_Portal.NetworkStarted += NetworkStart; m_Portal.ConnectFinished += OnConnectFinished; m_Portal.NetManager.OnClientDisconnectCallback += OnDisconnectOrTimeout; }
/// <summary> /// Wraps the invocation of NetworkManager.StartClient, including our GUID as the payload. /// </summary> /// <remarks> /// This method must be static because, when it is invoked, the client still doesn't know it's a client yet, and in particular, GameNetPortal hasn't /// yet initialized its client and server GNP-Logic objects yet (which it does in NetworkStart, based on the role that the current player is performing). /// </remarks> /// <param name="portal"> </param> /// <param name="ipaddress">the IP address of the host to connect to. (currently IPV4 only)</param> /// <param name="port">The port of the host to connect to. </param> public static void StartClient(GameNetPortal portal, string ipaddress, int port) { //DMW_NOTE: non-portable. We need to be updated when moving to UTP transport. var chosenTransport = NetworkManager.Singleton.gameObject.GetComponent <TransportPicker>().IpHostTransport; NetworkManager.Singleton.NetworkConfig.NetworkTransport = chosenTransport; switch (chosenTransport) { case LiteNetLibTransport liteNetLibTransport: liteNetLibTransport.Address = ipaddress; liteNetLibTransport.Port = (ushort)port; break; case UNetTransport unetTransport: unetTransport.ConnectAddress = ipaddress; unetTransport.ConnectPort = port; break; default: throw new ArgumentOutOfRangeException(nameof(chosenTransport)); } ConnectClient(portal); }
/// <summary> /// Wraps the invocation of NetworkingManager.StartClient, including our GUID as the payload. /// </summary> /// <remarks> /// Relay version of <see cref="StartClient"/>, see start client remarks for more information. /// </remarks> /// <param name="portal"> </param> /// <param name="roomKey">The room name of the host to connect to.</param> public static bool StartClientRelayMode(GameNetPortal portal, string roomKey, out string failMessage) { var splits = roomKey.Split('_'); if (splits.Length != 2) { failMessage = "Malformatted Room Key!"; return(false); } var region = splits[0]; var roomName = splits[1]; var chosenTransport = NetworkManager.Singleton.gameObject.GetComponent <TransportPicker>().RelayTransport; NetworkManager.Singleton.NetworkConfig.NetworkTransport = chosenTransport; switch (chosenTransport) { case PhotonRealtimeTransport photonRealtimeTransport: photonRealtimeTransport.RoomName = roomName; PhotonAppSettings.Instance.AppSettings.FixedRegion = region; break; default: throw new Exception($"unhandled relay transport {chosenTransport.GetType()}"); } ConnectClient(portal); failMessage = String.Empty; return(true); }
public override void NetworkStart() { base.NetworkStart(); if (!IsServer) { enabled = false; } else { m_NetPortal = GameObject.FindGameObjectWithTag("GameNetPortal").GetComponent <GameNetPortal>(); m_ServerNetPortal = m_NetPortal.GetComponent <ServerGameNetPortal>(); m_NetPortal.ClientSceneChanged += OnClientSceneChanged; // retrieve the lobby state info so that the players we're about to spawn can query it var o = GameStateRelay.GetRelayObject(); if (o != null && o.GetType() != typeof(LobbyResults)) { throw new System.Exception("No LobbyResults found!"); } m_LobbyResults = (LobbyResults)o; DoInitialSpawnIfPossible(); } }
void Start() { m_Portal = GetComponent <GameNetPortal>(); m_Portal.NetworkStarted += NetworkStart; // we add ApprovalCheck callback BEFORE NetworkStart to avoid spurious MLAPI warning: // "No ConnectionApproval callback defined. Connection approval will timeout" m_Portal.NetManager.ConnectionApprovalCallback += ApprovalCheck; m_Portal.NetManager.OnServerStarted += ServerStartedHandler; m_ClientData = new Dictionary <string, PlayerData>(); m_ClientIDToGuid = new Dictionary <ulong, string>(); }
void Start() { // Find the game Net Portal by tag - it should have been created by Startup GameObject GamePortalGO = GameObject.FindGameObjectWithTag("GameNetPortal"); Assert.IsNotNull("No GameNetPortal found, Did you start the game from the Startup scene?"); m_GameNetPortal = GamePortalGO.GetComponent <GameNetPortal>(); m_ClientNetPortal = GamePortalGO.GetComponent <Client.ClientGameNetPortal>(); m_ClientNetPortal.NetworkTimedOut += OnNetworkTimeout; m_ClientNetPortal.ConnectFinished += OnConnectFinished; }
private static void ConnectClient(GameNetPortal portal) { var clientGuid = ClientPrefs.GetGuid(); //var payload = $"client_guid={clientGuid}\n"; //minimal format where key=value pairs are separated by newlines. //payload += $"client_scene={UnityEngine.SceneManagement.SceneManager.GetActiveScene().buildIndex}\n"; //payload += $"player_name={portal.PlayerName}\n"; var payload = JsonUtility.ToJson(new ConnectionPayload() { clientGUID = clientGuid, clientScene = SceneManager.GetActiveScene().buildIndex, playerName = portal.PlayerName }); var payloadBytes = System.Text.Encoding.UTF8.GetBytes(payload); portal.NetManager.NetworkConfig.ConnectionData = payloadBytes; portal.NetManager.NetworkConfig.ClientConnectionBufferTimeout = k_TimeoutDuration; //and...we're off! MLAPI will establish a socket connection to the host. // If the socket connection fails, we'll hear back by [???] (FIXME: GOMPS-79, need to handle transport layer failures too). // If the socket connection succeeds, we'll get our RecvConnectFinished invoked. This is where game-layer failures will be reported. portal.NetManager.StartClient(); }