public bool PollMessage(out ReceiveWrapper wrapper) { if (_messages.Count == 0) { wrapper = new ReceiveWrapper(); return(false); } wrapper = _messages.Dequeue(); return(true); }
private void AddLobby(ReceiveWrapper wrapper) { var newLobby = Instantiate(lobbyPrefab, content); var lobbyScript = newLobby.GetComponent <Lobby>(); lobbyScript.Name = (wrapper.message as FoundLobby).lobbyName; lobbyScript.Wrapper = wrapper; _lobbys.Add(wrapper.ip, lobbyScript); UpdateIds(); }
private void Update() { if (_closing) { bool openedConnections = false; for (int i = 0; i <= _maxConnections; i++) { if (_connections[i] == null) { continue; } openedConnections = true; break; } if (!openedConnections) { Destroy(gameObject); } } if (!EventsReady) { return; } EventsReady = false; NetworkEventType networkEvent; do { networkEvent = NetworkTransport.ReceiveFromHost( Id, out int connectionId, out int channelId, _packet, _packetSize, out int dataSize, out byte error ); ParseError("Failed to poll event", error); switch (networkEvent) { case NetworkEventType.ConnectEvent: { var connectionObject = Instantiate(_connectionPrefab, transform); _connections[connectionId] = connectionObject.GetComponent <Connection>(); _connections[connectionId].ImmediateStart(Id, connectionId); var wrapper = new ReceiveWrapper { message = new Connect(), connection = connectionId, ip = _connections[connectionId].Ip, port = _connections[connectionId].Port, }; _messages.Enqueue(wrapper); break; } case NetworkEventType.DataEvent: { var wrapper = new ReceiveWrapper { message = _formatter.Deserialize(_packet), connection = connectionId, ip = _connections[connectionId].Ip, port = _connections[connectionId].Port, }; wrapper.ping = NetworkTransport.GetRemoteDelayTimeMS(Id, connectionId, wrapper.message.timeStamp, out error); ParseError("Failed to get ping", error); _messages.Enqueue(wrapper); break; } case NetworkEventType.BroadcastEvent: { NetworkTransport.GetBroadcastConnectionMessage(Id, _broadcastPacket, _packetSize, out int size, out error); ParseError("Failed to get broadcast message", error); var wrapper = new ReceiveWrapper { message = _formatter.Deserialize(_broadcastPacket), }; NetworkTransport.GetBroadcastConnectionInfo(Id, out wrapper.ip, out wrapper.port, out error); ParseError("Failed to get broadcast connection info", error); _messages.Enqueue(wrapper); break; } case NetworkEventType.DisconnectEvent: { DisconnectError = (NetworkError)error; var wrapper = new ReceiveWrapper { message = new Disconnect(), connection = connectionId, }; if (_connections[connectionId] != null) { wrapper.ip = _connections[connectionId].Ip; wrapper.port = _connections[connectionId].Port; Destroy(_connections[connectionId].gameObject); } _messages.Enqueue(wrapper); break; } } }while (networkEvent != NetworkEventType.Nothing); }