public static void RegisterRequestDelegate <T>(Type invokeClass, string cmdName, RequestDelegate <T> func, bool cmdRequireAuthority = true) { async UniTaskVoid Wrapper(NetworkBehaviour obj, NetworkReader reader, INetworkConnection senderConnection, int replyId) { /// invoke the serverRpc and send a reply message T result = await func(obj, reader, senderConnection, replyId); using (PooledNetworkWriter writer = NetworkWriterPool.GetWriter()) { writer.Write(result); var serverRpcReply = new ServerRpcReply { replyId = replyId, payload = writer.ToArraySegment() }; senderConnection.Send(serverRpcReply); } } void CmdWrapper(NetworkBehaviour obj, NetworkReader reader, INetworkConnection senderConnection, int replyId) { Wrapper(obj, reader, senderConnection, replyId).Forget(); } RegisterDelegate(invokeClass, cmdName, MirageInvokeType.ServerRpc, CmdWrapper, cmdRequireAuthority); }
public void RegisterRequest <T>(int index, Type invokeClass, string name, RequestDelegate <T> func, bool cmdRequireAuthority) { async UniTaskVoid Wrapper(NetworkBehaviour obj, NetworkReader reader, INetworkPlayer senderPlayer, int replyId) { /// invoke the serverRpc and send a reply message var result = await func(obj, reader, senderPlayer, replyId); using (var writer = NetworkWriterPool.GetWriter()) { writer.Write(result); var serverRpcReply = new ServerRpcReply { replyId = replyId, payload = writer.ToArraySegment() }; senderPlayer.Send(serverRpcReply); } } void CmdWrapper(NetworkBehaviour obj, NetworkReader reader, INetworkPlayer senderPlayer, int replyId) { Wrapper(obj, reader, senderPlayer, replyId).Forget(); } Register(index, invokeClass, name, RpcInvokeType.ServerRpc, CmdWrapper, cmdRequireAuthority); }