Beispiel #1
0
        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);
            }
        }
Beispiel #2
0
 public static ForwardClient GetOrAdd(string remote, ForwardClient c)
 {
     return(clients.GetOrAdd(remote, c));
 }