コード例 #1
0
        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);
        }
コード例 #2
0
        public static RMPNetworkView Get(string guid)
        {
            RMPNetworkView view = null;

            _viewDict.TryGetValue(guid, out view);
            return(view);
        }
コード例 #3
0
        public void SendRemove(RMPNetworkView view)
        {
            var msg = new Packet();

            msg.Write((byte)RMPEncoding.ProtocolId.Remove);
            msg.Write(view.Guid);
            NetworkService.Send(HostId, ConnectionId, msg);
        }
コード例 #4
0
        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);
        }
コード例 #5
0
        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);
            }
        }
コード例 #6
0
        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);
        }
コード例 #7
0
        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);
            }
        }