Esempio n. 1
0
 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();
        }
Esempio n. 3
0
        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);
        }