Beispiel #1
0
        /// <summary>
        /// 检查是否有新的客户端接出来
        /// </summary>
        private void CheckConnecter()
        {
            for (int iIndex = 0; iIndex < m_Connecters.Length; iIndex++)
            {
                Connecter connecter = m_Connecters[iIndex];

                // 检查是否已经处理过
                if (connecter.IsNeedSlice == false)
                {
                    continue;
                }

                // 获取连接出去的客户端
                ClientSocketManager clientSocketManager = connecter.Slice();
                if (clientSocketManager != null)
                {
                    // 把连接出来的客户端放置入NetState中,当前的实例会保存在NetState.Instances中
                    NetState netState = new NetState(clientSocketManager, this);

                    OnNetStateInit(netState);

                    netState.Start();
                }
            }
        }
Beispiel #2
0
        /// <summary>
        ///
        /// </summary>
        internal ClientSocketManager(Connecter connecter, ConnectHandler connectHandler, ReceiveQueue receiveBuffer)
        {
            if (connecter == null)
            {
                throw new ArgumentNullException("ClientSocketHandler.ClientSocketManager(...) - listener == null error!");
            }

            if (connectHandler == null)
            {
                throw new ArgumentNullException("ClientSocketHandler.ClientSocketManager(...) - serviceHandle == null error!");
            }

            if (receiveBuffer == null)
            {
                throw new ArgumentNullException("receiveBuffer", "ClientSocketHandler.ClientSocketManager(...) - receiveBuffer == null error!");
            }

            m_Connecter     = connecter;
            m_ConnectHandle = connectHandler;
            m_ReceiveBuffer = receiveBuffer;
            {
                // 清空数据
                m_ReceiveBuffer.Clear();
            }

            // 初始化数据 表示还没调用过Free(...)函数
            m_LockFree.SetValid();
        }
Beispiel #3
0
        public void DisposeTest()
        {
            Connecter target = new Connecter(); // TODO: 初始化为适当的值

            target.Dispose();
            Assert.Inconclusive("无法验证不返回值的方法。");
        }
Beispiel #4
0
 public void SetConnecter(Connecter Start, Connecter End)
 {
     m_StartConnecter = Start;
     m_EndConnecter   = End;
     m_StartConnecter.AddString(this);
     m_EndConnecter.AddString(this);
 }
Beispiel #5
0
 /// <summary>
 /// 构造函数
 /// </summary>
 public BitFieldMessage(EncryptedConnection encryptedConnection, Connection connection, Connecter connecter)
     : base(encryptedConnection)
 {
     this.connection = connection;
     this.connecter  = connecter;
     this.InitialBytesLength(connecter.PiecesNumber);
 }
Beispiel #6
0
        public void Login(Func <Connecter> fun, SuiDaoServer serverConfig)
        {
            _serverConfig = serverConfig;

            login   = fun;
            _client = login.Invoke();
            LogSuccess(_client.Socket);
        }
        public void AddConnecterTest()
        {
            MessagePump target    = new MessagePump(); // TODO: 初始化为适当的值
            Connecter   connecter = null;              // TODO: 初始化为适当的值

            target.AddConnecter(connecter);
            Assert.Inconclusive("无法验证不返回值的方法。");
        }
Beispiel #8
0
 /// <summary>
 /// 构造函数
 /// </summary>
 /// <param name="booleans">片断的BitField信息</param>
 public BitFieldMessage(bool[] booleans)
     : base(null)
 {
     this.connection = null;
     this.connecter  = null;
     this.booleans   = booleans;
     this.InitialBytesLength(booleans.Length);
 }
Beispiel #9
0
    //対象の糸に繋がっている木をすべてマイナス
    private void StringAllMinus()
    {
        List <Connecter> connecters = new List <Connecter>();
        Connecter        origin     = m_hitinfo.collider.GetComponent <Connecter>();

        connecters.Add(origin);
        StringSearch(origin, ref connecters);
    }
Beispiel #10
0
        public void ConnecterSocketTest()
        {
            Connecter    target = new Connecter(); // TODO: 初始化为适当的值
            SocketClient actual;

            actual = target.ConnecterSocket;
            Assert.Inconclusive("验证此测试方法的正确性。");
        }
