public void SendPacket(Player player, DataPacket pk, bool immediate = false) { RakNetSession session = this.server.GetSession(player.EndPoint); if (session == null) { return; } DataPacketSendArgs args = new DataPacketSendArgs(player, pk); ServerEvents.OnPacketSend(args); if (args.IsCancel) { return; } pk.Encode(); byte[] buffer = pk.ToArray(); BinaryStream st = new BinaryStream(); st.WriteVarInt((int)pk.Length); st.WriteBytes(buffer); BatchPacket bp = new BatchPacket(); bp.Payload = st.ToArray(); bp.Encode(); RakNet.Packets.EncapsulatedPacket enc = new RakNet.Packets.EncapsulatedPacket(); enc.buffer = bp.ToArray(); enc.reliability = RakNet.Packets.PacketReliability.RELIABLE; enc.messageIndex = ++session.MessageIndex; //Logger.Log("%server_packet_send", buffer[0].ToString("X"), buffer.Length); session.SendPacket(enc, immediate); }
public void HandleBatchPacket(RakNetSession session, byte[] buffer) { string id = RakNetServer.IPEndPointToID(session.EndPoint); if (this.players.ContainsKey(id)) { Player player = this.players[id]; int pkid = buffer[0]; if (pkid == BatchPacket.ID) { using (BatchPacket batch = new BatchPacket()) { batch.SetBuffer(buffer); batch.Decode(); this.GetPackets(batch, player); } } } }
public void PlayerClose(IPEndPoint point, string reason) { RakNetSession session = this.server.GetSession(point); session.Close(reason); }