@@ -828,27 +828,19 @@ private void ProcessConnectRequest(
828828 RemovePeer ( netPeer ) ;
829829 //go to new connection
830830 break ;
831- case ConnectRequestResult . P2PConnection :
832- lock ( _requestsDict )
833- {
834- req = new ConnectionRequest (
835- netPeer . ConnectTime ,
836- connectionNumber ,
837- ConnectionRequestType . PeerToPeer ,
838- connRequest . Data ,
839- remoteEndPoint ,
840- this ) ;
841- _requestsDict . Add ( remoteEndPoint , req ) ;
842- }
843- CreateEvent ( NetEvent . EType . ConnectionRequest , connectionRequest : req ) ;
844- return ;
831+ case ConnectRequestResult . P2PLose :
832+ DisconnectPeerForce ( netPeer , DisconnectReason . PeerToPeerConnection , 0 , null ) ;
833+ RemovePeer ( netPeer ) ;
834+ //go to new connection
835+ break ;
845836 default :
846837 //no operations needed
847838 return ;
848839 }
849840 //ConnectRequestResult.NewConnection
850841 //Set next connection number
851- connectionNumber = ( byte ) ( ( netPeer . ConnectionNum + 1 ) % NetConstants . MaxConnectionNumber ) ;
842+ if ( processResult != ConnectRequestResult . P2PLose )
843+ connectionNumber = ( byte ) ( ( netPeer . ConnectionNum + 1 ) % NetConstants . MaxConnectionNumber ) ;
852844 //To reconnect peer
853845 }
854846 else
@@ -866,7 +858,6 @@ private void ProcessConnectRequest(
866858 req = new ConnectionRequest (
867859 connRequest . ConnectionTime ,
868860 connectionNumber ,
869- ConnectionRequestType . Incoming ,
870861 connRequest . Data ,
871862 remoteEndPoint ,
872863 this ) ;
@@ -904,20 +895,39 @@ private void DataReceived(byte[] reusableBuffer, int count, IPEndPoint remoteEnd
904895 return ;
905896 }
906897
907- //special case connect request
908- if ( packet . Property == PacketProperty . ConnectRequest &&
909- NetConnectRequestPacket . GetProtocolId ( packet ) != NetConstants . ProtocolId )
898+ switch ( packet . Property )
910899 {
911- SendRawAndRecycle ( NetPacketPool . GetWithProperty ( PacketProperty . InvalidProtocol ) , remoteEndPoint ) ;
912- return ;
900+ //special case connect request
901+ case PacketProperty . ConnectRequest :
902+ if ( NetConnectRequestPacket . GetProtocolId ( packet ) != NetConstants . ProtocolId )
903+ {
904+ SendRawAndRecycle ( NetPacketPool . GetWithProperty ( PacketProperty . InvalidProtocol ) , remoteEndPoint ) ;
905+ return ;
906+ }
907+ break ;
908+ //unconnected messages
909+ case PacketProperty . Broadcast :
910+ if ( ! BroadcastReceiveEnabled )
911+ return ;
912+ CreateEvent ( NetEvent . EType . Broadcast , remoteEndPoint : remoteEndPoint , readerSource : packet ) ;
913+ return ;
914+ case PacketProperty . UnconnectedMessage :
915+ if ( ! UnconnectedMessagesEnabled )
916+ return ;
917+ CreateEvent ( NetEvent . EType . ReceiveUnconnected , remoteEndPoint : remoteEndPoint , readerSource : packet ) ;
918+ return ;
919+ case PacketProperty . NatMessage :
920+ if ( NatPunchEnabled )
921+ NatPunchModule . ProcessMessage ( remoteEndPoint , packet ) ;
922+ return ;
913923 }
914924
925+ //Check normal packets
915926 NetPeer netPeer ;
916927 _peersLock . EnterReadLock ( ) ;
917928 bool peerFound = _peersDict . TryGetValue ( remoteEndPoint , out netPeer ) ;
918929 _peersLock . ExitReadLock ( ) ;
919-
920- //Check normal packets
930+
921931 switch ( packet . Property )
922932 {
923933 case PacketProperty . ConnectRequest :
@@ -953,22 +963,6 @@ private void DataReceived(byte[] reusableBuffer, int count, IPEndPoint remoteEnd
953963 SendRawAndRecycle ( packet , remoteEndPoint ) ;
954964 }
955965 break ;
956- case PacketProperty . Broadcast :
957- if ( ! BroadcastReceiveEnabled )
958- break ;
959- CreateEvent ( NetEvent . EType . Broadcast , remoteEndPoint : remoteEndPoint , readerSource : packet ) ;
960- break ;
961-
962- case PacketProperty . UnconnectedMessage :
963- if ( ! UnconnectedMessagesEnabled )
964- break ;
965- CreateEvent ( NetEvent . EType . ReceiveUnconnected , remoteEndPoint : remoteEndPoint , readerSource : packet ) ;
966- break ;
967-
968- case PacketProperty . NatMessage :
969- if ( NatPunchEnabled )
970- NatPunchModule . ProcessMessage ( remoteEndPoint , packet ) ;
971- break ;
972966 case PacketProperty . InvalidProtocol :
973967 if ( peerFound && netPeer . ConnectionState == ConnectionState . Outgoing )
974968 DisconnectPeerForce ( netPeer , DisconnectReason . InvalidProtocol , 0 , null ) ;
@@ -996,10 +990,11 @@ private void DataReceived(byte[] reusableBuffer, int count, IPEndPoint remoteEnd
996990 //Send shutdown
997991 SendRawAndRecycle ( NetPacketPool . GetWithProperty ( PacketProperty . ShutdownOk ) , remoteEndPoint ) ;
998992 break ;
999-
1000993 case PacketProperty . ConnectAccept :
994+ if ( ! peerFound )
995+ return ;
1001996 var connAccept = NetConnectAcceptPacket . FromData ( packet ) ;
1002- if ( connAccept != null && peerFound && netPeer . ProcessConnectAccept ( connAccept ) )
997+ if ( connAccept != null && netPeer . ProcessConnectAccept ( connAccept ) )
1003998 CreateEvent ( NetEvent . EType . Connect , netPeer ) ;
1004999 break ;
10051000 default :
0 commit comments