Beispiel #11
0
        public void IsSliceTest()
        {
            Connecter target = new Connecter(); // TODO: 初始化为适当的值
            bool      actual;

            actual = target.IsNeedSlice;
            Assert.Inconclusive("验证此测试方法的正确性。");
        }
 public static List<string> TcpConnects(BotDTO[] botlist, string model)
 {
     List<string> response = new List<string>();
     for (var i = 0; i < botlist.Length; i++)
     {
         response.Add(Connecter.CreateTcpSend(botlist[i].Domain, model));
     };
     return response;
 }
Beispiel #13
0
        public void InitClientHandlerTest()
        {
            ClientSocketManager target        = new ClientSocketManager(); // TODO: 初始化为适当的值
            Connecter           connecter     = null;                      // TODO: 初始化为适当的值
            ConnectHandle       connectHandle = ConnectHandle.Zero;        // TODO: 初始化为适当的值
            ReceiveQueue        receiveBuffer = null;                      // TODO: 初始化为适当的值

            target.InitClientHandler(connecter, connectHandle, receiveBuffer);
            Assert.Inconclusive("无法验证不返回值的方法。");
        }
Beispiel #14
0
        public void SliceTest()
        {
            Connecter           target   = new Connecter(); // TODO: 初始化为适当的值
            ClientSocketManager expected = null;            // TODO: 初始化为适当的值
            ClientSocketManager actual;

            actual = target.Slice();
            Assert.AreEqual(expected, actual);
            Assert.Inconclusive("验证此测试方法的正确性。");
        }
Beispiel #15
0
    // Use this for initialization
    void Start()
    {
        Log.LogSetInit.Init();
        conn = new Connecter();
        conn._pros.OnRes_Person += ResPerson;       // 消息监听;

        content.text = "get zyy";
        //testProtoBuf();
        //onClick_Btn();
    }
 public static CommandResponseModel[] TcpConnects(BotDTO[] botlist, string model)//Multi response
 {
     CommandResponseModel[] response = new CommandResponseModel[botlist.Length];
     for (var i = 0; i < botlist.Length; i++)
     {
         response[i] = JsonConvert.DeserializeAnonymousType(Connecter.CreateTcpSend(botlist[i].Domain, model), new CommandResponseModel());
     }
     ;
     return(response);
 }
Beispiel #17
0
        public void StartConnectServerTest()
        {
            Connecter target          = new Connecter(); // TODO: 初始化为适当的值
            string    strHostNamePort = string.Empty;    // TODO: 初始化为适当的值
            bool      expected        = false;           // TODO: 初始化为适当的值
            bool      actual;

            actual = target.StartConnectServer(strHostNamePort);
            Assert.AreEqual(expected, actual);
            Assert.Inconclusive("验证此测试方法的正确性。");
        }
Beispiel #18
0
        private void HandleServerRequest(string words)
        {
            Message <object> Msg;

            try
            {
                Msg = JsonConvert.DeserializeObject <Message <object> >(words);
                _logger.Info($"收到服务端指令 {Msg.MessageType}");

                switch (Msg.MessageType)
                {
                case MessageType.C_Heart:
                    break;

                case MessageType.S_NewCustomer:
                    var request   = (Msg.Content as JObject).ToObject <NewCustomerRequest>();
                    var connecter = new Connecter(_clientConfig.Common.ServerAddr, _clientConfig.Common.ServerPort);
                    connecter.Connect();
                    connecter.Send(new Message <string> {
                        MessageType = MessageType.C_SwapMsg, Content = request.MsgId
                    });

                    var localConnecter = new Connecter(request.WebConfig.LocalIp, request.WebConfig.LocalPort);
                    localConnecter.Connect();

                    new SocketSwap(connecter.Client, localConnecter.Client).StartSwap();
                    break;

                case MessageType.S_NewSSH:
                    var request_ssh   = (Msg.Content as JObject).ToObject <NewSSHRequest>();
                    var connecter_ssh = new Connecter(_clientConfig.Common.ServerAddr, _clientConfig.Common.ServerPort);
                    connecter_ssh.Connect();
                    connecter_ssh.Send(new Message <string> {
                        MessageType = MessageType.C_SwapMsg, Content = request_ssh.MsgId
                    });

                    var localConnecter_ssh = new Connecter(request_ssh.SSHConfig.LocalIp, request_ssh.SSHConfig.LocalPort);
                    localConnecter_ssh.Connect();

                    new SocketSwap(connecter_ssh.Client, localConnecter_ssh.Client).StartSwap();
                    break;

                case MessageType.C_SwapMsg:
                case MessageType.C_LogIn:
                default:
                    throw new Exception("参数异常");
                }
            }
            catch (Exception ex)
            {
                _logger.Error(ex);
                _logger.Error(words);
            }
        }
