protected static void SendRPC(NeutronObject mThis, int RPCID, ValidationPacket validationType, object[] parameters, SendTo sendTo, bool cached, ProtocolType protocolType, Broadcast broadcast)
 {
     using (NeutronWriter writer = new NeutronWriter())
     {
         object[] bArray = { mThis.Infor.ownerID, parameters };
         //==========================================================================================================//
         writer.WritePacket(Packet.RPC);
         writer.WritePacket(broadcast);
         writer.Write(RPCID);
         writer.WritePacket(sendTo);
         writer.WritePacket(validationType);
         writer.Write(cached);
         writer.Write(bArray.Serialize());
         //==========================================================================================================//
         Send(writer.GetBuffer(), protocolType);
     }
 }
Beispiel #2
0
    public void ExecuteValidation(ValidationPacket vType, NeutronReader paramsReader, Player mSocket)
    {
        using (paramsReader)
        {
            try
            {
                switch (vType)
                {
                case ValidationPacket.Movement:
                    CustomServerValidation.ServerMovementValidation(paramsReader, mSocket);     // Don't change that.
                    break;

                case ValidationPacket.None:
                    // Your custom validation script.
                    break;
                }
            }
            catch (Exception ex)
            {
                NeutronServerFunctions.SendDisconnect(mSocket, ex.Message);
                return; // Return to prevent sending to other players. do not use return within the queue (DO NOT WORK).
            }
        }
    }
    protected void HandleRPC(Player mSender, Packet mCommand, Broadcast broadcast, int executeID, SendTo sendMode, ValidationPacket vType, bool Cached, byte[] parameters, IPEndPoint onlyEndPoint)
    {
        try
        {
            if (mSender.IsInChannel())
            {
                object[] _array      = parameters.DeserializeObject <object[]>();
                object[] mParameters = (object[])_array[1];

                using (NeutronWriter writer = new NeutronWriter())
                {
                    writer.WritePacket(mCommand);
                    writer.Write(executeID);
                    writer.Write(parameters);

                    ExecuteValidation(vType, new NeutronReader((byte[])mParameters[0]), mSender);

                    if (onlyEndPoint != null)
                    {
                        mSender.Send(sendMode, writer.GetBuffer(), broadcast, onlyEndPoint, ProtocolType.Udp, null, (ia) =>
                        {
                            _UDPSocket.EndSend(ia);
                        });
                    }
                    else
                    {
                        mSender.Send(sendMode, writer.GetBuffer(), broadcast, null, ProtocolType.Tcp, null, (ia) =>
                        {
                            mSender.EndSend(ia);
                        });
                    }
                }
            }
            else
            {
                SendErrorMessage(mSender, Packet.SendChat, "ERROR: You are not on a channel/room.");
            }
        }
        catch
        {
            Debug.LogError("Corrupted Bytes: lenght" + parameters.Length);
        }
    }