//Send RPC to server public static void SendRPC(uint viewID, string methodname, RPCTarget target, params NGAny[] parameters) { SendMessage message = new SendMessage(); message.MsgType = MessageType.Rpc; message.RpcParams = new RPCParams(); message.RpcParams.MethodName = methodname; message.RpcParams.Target = target; message.RpcParams.ViewID = viewID; message.RpcParams.Parameters.AddRange(parameters); var buf = NGMessageCodec.Encode(message.ToByteArray()); NGNetwork.Socket.Send(buf); }
/// <summary> /// Sends the RPC. /// </summary> /// <param name="stream">The stream.</param> /// <param name="target">The target.</param> /// <param name="caller">The caller.</param> /// <param name="rpcMethodIndex">Index of the RPC method.</param> public virtual void SendRPC(NetDataWriter stream, RPCTarget target, RPCCallers caller, int rpcMethodIndex) { if (target == RPCTarget.ClientOwner) { if (!isServer || _netIdentity.hasAuthority) { //We are not the server or we are the owner, so we can't or have no need to replicate return; } } else if (target == RPCTarget.Server) { if (isServer) { //We are the server, no need to replicate return; } } else if (target == RPCTarget.Everyone) { if (!isServer) { //We are not the server, we don't have a connection to everyone return; } } switch (target) { case RPCTarget.Server: TinyNetClient.instance.SendRPCToServer(stream, rpcMethodIndex, this); return; case RPCTarget.ClientOwner: TinyNetServer.instance.SendRPCToClientOwner(stream, rpcMethodIndex, this); return; case RPCTarget.Everyone: TinyNetServer.instance.SendRPCToAllClients(stream, rpcMethodIndex, this); return; } }
public RPCMethodInfo(string rpcName, RPCTarget nTarget, RPCCallers nCaller) { name = rpcName; target = nTarget; caller = nCaller; }
public TinyNetRPC(RPCTarget newTargets, RPCCallers newCallers) { targets = newTargets; callers = newCallers; }
public static void AddRPCMethodNameToType(string rpcName, RPCTarget nTarget, RPCCallers nCaller, Type type) { rpcMethods[type].Add(new RPCMethodInfo(rpcName, nTarget, nCaller)); }
// Send to all connected clients public static void RPC(DnlUdpPeer serverPeer, SendPacket packet, int senderNetworkId, RPCTarget peerTarget) { if (serverPeer == null) { throw new ArgumentNullException("DnlUdpClient", "Server must be an already initialized DnlUdpClient"); } if (packet == null) { throw new ArgumentNullException("SendPacket", "Packet must be initialized in order to send to remote clients"); } if (senderNetworkId > 0 && senderNetworkId < MaxNumberOfConnections) { throw new ArgumentNullException("SenderNetworkId", "Invalid networkid. Ensure sender has registered network id."); } lock (connectionLock) { for (int i = 0; i < MaxNumberOfConnections; i++) { if (RemoteClients[i] != null && RemoteClients[i].IsConnected) { if (RemoteClients[i].NetworkID == senderNetworkId && peerTarget == RPCTarget.Others) { continue; } else { packet.Send(serverPeer, RemoteClients[i]); } } } } }