Beispiel #19
0
        public void WorldTest()
        {
            Connecter target   = new Connecter(); // TODO: 初始化为适当的值
            BaseWorld expected = null;            // TODO: 初始化为适当的值
            BaseWorld actual;

            target.World = expected;
            actual       = target.World;
            Assert.AreEqual(expected, actual);
            Assert.Inconclusive("验证此测试方法的正确性。");
        }
Beispiel #20
0
    private void StringSearch(Connecter connecter, ref List <Connecter> connecters)
    {
        foreach (Connecter c in connecter.m_Child)
        {
            IsUsedConnecter(c, ref connecters);
        }

        Connecter start = connecter.m_StartConnecter;
        Connecter end   = connecter.m_EndConnecter;

        IsUsedConnecter(start, ref connecters);
        IsUsedConnecter(end, ref connecters);
    }
Beispiel #21
0
        private static void Run(IServiceProvider servicesProvider, ILogger _logger, string key, bool log)
        {
            var res  = HttpHelper.PostAsJson("https://api1.suidao.io/api/Client/GetServerByKey", $"{{ \"key\":\"{key}\"}}").Result;
            var jobj = JObject.Parse(res);

            if ((bool)jobj["success"] == true)
            {
                // 记录登录记录
                if (log)
                {
                    AppendTextToFile(Path.Combine(AppContext.BaseDirectory, KeyLogName), Environment.NewLine + key);
                }

                var server = jobj["data"].ToObject <SuiDaoServerConfig>();

                var client = servicesProvider.GetRequiredService <FastTunnelClient>();

                client.Login(() =>
                {
                    Connecter _client = null;

                    try
                    {
                        _client = new Connecter(server.ip, server.bind_port);
                        _client.Connect();
                    }
                    catch (Exception ex)
                    {
                        _logger.Error(ex.Message);
                        _client.Socket.Close();
                        throw;
                    }

                    // 登录
                    _client.Send(new Message <LogInByKeyMassage> {
                        MessageType = MessageType.C_LogIn, Content = new LogInByKeyMassage {
                            key = key
                        }
                    });

                    return(_client);
                }, new SuiDaoServer {
                    ServerAddr = server.ip, ServerPort = server.bind_port
                });
            }
            else
            {
                Console.WriteLine(jobj["errorMsg"].ToString());
                NewKey(_logger);
            }
        }
        public void HandlerMsg(FastTunnelClient cleint, Message <JObject> Msg)
        {
            var request   = Msg.Content.ToObject <NewCustomerMassage>();
            var connecter = new Connecter(cleint._serverConfig.ServerAddr, cleint._serverConfig.ServerPort);

            connecter.Connect();
            connecter.Send(new Message <SwapMassage> {
                MessageType = MessageType.C_SwapMsg, Content = new SwapMassage(request.MsgId)
            });

            var localConnecter = new Connecter(request.WebConfig.LocalIp, request.WebConfig.LocalPort);

            try
            {
                localConnecter.Connect();
            }
            catch (SocketException sex)
            {
                localConnecter.Close();
                if (sex.ErrorCode == 10061)
                {
                    // 内网的站点不存在或无法访问
                    string statusLine     = "HTTP/1.1 200 OK\r\n";
                    string responseHeader = "Content-Type: text/html\r\n";
                    byte[] responseBody;
                    responseBody = Encoding.UTF8.GetBytes(TunnelResource.Page_NoSite);

                    connecter.Send(Encoding.UTF8.GetBytes(statusLine));
                    connecter.Send(Encoding.UTF8.GetBytes(responseHeader));
                    connecter.Send(Encoding.UTF8.GetBytes("\r\n"));
                    connecter.Send(responseBody);

                    connecter.Socket.Disconnect(false);
                    connecter.Socket.Close();
                    return;
                }
                else
                {
                    throw;
                }
            }
            catch (Exception)
            {
                localConnecter.Close();
                throw;
            }

            new SocketSwap(connecter.Socket, localConnecter.Socket).StartSwap();
        }
