/// <summary> /// Funkcja dzialajaca na rzecz watku, pobiera i wysla pakiety z kolejki /// </summary> private void go() { try { IGaduPacket packet; // pakiet do wyslania while (true) // do poki kolejka nie jest pusa { if (!tcpClient.Connected || queue.Count == 0) // czy gniazdo jest podlaczone i czy mamy jakies pakiety do wyslania { Thread.Sleep(sleepTime); // jezeli nie to czekaj az bedzie podlaczone continue; } packet = (IGaduPacket)queue.Dequeue(); // pobierz pakiet z kolejki packet.write(tcpClient.GetStream()); // wyslij pakiet if (OnPacketSent != null) { OnPacketSent.BeginInvoke(packet, null, null); } } } catch (ThreadAbortException) { // nie zadreczajmy uzytkownika tym wyjatkiem, w 99% powodowany przez Thread.Abort() } catch (Exception e) // jezeli cokolwiek poszlo nie tak { if (Gadu.GaduCriticalError() == false) { throw new GaduRecieverException(e.Message); } } }
public static void Raise(this OnPacketSent @event, object sender, ServerPacketEventArgs e) { if (@event != null) { @event(sender, e); } }
public void SendObjectToClients(object package) { foreach (var c in Connections.ToList()) { c.SendObject(package).Wait(); var e3 = BuildEvent(c, c, package); OnPacketSent?.Invoke(this, e3); } }
public void SendObjectToClients(object package) { foreach (var c in Connections.ToList()) { c.SendObject(package).Wait(); var testPing = new PingPacketEvent(c, c, package); OnPacketSent?.Invoke(this, testPing); } }
private void MonitorStreams() { while (IsRunning) { foreach (var client in Connections.ToList()) { if (!client.IsSocketConnected()) { var e5 = BuildEvent(client, null, String.Empty); Connections.Remove(client); OnConnectionRemoved?.Invoke(this, e5); continue; } if (client.Socket.Available != 0) { var readObject = ReadObject(client.Socket); var e1 = BuildEvent(client, null, readObject); OnPacketReceived?.Invoke(this, e1); if (readObject is PingPacket ping) { client.SendObject(ping).Wait(); continue; } if (readObject is PersonalPacket pp) { var destination = Connections.FirstOrDefault(c => c.ClientId.ToString() == pp.GuidId); var e4 = BuildEvent(client, destination, pp); OnPersonalPacketReceived?.Invoke(this, e4); if (destination != null) { destination.SendObject(pp).Wait(); var e2 = BuildEvent(client, destination, pp); OnPersonalPacketSent?.Invoke(this, e2); } } else { foreach (var c in Connections.ToList()) { c.SendObject(readObject).Wait(); var e3 = BuildEvent(client, c, readObject); OnPacketSent?.Invoke(this, e3); } } } } } }
private void SendCallback(IAsyncResult asyncResult) { stream.EndWrite(asyncResult); OnPacketSent?.Invoke((Packet)asyncResult.AsyncState); }
internal static void RunPacketSent(ref CSteamID steamID, ref ESteamPacket type, ref byte[] packet, ref int size, ref int channel, ref bool cancel) => OnPacketSent?.Invoke(ref steamID, ref type, ref packet, ref size, ref channel, ref cancel);
/// <summary> /// Async callback for packet sending /// </summary> /// <param name="asyncResult"></param> private void SendCallback(IAsyncResult asyncResult) { // End packet sending to end-point sendingClient.EndSend(asyncResult); OnPacketSent?.Invoke((Packet)asyncResult.AsyncState); }