using System; using System.Collections.Generic; using System.Net; using System.Net.Sockets; using System.Diagnostics; namespace Launcher.Code { public sealed class Listener { public Dictionary Sessions = new Dictionary(); public Socket sListener; public string LinkIP = ""; public ushort ListenPort; public ushort SendPort; public Listener(ushort pListenPort, ushort pSendPort, string pIP) { this.LinkIP = pIP; ListenPort = pListenPort; SendPort = pSendPort; try { sListener = new Socket(AddressFamily.InterNetwork, SocketType.Stream, ProtocolType.Tcp); sListener.Bind(new IPEndPoint(IPAddress.Any, pListenPort)); sListener.Listen(10); sListener.BeginAccept(new AsyncCallback(OnConnect), sListener); } catch (SocketException ex) { return; } } private void OnConnect(IAsyncResult ar) { try { Socket client = sListener.EndAccept(ar); Debug.WriteLine("Linking accepted."); NormalProxy proxy = new NormalProxy(client, SendPort, LinkIP); Sessions.Add(proxy, 0); sListener.BeginAccept(new AsyncCallback(OnConnect), sListener); } catch (SocketException ex) { throw ex; } } } }