/// <summary> /// Sends the RPC. /// </summary> /// <param name="code">Code.</param> /// <param name="methodName">Method name.</param> /// <param name="targetPlayer">Target player.</param> /// <param name="isBuffered">If set to <c>true</c> is buffered.</param> /// <param name="isLocal">If set to <c>true</c> is local.</param> /// <param name="parameters">Parameters.</param> private void SendEvent_RPC(Guid netGuid, SparkManager.OpCode code, string methodName, int[] receiverIds, bool isBuffered, bool isLocal, params object[] parameters) { SparkRPC rpc = new SparkRPC(netGuid, methodName, receiverIds, SparkManager.instance.LocalPlayer, parameters); using (RTData data = RTData.Get()) { data.SetString(1, SparkExtensions.Serialize(rpc)); SparkManager.instance.sparkNetwork.SendData(Convert.ToInt32(code), GameSparksRT.DeliveryIntent.RELIABLE, data, receiverIds); } if (isBuffered) { if (isLocal) { LocalRPC_Buffer.Add(rpc); LocalRPC("Add_LocalRPC_Buffer", SparkTargets.Others, false, rpc); } else { RPC_Buffer.Add(rpc); LocalRPC("Add_RPC_Buffer", SparkTargets.Others, false, rpc); } } }
/// <summary> /// Raises the packet event. /// </summary> /// <param name="packet">Packet.</param> public void OnPacket(RTPacket packet) { switch ((SparkManager.OpCode)Enum.ToObject(typeof(SparkManager.OpCode), packet.OpCode)) { case SparkManager.OpCode.Sync: SparkStream stream = SparkExtensions.Deserialize <SparkStream>(packet.Data.GetString(1)); SparkMessageInfo info = SparkExtensions.Deserialize <SparkMessageInfo>(packet.Data.GetString(2)); foreach (SparkBehaviour behaviour in ObservedBehaviours) { if (stream.NetGuid == behaviour.netGuid) { SendEvent_OnSerializeSparkView(behaviour, stream, info); } } break; case SparkManager.OpCode.SparkView_RPC: // RPC handling SparkRPC rpc = SparkExtensions.Deserialize <SparkRPC>(packet.Data.GetString(1)); foreach (SparkBehaviour behaviour in ObservedBehaviours) { if (behaviour.netGuid == rpc.NetGuid) { behaviour.Call(rpc.MethodName, rpc.Parameters); } } break; case SparkManager.OpCode.SparkView_LocalRPC: SparkRPC localRpc = SparkExtensions.Deserialize <SparkRPC>(packet.Data.GetString(1)); if (localRpc.NetGuid == netGuid) { this.Call(localRpc.MethodName, localRpc.Parameters); } break; } }
/// <summary> /// Raises the packet event. /// </summary> /// <param name="packet">Packet.</param> private void OnPacket(RTPacket packet) { switch ((OpCode)Enum.ToObject(typeof(OpCode), packet.OpCode)) { case OpCode.Sync: // Synchronization handling foreach (SparkView view in sparkViews) { view.OnPacket(packet); } break; case OpCode.RPC: // RPC handling SparkRPC rpc = SparkExtensions.Deserialize <SparkRPC>(packet.Data.GetString(1)); foreach (SparkView view in sparkViews) { if (rpc.ReceiverIds.Contains(view.sparkPeer.id)) { foreach (SparkBehaviour behaviour in view.ObservedBehaviours) { behaviour.Call(rpc.MethodName, rpc.Parameters); } } } break; case OpCode.LocalRPC: SparkRPC localRpc = SparkExtensions.Deserialize <SparkRPC>(packet.Data.GetString(1)); this.Call(localRpc.MethodName, localRpc.Parameters); break; case OpCode.SparkView_RPC: // RPC handling foreach (SparkView view in sparkViews) { view.OnPacket(packet); } break; case OpCode.SparkView_LocalRPC: foreach (SparkView view in sparkViews) { view.OnPacket(packet); } break; } }
/// <summary> /// Adds the RPC to the local RPC buffer. /// </summary> /// <param name="rpc">RPC.</param> private void Add_LocalRPC_Buffer(SparkRPC rpc) { LocalRPC_Buffer.Add(rpc); }
/// <summary> /// Adds the RPC to the RPC buffer. /// </summary> /// <param name="rpc">RPC.</param> private void Add_RPC_Buffer(SparkRPC rpc) { RPC_Buffer.Add(rpc); }