Example #1
0
    /// <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);
            }
        }
    }
Example #2
0
    /// <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;
        }
    }
Example #3
0
    /// <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;
        }
    }
Example #4
0
 /// <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);
 }
Example #5
0
 /// <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);
 }