internal void SendPacket(Packet packet) { if (!Running) return; PacketsToBeSent.Enqueue(packet); int newValue = Interlocked.Increment(ref _timesEnqueuedForSend); if (newValue == 1) { Server.SendClientQueue.Enqueue(this); } Server.NetworkSignal.Set(); }
private void SendSync(Packet packet) { SendSync(packet.GetBuffer()); }
internal void SendSyncPacket(Packet packet) { packet.Write(); SendSync(packet.GetBuffer()); packet.Release(); }
internal void SendPacketToNearbyPlayers(WorldPosition pos, Packet packet, Client excludedClient = null) { Client[] nearbyClients = GetNearbyPlayers(pos).ToArray(); if (nearbyClients.Length == 0) return; packet.SetShared(nearbyClients.Length); Parallel.ForEach(nearbyClients, client => { if (excludedClient != client) { client.SendPacket(packet); } else { packet.Release(); } }); }
internal void SendPacketToClientList(Packet packet, Client[] targetList, Client excludedClient = null) { if (targetList.Length == 0) return; if (targetList.Length == 1) { if (targetList[0] == excludedClient) return; targetList[0].SendPacket(packet); } else { packet.SetShared(targetList.Length); Parallel.ForEach(targetList, client => { if (excludedClient != client) { client.SendPacket(packet); } else { packet.Release(); } }); } }
internal void SendPacketBroadcast(Packet packet) { Client[] clients = GetClients(); packet.SetShared(clients.Length); Parallel.ForEach(clients, client => client.SendPacket(packet)); }
public void SendPacket(Packet packet) { _packetsToSend.Enqueue(packet); int sendRunning = Interlocked.CompareExchange(ref _sendRunning, 1, 0); if (sendRunning == 0) { _sendTask = Task.Factory.StartNew(Send); } }