@@ -760,198 +760,200 @@ private IEnumerator ApprovalTimeout(uint clientId)
760
760
761
761
private void HandleIncomingData ( uint clientId , byte [ ] data , int channelId )
762
762
{
763
- BitReader reader = new BitReader ( data ) ;
764
-
765
- ushort messageType = reader . ReadUShort ( ) ;
766
- bool targeted = reader . ReadBool ( ) ;
767
- uint targetNetworkId = 0 ;
768
- ushort networkOrderId = 0 ;
769
- if ( targeted )
763
+ using ( BitReader reader = BitReader . Get ( data ) )
770
764
{
771
- targetNetworkId = reader . ReadUInt ( ) ;
772
- networkOrderId = reader . ReadUShort ( ) ;
773
- }
774
- bool isPassthrough = reader . ReadBool ( ) ;
775
-
776
- uint passthroughOrigin = 0 ;
777
- uint passthroughTarget = 0 ;
778
-
779
- if ( isPassthrough && isServer )
780
- passthroughTarget = reader . ReadUInt ( ) ;
781
- else if ( isPassthrough && ! isServer )
782
- passthroughOrigin = reader . ReadUInt ( ) ;
783
-
765
+ ushort messageType = reader . ReadUShort ( ) ;
766
+ bool targeted = reader . ReadBool ( ) ;
767
+ uint targetNetworkId = 0 ;
768
+ ushort networkOrderId = 0 ;
769
+ if ( targeted )
770
+ {
771
+ targetNetworkId = reader . ReadUInt ( ) ;
772
+ networkOrderId = reader . ReadUShort ( ) ;
773
+ }
774
+ bool isPassthrough = reader . ReadBool ( ) ;
784
775
785
- //Client tried to send a network message that was not the connection request before he was accepted.
786
- if ( isServer && pendingClients . Contains ( clientId ) && messageType != 0 )
787
- {
788
- Debug . LogWarning ( "MLAPI: Message recieved from clientId " + clientId + " before it has been accepted" ) ;
789
- return ;
790
- }
776
+ uint passthroughOrigin = 0 ;
777
+ uint passthroughTarget = 0 ;
791
778
779
+ if ( isPassthrough && isServer )
780
+ passthroughTarget = reader . ReadUInt ( ) ;
781
+ else if ( isPassthrough && ! isServer )
782
+ passthroughOrigin = reader . ReadUInt ( ) ;
792
783
793
- //ushort bytesToRead = reader.ReadUShort();
794
- reader . SkipPadded ( ) ;
795
- byte [ ] readBuffer = null ;
796
- if ( NetworkConfig . EncryptedChannelsHashSet . Contains ( MessageManager . reverseChannels [ channelId ] ) )
797
- {
798
- //Encrypted message
799
- if ( isServer )
800
- readBuffer = CryptographyHelper . Decrypt ( reader . ReadByteArray ( ) , connectedClients [ clientId ] . AesKey ) ;
801
- else
802
- readBuffer = CryptographyHelper . Decrypt ( reader . ReadByteArray ( ) , clientAesKey ) ;
803
- }
804
784
805
- if ( isServer && isPassthrough && ! NetworkConfig . PassthroughMessageHashSet . Contains ( messageType ) )
806
- {
807
- Debug . LogWarning ( "MLAPI: Client " + clientId + " tried to send a passthrough message for a messageType not registered as passthrough" ) ;
808
- return ;
809
- }
810
- else if ( isClient && isPassthrough && ! NetworkConfig . PassthroughMessageHashSet . Contains ( messageType ) )
811
- {
812
- Debug . LogWarning ( "MLAPI: Server tried to send a passthrough message for a messageType not registered as passthrough" ) ;
813
- return ;
814
- }
815
- else if ( isServer && isPassthrough )
816
- {
817
- if ( ! connectedClients . ContainsKey ( passthroughTarget ) )
785
+ //Client tried to send a network message that was not the connection request before he was accepted.
786
+ if ( isServer && pendingClients . Contains ( clientId ) && messageType != 0 )
818
787
{
819
- Debug . LogWarning ( "MLAPI: Passthrough message was sent with invalid target: " + passthroughTarget + " from client " + clientId ) ;
788
+ Debug . LogWarning ( "MLAPI: Message recieved from clientId " + clientId + " before it has been accepted" ) ;
820
789
return ;
821
790
}
822
- uint ? netIdTarget = null ;
823
- ushort ? netOrderId = null ;
824
- if ( targeted )
791
+
792
+ reader . SkipPadded ( ) ;
793
+ byte [ ] readBuffer = null ;
794
+ if ( NetworkConfig . EncryptedChannelsHashSet . Contains ( MessageManager . reverseChannels [ channelId ] ) )
825
795
{
826
- netIdTarget = targetNetworkId ;
827
- netOrderId = networkOrderId ;
796
+ //Encrypted message
797
+ if ( isServer )
798
+ readBuffer = CryptographyHelper . Decrypt ( reader . ReadByteArray ( ) , connectedClients [ clientId ] . AesKey ) ;
799
+ else
800
+ readBuffer = CryptographyHelper . Decrypt ( reader . ReadByteArray ( ) , clientAesKey ) ;
828
801
}
829
- if ( readBuffer == null )
830
- readBuffer = reader . ReadByteArray ( ) ;
831
- InternalMessageHandler . PassthroughSend ( passthroughTarget , clientId , messageType , channelId , readBuffer , netIdTarget , netOrderId ) ;
832
- return ;
833
- }
834
-
835
- BitReader messageReader = reader ;
836
- if ( readBuffer != null )
837
- messageReader = new BitReader ( reader . ReadByteArray ( ) ) ;
838
802
839
- if ( messageType >= 32 )
840
- {
841
- #region CUSTOM MESSAGE
842
- //Custom message, invoke all message handlers
843
- if ( targeted )
803
+ using ( BitReader messageReader = readBuffer == null ? reader : BitReader . Get ( readBuffer ) )
844
804
{
845
- if ( ! SpawnManager . spawnedObjects . ContainsKey ( targetNetworkId ) )
805
+ if ( isServer && isPassthrough && ! NetworkConfig . PassthroughMessageHashSet . Contains ( messageType ) )
846
806
{
847
- Debug . LogWarning ( "MLAPI: No target for message found" ) ;
807
+ Debug . LogWarning ( "MLAPI: Client " + clientId + " tried to send a passthrough message for a messageType not registered as passthrough" ) ;
808
+ messageReader . Dispose ( ) ;
848
809
return ;
849
810
}
850
- else if ( ! SpawnManager . spawnedObjects [ targetNetworkId ] . targetMessageActions . ContainsKey ( networkOrderId ) )
811
+ else if ( isClient && isPassthrough && ! NetworkConfig . PassthroughMessageHashSet . Contains ( messageType ) )
851
812
{
852
- Debug . LogWarning ( "MLAPI: No target messageType for message found" ) ;
813
+ Debug . LogWarning ( "MLAPI: Server tried to send a passthrough message for a messageType not registered as passthrough" ) ;
814
+ messageReader . Dispose ( ) ;
853
815
return ;
854
816
}
855
- else if ( ! SpawnManager . spawnedObjects [ targetNetworkId ] . targetMessageActions [ networkOrderId ] . ContainsKey ( messageType ) )
817
+ else if ( isServer && isPassthrough )
856
818
{
857
- Debug . LogWarning ( "MLAPI: No target found with the given messageType" ) ;
819
+ if ( ! connectedClients . ContainsKey ( passthroughTarget ) )
820
+ {
821
+ Debug . LogWarning ( "MLAPI: Passthrough message was sent with invalid target: " + passthroughTarget + " from client " + clientId ) ;
822
+ messageReader . Dispose ( ) ;
823
+ return ;
824
+ }
825
+ uint ? netIdTarget = null ;
826
+ ushort ? netOrderId = null ;
827
+ if ( targeted )
828
+ {
829
+ netIdTarget = targetNetworkId ;
830
+ netOrderId = networkOrderId ;
831
+ }
832
+ InternalMessageHandler . PassthroughSend ( passthroughTarget , clientId , messageType , channelId , messageReader , netIdTarget , netOrderId ) ;
858
833
return ;
859
834
}
860
- if ( SpawnManager . spawnedObjects [ targetNetworkId ] . targetMessageActions [ networkOrderId ] . ContainsKey ( messageType ) )
835
+
836
+ if ( messageType >= 32 )
861
837
{
862
- SpawnManager . spawnedObjects [ targetNetworkId ] . targetMessageActions [ networkOrderId ] [ messageType ] . Invoke ( clientId , messageReader ) ;
838
+ #region CUSTOM MESSAGE
839
+ //Custom message, invoke all message handlers
840
+ if ( targeted )
841
+ {
842
+ if ( ! SpawnManager . spawnedObjects . ContainsKey ( targetNetworkId ) )
843
+ {
844
+ Debug . LogWarning ( "MLAPI: No target for message found" ) ;
845
+ messageReader . Dispose ( ) ;
846
+ return ;
847
+ }
848
+ else if ( ! SpawnManager . spawnedObjects [ targetNetworkId ] . targetMessageActions . ContainsKey ( networkOrderId ) )
849
+ {
850
+ Debug . LogWarning ( "MLAPI: No target messageType for message found" ) ;
851
+ messageReader . Dispose ( ) ;
852
+ return ;
853
+ }
854
+ else if ( ! SpawnManager . spawnedObjects [ targetNetworkId ] . targetMessageActions [ networkOrderId ] . ContainsKey ( messageType ) )
855
+ {
856
+ Debug . LogWarning ( "MLAPI: No target found with the given messageType" ) ;
857
+ messageReader . Dispose ( ) ;
858
+ return ;
859
+ }
860
+ if ( SpawnManager . spawnedObjects [ targetNetworkId ] . targetMessageActions [ networkOrderId ] . ContainsKey ( messageType ) )
861
+ {
862
+ SpawnManager . spawnedObjects [ targetNetworkId ] . targetMessageActions [ networkOrderId ] [ messageType ] . Invoke ( clientId , messageReader ) ;
863
+ }
864
+ }
865
+ else
866
+ {
867
+ foreach ( KeyValuePair < int , Action < uint , BitReader > > pair in MessageManager . messageCallbacks [ messageType ] )
868
+ {
869
+ if ( isPassthrough )
870
+ pair . Value ( passthroughOrigin , messageReader ) ;
871
+ else
872
+ pair . Value ( clientId , messageReader ) ;
873
+ }
874
+ }
875
+ #endregion
863
876
}
864
- }
865
- else
866
- {
867
- foreach ( KeyValuePair < int , Action < uint , BitReader > > pair in MessageManager . messageCallbacks [ messageType ] )
877
+ else
868
878
{
869
- if ( isPassthrough )
870
- pair . Value ( passthroughOrigin , messageReader ) ;
871
- else
872
- pair . Value ( clientId , messageReader ) ;
879
+ #region INTERNAL MESSAGE
880
+ //MLAPI message
881
+ switch ( messageType )
882
+ {
883
+ case 0 : //Client to server > sends connection buffer
884
+ if ( isServer )
885
+ InternalMessageHandler . HandleConnectionRequest ( clientId , messageReader , channelId ) ;
886
+ break ;
887
+ case 1 : //Server informs client it has been approved:
888
+ if ( isClient )
889
+ InternalMessageHandler . HandleConnectionApproved ( clientId , messageReader , channelId ) ;
890
+ break ;
891
+ case 2 :
892
+ //Server informs client another client connected
893
+ //MLAPI_ADD_OBJECT
894
+ if ( isClient )
895
+ InternalMessageHandler . HandleAddObject ( clientId , messageReader , channelId ) ;
896
+ break ;
897
+ case 3 :
898
+ //Server informs client another client disconnected
899
+ //MLAPI_CLIENT_DISCONNECT
900
+ if ( isClient )
901
+ InternalMessageHandler . HandleClientDisconnect ( clientId , messageReader , channelId ) ;
902
+ break ;
903
+ case 4 :
904
+ //Server infroms clients to destroy an object
905
+ if ( isClient )
906
+ InternalMessageHandler . HandleDestroyObject ( clientId , messageReader , channelId ) ;
907
+ break ;
908
+ case 5 :
909
+ //Scene switch
910
+ if ( isClient )
911
+ InternalMessageHandler . HandleSwitchScene ( clientId , messageReader , channelId ) ;
912
+ break ;
913
+ case 6 : //Spawn pool object
914
+ if ( isClient )
915
+ InternalMessageHandler . HandleSpawnPoolObject ( clientId , messageReader , channelId ) ;
916
+ break ;
917
+ case 7 : //Destroy pool object
918
+ if ( isClient )
919
+ InternalMessageHandler . HandleDestroyPoolObject ( clientId , messageReader , channelId ) ;
920
+ break ;
921
+ case 8 : //Change owner
922
+ if ( isClient )
923
+ InternalMessageHandler . HandleChangeOwner ( clientId , messageReader , channelId ) ;
924
+ break ;
925
+ case 9 : //Syncvar
926
+ if ( isClient )
927
+ InternalMessageHandler . HandleSyncVarUpdate ( clientId , messageReader , channelId ) ;
928
+ break ;
929
+ case 10 :
930
+ if ( isClient ) //MLAPI_ADD_OBJECTS (plural)
931
+ InternalMessageHandler . HandleAddObjects ( clientId , messageReader , channelId ) ;
932
+ break ;
933
+ case 11 :
934
+ if ( isClient )
935
+ InternalMessageHandler . HandleTimeSync ( clientId , messageReader , channelId ) ;
936
+ break ;
937
+ case 12 :
938
+ if ( isServer )
939
+ InternalMessageHandler . HandleCommand ( clientId , messageReader , channelId ) ;
940
+ break ;
941
+ case 13 :
942
+ if ( isClient )
943
+ InternalMessageHandler . HandleRpc ( clientId , messageReader , channelId ) ;
944
+ break ;
945
+ case 14 :
946
+ if ( isClient )
947
+ InternalMessageHandler . HandleTargetRpc ( clientId , messageReader , channelId ) ;
948
+ break ;
949
+ case 15 :
950
+ if ( isClient )
951
+ InternalMessageHandler . HandleSetVisibility ( clientId , messageReader , channelId ) ;
952
+ break ;
953
+ }
954
+ #endregion
873
955
}
874
956
}
875
- #endregion
876
- }
877
- else
878
- {
879
- #region INTERNAL MESSAGE
880
- //MLAPI message
881
- switch ( messageType )
882
- {
883
- case 0 : //Client to server > sends connection buffer
884
- if ( isServer )
885
- InternalMessageHandler . HandleConnectionRequest ( clientId , messageReader , channelId ) ;
886
- break ;
887
- case 1 : //Server informs client it has been approved:
888
- if ( isClient )
889
- InternalMessageHandler . HandleConnectionApproved ( clientId , messageReader , channelId ) ;
890
- break ;
891
- case 2 :
892
- //Server informs client another client connected
893
- //MLAPI_ADD_OBJECT
894
- if ( isClient )
895
- InternalMessageHandler . HandleAddObject ( clientId , messageReader , channelId ) ;
896
- break ;
897
- case 3 :
898
- //Server informs client another client disconnected
899
- //MLAPI_CLIENT_DISCONNECT
900
- if ( isClient )
901
- InternalMessageHandler . HandleClientDisconnect ( clientId , messageReader , channelId ) ;
902
- break ;
903
- case 4 :
904
- //Server infroms clients to destroy an object
905
- if ( isClient )
906
- InternalMessageHandler . HandleDestroyObject ( clientId , messageReader , channelId ) ;
907
- break ;
908
- case 5 :
909
- //Scene switch
910
- if ( isClient )
911
- InternalMessageHandler . HandleSwitchScene ( clientId , messageReader , channelId ) ;
912
- break ;
913
- case 6 : //Spawn pool object
914
- if ( isClient )
915
- InternalMessageHandler . HandleSpawnPoolObject ( clientId , messageReader , channelId ) ;
916
- break ;
917
- case 7 : //Destroy pool object
918
- if ( isClient )
919
- InternalMessageHandler . HandleDestroyPoolObject ( clientId , messageReader , channelId ) ;
920
- break ;
921
- case 8 : //Change owner
922
- if ( isClient )
923
- InternalMessageHandler . HandleChangeOwner ( clientId , messageReader , channelId ) ;
924
- break ;
925
- case 9 : //Syncvar
926
- if ( isClient )
927
- InternalMessageHandler . HandleSyncVarUpdate ( clientId , messageReader , channelId ) ;
928
- break ;
929
- case 10 :
930
- if ( isClient ) //MLAPI_ADD_OBJECTS (plural)
931
- InternalMessageHandler . HandleAddObjects ( clientId , messageReader , channelId ) ;
932
- break ;
933
- case 11 :
934
- if ( isClient )
935
- InternalMessageHandler . HandleTimeSync ( clientId , messageReader , channelId ) ;
936
- break ;
937
- case 12 :
938
- if ( isServer )
939
- InternalMessageHandler . HandleCommand ( clientId , messageReader , channelId ) ;
940
- break ;
941
- case 13 :
942
- if ( isClient )
943
- InternalMessageHandler . HandleRpc ( clientId , messageReader , channelId ) ;
944
- break ;
945
- case 14 :
946
- if ( isClient )
947
- InternalMessageHandler . HandleTargetRpc ( clientId , messageReader , channelId ) ;
948
- break ;
949
- case 15 :
950
- if ( isClient )
951
- InternalMessageHandler . HandleSetVisibility ( clientId , messageReader , channelId ) ;
952
- break ;
953
- }
954
- #endregion
955
957
}
956
958
}
957
959
0 commit comments