public override async Task Process(SocketConnection conn) { int pos = 0; byte[] remotebytes = new byte[35]; List <ArraySegment <byte> > result = new List <ArraySegment <byte> >(); ForwardClient client = null; try { foreach (BufferSeg item in Data) { if (pos < 35) { if (item.Count >= 35 - pos) { Array.Copy(item.Buff, item.Start, remotebytes, pos, 35 - pos); Remote = Encoding.UTF8.GetString(remotebytes, 5, 30).Replace(" ", ""); client = ClientManager.GetOrAdd(Remote, new ForwardClient(ClientManager.ForwardHost, ClientManager.ForwardPort, Remote)); if (client == null) { return; } if (!client.IsConnected) { await client.ConnectAsync(); } if (item.Count >= 35 - pos) { result.Add(new ArraySegment <byte>(item.Buff, item.Start + 35 - pos, item.Count - (35 - pos))); } } else { Array.Copy(item.Buff, item.Start, remotebytes, pos, item.Count); } pos += item.Count; } else { result.Add(new ArraySegment <byte>(item.Buff, item.Start, item.Count)); } } await client?.SendAsync(result); } catch (Exception ex) { Console.WriteLine(ex.Message); } }
public static ForwardClient GetOrAdd(string remote, ForwardClient c) { return(clients.GetOrAdd(remote, c)); }