@@ -69,17 +69,20 @@ internal void __sendServerRpc(FastBufferWriter writer, uint rpcMethodId, ServerR
69
69
RpcData = writer
70
70
} ;
71
71
72
+ var rpcMessageSize = 0 ;
73
+
72
74
// If we are a server/host then we just no op and send to ourself
73
75
if ( IsHost || IsServer )
74
76
{
75
- var tempBuffer = new FastBufferReader ( writer , Allocator . Temp ) ;
76
- message . Handle ( tempBuffer , NetworkManager , NetworkBehaviourId ) ;
77
- tempBuffer . Dispose ( ) ;
78
-
79
- return ;
77
+ using var tempBuffer = new FastBufferReader ( writer , Allocator . Temp ) ;
78
+ message . Handle ( tempBuffer , NetworkManager , NetworkManager . ServerClientId ) ;
79
+ rpcMessageSize = tempBuffer . Length ;
80
+ }
81
+ else
82
+ {
83
+ rpcMessageSize = NetworkManager . SendMessage ( message , networkDelivery , NetworkManager . ServerClientId ) ;
80
84
}
81
85
82
- var rpcMessageSize = NetworkManager . SendMessage ( message , networkDelivery , NetworkManager . ServerClientId , true ) ;
83
86
84
87
#if DEVELOPMENT_BUILD || UNITY_EDITOR
85
88
if ( NetworkManager . __rpc_name_table . TryGetValue ( rpcMethodId , out var rpcMethodName ) )
@@ -129,17 +132,48 @@ internal unsafe void __sendClientRpc(FastBufferWriter writer, uint rpcMethodId,
129
132
} ;
130
133
int messageSize ;
131
134
135
+ // We check to see if we need to shortcut for the case where we are the host/server and we can send a clientRPC
136
+ // to ourself. Sadly we have to figure that out from the list of clientIds :(
137
+ bool shouldSendToHost = false ;
138
+
132
139
if ( rpcParams . Send . TargetClientIds != null )
133
140
{
134
- messageSize = NetworkManager . SendMessage ( message , networkDelivery , in rpcParams . Send . TargetClientIds , true ) ;
141
+ foreach ( var clientId in rpcParams . Send . TargetClientIds )
142
+ {
143
+ if ( clientId == NetworkManager . ServerClientId )
144
+ {
145
+ shouldSendToHost = true ;
146
+ break ;
147
+ }
148
+ }
149
+
150
+ messageSize = NetworkManager . SendMessage ( message , networkDelivery , in rpcParams . Send . TargetClientIds ) ;
135
151
}
136
152
else if ( rpcParams . Send . TargetClientIdsNativeArray != null )
137
153
{
154
+ foreach ( var clientId in rpcParams . Send . TargetClientIdsNativeArray )
155
+ {
156
+ if ( clientId == NetworkManager . ServerClientId )
157
+ {
158
+ shouldSendToHost = true ;
159
+ break ;
160
+ }
161
+ }
162
+
138
163
messageSize = NetworkManager . SendMessage ( message , networkDelivery , rpcParams . Send . TargetClientIdsNativeArray . Value ) ;
139
164
}
140
165
else
141
166
{
142
- messageSize = NetworkManager . SendMessage ( message , networkDelivery , NetworkManager . ConnectedClientsIds , true ) ;
167
+ shouldSendToHost = IsHost ;
168
+ messageSize = NetworkManager . SendMessage ( message , networkDelivery , NetworkManager . ConnectedClientsIds ) ;
169
+ }
170
+
171
+ // If we are a server/host then we just no op and send to ourself
172
+ if ( shouldSendToHost )
173
+ {
174
+ using var tempBuffer = new FastBufferReader ( writer , Allocator . Temp ) ;
175
+ message . Handle ( tempBuffer , NetworkManager , NetworkManager . ServerClientId ) ;
176
+ messageSize = tempBuffer . Length ;
143
177
}
144
178
145
179
#if DEVELOPMENT_BUILD || UNITY_EDITOR
0 commit comments