示例#1
0
        /// <summary>
        /// Validates that a given kick reason is acceptable for a remote kick.
        /// </summary>
        internal static NetCloseReason ValidateKickReason(NetCloseReason reason)
        {
            switch (reason)
            {
            case NetCloseReason.RejectNotHost:
                return(reason);

            case NetCloseReason.RejectFull:
                return(reason);

            case NetCloseReason.RejectVersion:
                return(reason);

            case NetCloseReason.KickTimeout:
                return(reason);

            case NetCloseReason.KickShutdown:
                return(reason);

            case NetCloseReason.KickError:
                return(reason);

            case NetCloseReason.KickUserReason:
                return(reason);
            }

            NetDebug.LogError("Bad kick reason: " + reason);
            return(NetCloseReason.INVALID);
        }
示例#2
0
        private void OnPeerClosed(
            NetPeer peer,
            NetCloseReason reason,
            byte userKickReason,
            SocketError error)
        {
            NetPeerWrapper wrapper = (NetPeerWrapper)peer.UserData;

            this.server.RemovePeer(wrapper);
        }
示例#3
0
 /// <summary>
 /// Closes a peer, sending out a best-effort notification and removing
 /// it from the dictionary of active peers.
 /// </summary>
 private void ClosePeer(
     NetPeer peer,
     NetCloseReason reason)
 {
     if (peer.IsOpen)
     {
         this.sender.SendKick(peer, reason);
     }
     this.ClosePeerSilent(peer);
 }
示例#4
0
        private NetEvent CreateClosedEvent(
            NetPeer target,
            NetCloseReason closeReason,
            byte userKickReason     = 0,
            SocketError socketError = SocketError.SocketError)
        {
            NetEvent evnt = CreateEvent(NetEventType.PeerClosed, target);

            evnt.CloseReason    = closeReason;
            evnt.UserKickReason = userKickReason;
            evnt.SocketError    = socketError;
            return(evnt);
        }
示例#5
0
        /// <summary>
        /// Notifies a peer that we are disconnecting. May not arrive.
        /// </summary>
        internal SocketError SendKick(NetPeer peer, NetCloseReason reason, byte userReason = 0)
        {
            // Skip the packet if it's a bad reason (this will cause error output)
            if (NetUtil.ValidateKickReason(reason) == NetCloseReason.INVALID)
            {
                return(SocketError.Success);
            }

            lock (sendLock)
            {
                var length = NetEncoding.PackProtocol(sendBuffer, NetPacketType.Kick, (byte)reason, userReason);
                return(TrySend(peer.EndPoint, sendBuffer, length));
            }
        }
        private void OnPeerDisconnected(NetPeer peer, DisconnectInfo disconnectInfo)
        {
            if (disconnectInfo.Reason == DisconnectReason.RemoteConnectionClose && disconnectInfo.AdditionalData.AvailableBytes > 0)
            {
                NetCloseReason reason = (NetCloseReason)disconnectInfo.AdditionalData.GetInt();
                ExitMsg = reason.ToLocal("msg");
            }
            else if (disconnectInfo.Reason == DisconnectReason.DisconnectPeerCalled)
            {
                //retain the existing exitmsg
            }
            else
            {
                ExitMsg = disconnectInfo.Reason.ToLocal("msg");
            }

            client.Stop();
            cleanup();
        }
示例#7
0
        /// <summary>
        /// Sends a kick (reject) message to an unconnected peer.
        /// </summary>
        internal SocketError SendReject(
            IPEndPoint destination,
            NetCloseReason reason)
        {
            // Skip the packet if it's a bad reason (this will cause error output)
            if (NetUtil.ValidateKickReason(reason) == NetCloseReason.INVALID)
            {
                return(SocketError.Success);
            }

            lock (this.sendLock)
            {
                int length =
                    NetEncoding.PackProtocol(
                        this.sendBuffer,
                        NetPacketType.Kick,
                        (byte)reason,
                        0);
                return(this.TrySend(destination, this.sendBuffer, length));
            }
        }
示例#8
0
        private void HandleKick(
            NetPeer peer,
            byte[] buffer,
            int length)
        {
            if (peer.IsClosed)
            {
                return;
            }

            byte rawReason;
            byte userReason;
            bool success =
                NetEncoding.ReadProtocol(
                    buffer,
                    length,
                    out rawReason,
                    out userReason);

            // Validate
            if (success == false)
            {
                NetDebug.LogError("Error reading kick");
                return;
            }

            NetCloseReason closeReason = (NetCloseReason)rawReason;

            // Skip the packet if it's a bad reason (this will cause error output)
            if (NetUtil.ValidateKickReason(closeReason) == NetCloseReason.INVALID)
            {
                return;
            }

            peer.OnReceiveOther(this.Time);
            this.ClosePeerSilent(peer);
            this.eventOut.Enqueue(
                this.CreateClosedEvent(peer, closeReason, userReason));
        }
示例#9
0
        /// <summary>
        /// Validates that a given kick reason is acceptable for a remote kick.
        /// </summary>
        internal static NetCloseReason ValidateKickReason(NetCloseReason reason)
        {
            switch (reason)
              {
            case NetCloseReason.RejectNotHost:
              return reason;
            case NetCloseReason.RejectFull:
              return reason;
            case NetCloseReason.RejectVersion:
              return reason;
            case NetCloseReason.KickTimeout:
              return reason;
            case NetCloseReason.KickShutdown:
              return reason;
            case NetCloseReason.KickError:
              return reason;
            case NetCloseReason.KickUserReason:
              return reason;
              }

              NetDebug.LogError("Bad kick reason: " + reason);
              return NetCloseReason.INVALID;
        }
示例#10
0
 internal void OnPeerClosed(NetCloseReason reason, byte userKickReason, SocketError error)
 {
     PeerClosed?.Invoke(this, reason, userKickReason, error);
 }
示例#11
0
 private void peerDisconnect(NetPeer peer, NetCloseReason reason)
 {
     ExitMsg = reason.ToLocal("msg");
     peer.Disconnect(createDCMsg((int)reason));
 }
示例#12
0
 private void Connection_PeerClosed(NetPeer peer, NetCloseReason reason, byte userKickReason, SocketError error)
 {
     Console.WriteLine("Peer closed due to reason: " + reason);
 }
示例#13
0
        /// <summary>
        /// Notifies a peer that we are disconnecting. May not arrive.
        /// </summary>
        internal SocketError SendKick(
      NetPeer peer,
      NetCloseReason reason,
      byte userReason = 0)
        {
            // Skip the packet if it's a bad reason (this will cause error output)
              if (NetUtil.ValidateKickReason(reason) == NetCloseReason.INVALID)
            return SocketError.Success;

              lock (this.sendLock)
              {
            int length =
            NetEncoding.PackProtocol(
              this.sendBuffer,
              NetPacketType.Kick,
              (byte)reason,
              userReason);
            return this.TrySend(peer.EndPoint, this.sendBuffer, length);
              }
        }
示例#14
0
 private void Network_PeerClosed(NetPeer peer, NetCloseReason reason, byte userKickReason, System.Net.Sockets.SocketError error)
 {
     Debug.Log("Disconnected: " + peer.EndPoint.ToString());
 }
示例#15
0
 private void Connection_PeerClosed(NetPeer peer, NetCloseReason reason, byte userKickReason, SocketError error)
 {
     Console.WriteLine("Peer closed due to reason: " + reason);
 }
示例#16
0
 internal void OnPeerClosed(NetCloseReason reason, byte userKickReason, SocketError error)
 {
     this.PeerClosed?.Invoke(this, reason, userKickReason, error);
 }