Ejemplo n.º 1
0
		private void HandleRakNetMessage(IPEndPoint senderEndpoint, OpenConnectionRequest2 incoming)
		{
			PlayerNetworkSession session;
			lock (_playerSessions)
			{
				DateTime trash;
				if (!_connectionAttemps.TryRemove(senderEndpoint, out trash))
				{
					Log.WarnFormat("Unexpected connection request packet from {0}. Probably a resend.", senderEndpoint.Address);
					return;
				}

				if (_playerSessions.TryGetValue(senderEndpoint, out session))
				{
					// Already connecting, then this is just a duplicate
					if (session.State == ConnectionState.Connecting /* && DateTime.UtcNow < session.LastUpdatedTime + TimeSpan.FromSeconds(2)*/)
					{
						return;
					}

					Log.InfoFormat("Unexpected session from {0}. Removing old session and disconnecting old player.", senderEndpoint.Address);

					Player oldPlayer = session.Player;
					if (oldPlayer != null)
					{
						oldPlayer.Disconnect("Reconnecting.", false);
					}

					_playerSessions.TryRemove(session.EndPoint, out session);
				}

				session = new PlayerNetworkSession(null, senderEndpoint)
				{
					State = ConnectionState.Connecting,
					LastUpdatedTime = DateTime.UtcNow,
					Mtuize = incoming.mtuSize
				};

				_playerSessions.TryAdd(senderEndpoint, session);
			}

			Player player = PlayerFactory.CreatePlayer(this, senderEndpoint, incoming.mtuSize);
			player.ClientGuid = incoming.clientGuid;
			player.NetworkSession = session;
			session.Player = player;

			var reply = OpenConnectionReply2.CreateObject();
			reply.serverGuid = 12345;
			reply.clientendpoint = senderEndpoint;
			reply.mtuSize = incoming.mtuSize;
			reply.doSecurityAndHandshake = new byte[1];
			var data = reply.Encode();
			reply.PutPool();

			TraceSend(reply);

			SendData(data, senderEndpoint);
		}
Ejemplo n.º 2
0
        public void SendOpenConnectionRequest2()
        {
            var packet = new OpenConnectionRequest2()
            {
                systemadress = new byte[4],
                mtuSize = _mtuSize,
                //clientUdpPort = (short) _listener.Client.
            };

            var data = packet.Encode();

            TraceSend(packet);

            SendData(data);
        }
Ejemplo n.º 3
0
        public void SendOpenConnectionRequest2()
        {
            _clientGuid = new Random().Next();
            var packet = new OpenConnectionRequest2()
            {
                clientendpoint = _clientEndpoint,
                mtuSize = _mtuSize,
                clientGuid = _clientGuid,
            };

            var data = packet.Encode();

            TraceSend(packet);

            SendData(data);
        }
Ejemplo n.º 4
0
        public void SendOpenConnectionRequest2()
        {
            var packet = new OpenConnectionRequest2()
            {
                systemadress = new byte[4],
                mtuSize = _mtuSize
            };

            var data = packet.Encode();
            SendData(data);
        }