예제 #1
0
        private static void Run(IServiceProvider servicesProvider, ILogger _logger, string key, bool log)
        {
            var res_str = HttpHelper.PostAsJson(SuiDaoApi.GetServerListByKey, $"{{ \"key\":\"{key}\"}}").Result;
            var jobj = JObject.Parse(res_str);
            if ((bool)jobj["success"] == true)
            {
                // 记录登录记录
                if (log)
                {
                    AppendTextToFile(Path.Combine(AppContext.BaseDirectory, KeyLogName), Environment.NewLine + key);
                }

                SuiDaoServerInfo server;
                var res = jobj["data"].ToObject<SuiDaoServerConfig>();
                if (res.servers != null && res.servers.Count() > 0)
                {
                    // 选择其中一个服务器继续
                    if (res.servers.Count() == 1)
                    {
                        server = res.servers.First();
                    }
                    else
                    {
                        Console.WriteLine("请选择其中一个服务器进行连接(输入序号,回车键确认):");
                        for (int i = 0; i < res.servers.Length; i++)
                        {
                            Console.WriteLine($"{i}:{res.servers[i].server_name}");
                        }

                        while (true)
                        {
                            var input = Console.ReadLine();
                            int index;
                            if (int.TryParse(input, out index) && index <= res.servers.Length - 1 && index >= 0)
                            {
                                // 输入有效,退出循环
                                server = res.servers[index];
                                Console.WriteLine($"您选择的服务器为:{server.server_name}");
                                break;
                            }
                            else
                            {
                                Console.WriteLine("输入有误,请重新输入");
                            }
                        }
                    }
                }
                else
                {
                    Console.WriteLine("您无可用的服务器");
                    NewKey(_logger);
                    return;
                }

                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, server_id = server.server_id } });

                    return _client;
                }, new SuiDaoServer { ServerAddr = server.ip, ServerPort = server.bind_port });
            }
            else
            {
                Console.WriteLine(jobj["errorMsg"].ToString());
                NewKey(_logger);
            }
        }