private void OnSocket5Processed(Socket5 sender, bool result) { List<string> keys = new List<string>(); foreach (KeyValuePair<string, ByteStream> byteStream in this.proxyList) { if (byteStream.Value.Initiator != null && byteStream.Value.Target != null) { if (!byteStream.Value.Initiator.Connected || !byteStream.Value.Target.Connected) { keys.Add(byteStream.Key); } } } foreach (string key in keys) { this.proxyList.Remove(key); } keys.Clear(); if (result) { if (!this.proxyList.ContainsKey(sender.BindAddress)) { ByteStream byteStream = new ByteStream(); byteStream.Target = sender.SocketConnection; this.proxyList.Add(sender.BindAddress, byteStream); } else { ByteStream byteStream = this.proxyList[sender.BindAddress]; byteStream.Initiator = sender.SocketConnection; this.proxyList[sender.BindAddress] = byteStream; } } else { sender.OnSocket5Processed -= new Socket5Handler(OnSocket5Processed); sender.Stop(); } }
private void EndAccept(IAsyncResult ar) { if (!bListening) { return; } // Retrieve the state object and the handler socket // from the async state object. Console.WriteLine("Socket Accepted"); // Get the socket that handles the client request. Socket listener = (Socket)ar.AsyncState; Socket socket = listener.EndAccept(ar); Socket5 socket5 = new Socket5(socket); socket5.OnSocket5Processed += new Socket5Handler(OnSocket5Processed); socket5.Start(); AllDone.Set(); }