public void SendRPC(RMPNetworkView sender, QosType channel, string methodName, params object[] parameters) { if (string.IsNullOrEmpty(sender.Guid)) { Debug.LogWarning("RPC Aborted : The Guid is empty."); return; } if (parameters == null) { Debug.LogWarning("RPC Aborted : Parameters array can not be null."); return; } var msg = new Packet(); msg.Write((byte)RMPEncoding.ProtocolId.RPC); msg.Write(sender.Guid); msg.Write(methodName); msg.Write(parameters.Length); foreach (object param in parameters) { RMPEncoding.WriteParameter(msg, param); } NetworkService.Send(HostId, ConnectionId, msg); }
public static RMPNetworkView Get(string guid) { RMPNetworkView view = null; _viewDict.TryGetValue(guid, out view); return(view); }
public void SendRemove(RMPNetworkView view) { var msg = new Packet(); msg.Write((byte)RMPEncoding.ProtocolId.Remove); msg.Write(view.Guid); NetworkService.Send(HostId, ConnectionId, msg); }
public void SendReplicate(RMPNetworkView view) { var msg = new Packet(); msg.Write((byte)RMPEncoding.ProtocolId.Replicate); msg.Write(view.ReplicationTableIndex); msg.Write(view.Guid); // 서버는 클라에 함께 보낼 데이터를 넣는다. view.SendReflectionMessage(null, "OnReplicate", msg); NetworkService.Send(HostId, ConnectionId, msg); }
private void ReceiveRemove(Packet msg) { var guid = msg.ReadString(); try { var target = RMPNetworkView.Get(guid); UnityEngine.Object.Destroy(target.gameObject); } catch (Exception error) { Debug.LogError(error); } }
private void ReceiveRPC(Packet msg) { var guid = msg.ReadString(); var methodName = msg.ReadString(); var numOfParams = msg.ReadInt32(); var parameters = new object[numOfParams]; for (int i = 0; i < numOfParams; ++i) { parameters[i] = RMPEncoding.ReadParameter(msg); } var target = RMPNetworkView.Get(guid); target?.SendReflectionMessage(this, methodName, parameters); }
public static void Replicate(RMPNetworkView view, RMPPeer to = null) { if (!NetworkService.IsServer) { Debug.LogError("Only server can replicate RMP object. Replication aborted."); return; } if (to == null) { var cls = RMPPeer.ClientPeers; if (cls != null) { foreach (var peer in cls.Values) { peer.SendReplicate(view); } } } else { to.SendReplicate(view); } }