internal void Send(Packet packet) { lock (_lockObject) { _packetToSendList.Add(packet); } }
internal void Recv(Packet packet) { lock (_lockObject) { _packetToRecvList.Add(packet); } }
private void StartSend(Packet packet) { try { ASCIIEncoding encoder = new ASCIIEncoding(); string msg = encoder.GetString(packet.Buffer, 0, packet.Size); _connectionSocket.BeginSend(packet.Buffer, 0, packet.Size, SocketFlags.None, new AsyncCallback(SendCallbackHandle), this); } catch (SocketException) { Disconnect(); } catch (Exception exception) { Console.WriteLine(exception.ToString()); } }
private void RecvCallbackHandle(IAsyncResult result) { try { byte[] buffer = result.AsyncState as byte[]; int numRecv = _connectionSocket.EndReceive(result); List<Packet> incomingList = new List<Packet>(); lock (_lockObject) { Packet packet = new Packet(buffer, numRecv); _mySecurity.Recv(packet); while (_mySecurity.HasPacketToRecv()) { incomingList.Insert(0, _mySecurity.GetPacketToRecv()); } } foreach (Packet packet in incomingList) { OnPacket(packet); } StartRecv(); } catch (SocketException) { Disconnect(); } catch (NullReferenceException) { } catch (ObjectDisposedException) { } catch (Exception exception) { Console.WriteLine(exception.ToString()); } }
private void OnPacket(Packet packet) { ASCIIEncoding encoder = new ASCIIEncoding(); if (_connectionType.Equals(ConnectionTypes.ServerType)) { string msg = encoder.GetString(packet.Buffer, 0, packet.Size); if ("pingping".Equals(msg)) { packet.Buffer = encoder.GetBytes(msg + msg); packet.Size = packet.Buffer.Length; } } else if (_connectionType.Equals(ConnectionTypes.ClientType)) { string msg = encoder.GetString(packet.Buffer, 0, packet.Size); if (!"ping".Equals(msg)) { if (msg.Contains(".")) { _ip = msg; packet.Buffer = encoder.GetBytes("127.0.0.1"); packet.Size = packet.Buffer.Length; } else { _port = Convert.ToInt32(msg); packet.Buffer = encoder.GetBytes(_agentProxyEndPoint.Port.ToString()); packet.Size = packet.Buffer.Length; } if (!_ip.Equals(String.Empty) && _port != 0) { IPEndPoint ep = new IPEndPoint(IPAddress.Parse(_ip), _port); lock (_myProxy) { _myProxy.AcceptAgentConnection(ep); } _ip = String.Empty; _port = 0; } } else { packet.Buffer = encoder.GetBytes(msg + msg); packet.Size = packet.Buffer.Length; } } if (_relayConnection != null) { lock (_relayConnection) { _relayConnection.SendPacket(packet); } } else { Disconnect(); } }
internal void SendPacket(Packet packet) { lock (_lockObject) { _mySecurity.Send(packet); } }