Beispiel #23
0
        public void HandlerMsg(FastTunnelClient cleint, Message <JObject> Msg)
        {
            var request_ssh   = Msg.Content.ToObject <NewSSHRequest>();
            var connecter_ssh = new Connecter(cleint._serverConfig.ServerAddr, cleint._serverConfig.ServerPort);

            connecter_ssh.Connect();
            connecter_ssh.Send(new Message <SwapMassage> {
                MessageType = MessageType.C_SwapMsg, Content = new SwapMassage(request_ssh.MsgId)
            });

            var localConnecter_ssh = new Connecter(request_ssh.SSHConfig.LocalIp, request_ssh.SSHConfig.LocalPort);

            localConnecter_ssh.Connect();

            new SocketSwap(connecter_ssh.Socket, localConnecter_ssh.Socket).StartSwap();
        }
Beispiel #24
0
        private async Task reConnectAsync()
        {
            Close();
            try
            {
                _client = lastLogin.Invoke();
            }
            catch (Exception ex)
            {
                _logger.LogError(ex.Message);

                Thread.Sleep(reTrySpan);
                await reConnectAsync();
            }

            LogSuccess(_client.Socket);
        }
Beispiel #25
0
        private void reConnect()
        {
            Close();
            try
            {
                _client = login.Invoke();
            }
            catch (Exception ex)
            {
                _logger.LogError(ex.Message);

                Thread.Sleep(reTrySpan);
                reConnect();
                return;
            }

            LogSuccess(_client.Socket);
        }
Beispiel #26
0
    //すでに調べた糸かどうか(調べていない場合は検索)
    private void IsUsedConnecter(Connecter connecter, ref List <Connecter> connecters)
    {
        foreach (Connecter c in connecters)
        {
            if (c.gameObject == connecter.gameObject)
            {
                return;
            }
        }
        if (connecter.gameObject.tag == "Tree")
        {
            connecter.GetComponent <Tree>().m_TerritoryRate -= StringDemeritRate;
            connecters.Add(connecter);
            return;
        }

        connecters.Add(connecter);
        StringSearch(connecter, ref connecters);
    }
Beispiel #27
0
        public void Login(Func <Connecter> login, SuiDaoServer serverConfig)
        {
            _serverConfig = serverConfig;
            lastLogin     = login;

            try
            {
                _client = lastLogin.Invoke();
            }
            catch (Exception ex)
            {
                _logger.LogError(ex.Message);

                Thread.Sleep(reTrySpan);
                reConnectAsync().Wait();
                return;
            }

            LogSuccess(_client.Socket);
        }
Beispiel #28
0
        /// <summary>
        /// 添加多个连接端口的数据传过来
        /// </summary>
        public void AddConnecter(Connecter connecter)
        {
            if (connecter == null)
            {
                throw new ArgumentNullException("connecter", "MessagePump.AddConnecter(...) - connecter == null error!");
            }

            if (connecter.World != null && connecter.World != World)
            {
                throw new ArgumentException("connecter.World", "MessagePump.AddConnecter(...) - connecter.World != null && connecter.World != this.World error!");
            }

            // 检查是否有相同的连接器
            Connecter[] connecterArray = m_Connecters;
            for (int iIndex = 0; iIndex < connecterArray.Length; iIndex++)
            {
                Connecter itemConnecter = connecterArray[iIndex];
                if (itemConnecter == connecter)
                {
                    return;
                }
            }

            SpinLockEx.ReliableEnter(ref m_OnlyLockAddConnecter);
            {
                // 创建新的Listener数组,添加数据,交换数组数据,不需要锁定,没有引用时自动会回收数据
                Connecter[] tempConnecter = new Connecter[m_Connecters.Length + 1];

                for (int iIndex = 0; iIndex < m_Connecters.Length; ++iIndex)
                {
                    tempConnecter[iIndex] = m_Connecters[iIndex];
                }

                tempConnecter[m_Connecters.Length] = connecter;
                connecter.World = m_World;

                m_Connecters = tempConnecter;
            }
            m_OnlyLockAddConnecter.Exit();
        }
