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); } }
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); } }