コード例 #1
0
        public void Open(NetPeerConfiguration config)
        {
            config.UseMessageRecycling = true;
            config.NetworkThreadName   = "LidgrenNetworkTransporter";

            config.EnableMessageType(NetIncomingMessageType.StatusChanged);
            config.EnableMessageType(NetIncomingMessageType.ConnectionLatencyUpdated);
            //config.EnableMessageType(NetIncomingMessageType.ConnectionApproval);
            config.EnableMessageType(NetIncomingMessageType.Data);
            config.EnableMessageType(NetIncomingMessageType.NatIntroductionSuccess);
            config.EnableMessageType(NetIncomingMessageType.UnconnectedData);
            config.EnableMessageType(NetIncomingMessageType.DebugMessage);
            config.EnableMessageType(NetIncomingMessageType.VerboseDebugMessage);
            config.EnableMessageType(NetIncomingMessageType.WarningMessage);
            config.EnableMessageType(NetIncomingMessageType.ErrorMessage);
            config.EnableMessageType(NetIncomingMessageType.Error);

            _lastSampledFrame = -1;

            _connections     = new Dictionary <NetConnection, ConnectionId>(config.MaximumConnections);
            _connectionsById = new ArrayDictionary <ConnectionId, NetConnection>(
                connId => connId.Value,
                i => new ConnectionId(i),
                config.MaximumConnections);
            _latencyTable = new ArrayDictionary <ConnectionId, float>(
                connId => connId.Value,
                i => new ConnectionId(i),
                config.MaximumConnections);

            _connectionIdPool = new Stack <ConnectionId>(config.MaximumConnections);
            for (int i = config.MaximumConnections - 1; i >= 0; i--)
            {
                _connectionIdPool.Push(new ConnectionId(i));
            }

            _netPeer = new NetPeer(config);
            _netPeer.Start();

            Debug.Log("internal endpoint is: " + UnityEngine.Network.player.ipAddress);
            _internalEndpoint = new IPEndPoint(IPAddress.Parse(UnityEngine.Network.player.ipAddress), _netPeer.Port);

            _status = TransporterStatus.Open;

            Debug.Log("Opened Lidgren transporter at " + _netPeer.Socket.LocalEndPoint);
        }
コード例 #2
0
        public void Close()
        {
            if (_status == TransporterStatus.Open)
            {
                _netPeer.Shutdown("Close");
                var connectionIds = _connections.Values;
                foreach (var connectionId in connectionIds)
                {
                    if (OnConnectionClosed != null)
                    {
                        OnConnectionClosed(connectionId);
                    }
                }
                _connections.Clear();
                _connectionsById.Clear();

                _status = TransporterStatus.Closed;
            }
        }
コード例 #3
0
        public void Open(NetPeerConfiguration config)
        {
            _approveConnection = ApproveConnection;
            _denyConnection    = DenyConnection;

            config.UseMessageRecycling = true;
            config.NetworkThreadName   = "LidgrenNetworkTransporter";

            config.EnableMessageType(NetIncomingMessageType.StatusChanged);
            config.EnableMessageType(NetIncomingMessageType.ConnectionLatencyUpdated);
            config.EnableMessageType(NetIncomingMessageType.ConnectionApproval);
            config.EnableMessageType(NetIncomingMessageType.Data);
            config.EnableMessageType(NetIncomingMessageType.NatIntroductionSuccess);
            config.EnableMessageType(NetIncomingMessageType.UnconnectedData);
            config.EnableMessageType(NetIncomingMessageType.DebugMessage);
            config.EnableMessageType(NetIncomingMessageType.VerboseDebugMessage);
            config.EnableMessageType(NetIncomingMessageType.WarningMessage);
            config.EnableMessageType(NetIncomingMessageType.ErrorMessage);
            config.EnableMessageType(NetIncomingMessageType.Error);

            _lastSampledFrame = -1;

            _awaitingApprovals = new Dictionary <ApprovalSecret, NetConnection>(config.MaximumConnections);
            _connections       = new Dictionary <NetConnection, ConnectionId>(config.MaximumConnections);
            _connectionsById   = new ArrayDictionary <ConnectionId, NetConnection>(_connectionIdPool.MaxConnectionIds);
            _latencyInfo       = new LatencyInfo(_connectionIdPool.MaxConnectionIds);

            _netPeer = new NetPeer(config);
            _netPeer.Start();

            Debug.Log("internal endpoint is: " + UnityEngine.Network.player.ipAddress);
            _internalEndpoint = new IPEndPoint(IPAddress.Parse(UnityEngine.Network.player.ipAddress), _netPeer.Port);
            _status           = TransporterStatus.Open;

            Debug.Log("Opened Lidgren transporter at " + _netPeer.Socket.LocalEndPoint);
        }