Beispiel #29
0
        private static void Run(IServiceProvider servicesProvider)
        {
            var client = servicesProvider.GetRequiredService <FastTunnelClient>();
            var config = servicesProvider.GetRequiredService <ClientConfig>();

            client.Login(() =>
            {
                Connecter _client;

                try
                {
                    // 连接到的目标IP
                    _client = new Connecter(config.Common.ServerAddr, config.Common.ServerPort);
                    _client.Connect();
                }
                catch (Exception ex)
                {
                    Thread.Sleep(5000);
                    throw;
                }

                // 登录
                _client.Send(new Message <LogInRequest>
                {
                    MessageType = MessageType.C_LogIn,
                    Content     = new LogInRequest
                    {
                        Webs = config.Webs,
                        SSH  = config.SSH
                    }
                });

                return(_client);
            }, config.Common);

            while (true)
            {
                Thread.Sleep(10000 * 60);
            }
        }
        public Task StartAsync(CancellationToken cancellationToken)
        {
            _logger.LogInformation("===== FastTunnel Client Start =====");

            config = _configuration.Get <AppSettings>().ClientSettings;

            _fastTunnelClient.Login(() =>
            {
                Connecter _client;

                try
                {
                    // 连接到的目标IP
                    _client = new Connecter(config.Common.ServerAddr, config.Common.ServerPort);
                    _client.Connect();
                }
                catch (Exception)
                {
                    Thread.Sleep(5000);
                    throw;
                }

                // 登录
                _client.Send(new Message <LogInMassage>
                {
                    MessageType = MessageType.C_LogIn,
                    Content     = new LogInMassage
                    {
                        Webs     = config.Webs,
                        SSH      = config.SSH,
                        AuthInfo = "ODadoNDONODHSoDMFMsdpapdoNDSHDoadpwPDNoWAHDoNfa"
                    },
                });

                return(_client);
            }, config.Common);

            return(Task.CompletedTask);
        }
        /// <summary>
        /// 添加多个连接端口的数据传过来
        /// </summary>
        public void AddConnecter( Connecter connecter )
        {
            if ( connecter == null )
                throw new ArgumentNullException( "connecter", "MessagePump.AddConnecter(...) - connecter == null error!" );

            if ( connecter.World != null && connecter.World != World )
                throw new ArgumentException( "connecter.World", "MessagePump.AddConnecter(...) - connecter.World != null && connecter.World != this.World error!" );

            // 检查是否有相同的连接器
            Connecter[] connecterArray = m_Connecters;
            for ( int iIndex = 0; iIndex < connecterArray.Length; iIndex++ )
            {
                Connecter itemConnecter = connecterArray[iIndex];
                if ( itemConnecter == connecter )
                    return;
            }

            SpinLockEx.ReliableEnter( ref m_OnlyLockAddConnecter );
            {
                // 创建新的Listener数组,添加数据,交换数组数据,不需要锁定,没有引用时自动会回收数据
                Connecter[] tempConnecter = new Connecter[m_Connecters.Length + 1];

                for ( int iIndex = 0; iIndex < m_Connecters.Length; ++iIndex )
                    tempConnecter[iIndex] = m_Connecters[iIndex];

                tempConnecter[m_Connecters.Length] = connecter;
                connecter.World = m_World;

                m_Connecters = tempConnecter;
            }
            m_OnlyLockAddConnecter.Exit();
        }
Beispiel #32
0
        /// <summary>
        /// 
        /// </summary>
        internal ClientSocketManager( Connecter connecter, ConnectHandler connectHandler, ReceiveQueue receiveBuffer  )
        {
            if ( connecter == null )
                throw new ArgumentNullException( "ClientSocketHandler.ClientSocketManager(...) - listener == null error!" );

            if ( connectHandler == null )
                throw new ArgumentNullException( "ClientSocketHandler.ClientSocketManager(...) - serviceHandle == null error!" );

            if ( receiveBuffer == null )
                throw new ArgumentNullException( "receiveBuffer", "ClientSocketHandler.ClientSocketManager(...) - receiveBuffer == null error!" );

            m_Connecter = connecter;
            m_ConnectHandle = connectHandler;
            m_ReceiveBuffer = receiveBuffer;
            {
                // �������
                m_ReceiveBuffer.Clear();
            }

            // ��ʼ������ ��ʾ��û���ù�Free(...)����
            m_LockFree.SetValid();
        }