support multi server

This commit is contained in:
SpringHgui 2020-07-01 16:49:23 +08:00
parent c9f3768797
commit 3c96e40127
5 changed files with 62 additions and 8 deletions

View File

@ -8,5 +8,7 @@ namespace SuiDao.Client.Models
public class LogInByKeyMassage : TunnelMassage public class LogInByKeyMassage : TunnelMassage
{ {
public string key { get; set; } public string key { get; set; }
public long server_id { get; set; }
} }
} }

View File

@ -5,9 +5,18 @@ using System.Text;
namespace SuiDao.Client.Models namespace SuiDao.Client.Models
{ {
public class SuiDaoServerConfig public class SuiDaoServerConfig
{
public SuiDaoServerInfo[] servers { get; set; }
}
public class SuiDaoServerInfo
{ {
public string ip { get; set; } public string ip { get; set; }
public int bind_port { get; set; } public int bind_port { get; set; }
public string server_name { get; set; }
public long server_id { get; set; }
} }
} }

View File

@ -161,8 +161,8 @@ namespace SuiDao.Client
private static void Run(IServiceProvider servicesProvider, ILogger _logger, string key, bool log) 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 res_str = HttpHelper.PostAsJson("https://api1.suidao.io/api/Client/GetServerByKey", $"{{ \"key\":\"{key}\"}}").Result;
var jobj = JObject.Parse(res); var jobj = JObject.Parse(res_str);
if ((bool)jobj["success"] == true) if ((bool)jobj["success"] == true)
{ {
// 记录登录记录 // 记录登录记录
@ -171,7 +171,47 @@ namespace SuiDao.Client
AppendTextToFile(Path.Combine(AppContext.BaseDirectory, KeyLogName), Environment.NewLine + key); AppendTextToFile(Path.Combine(AppContext.BaseDirectory, KeyLogName), Environment.NewLine + key);
} }
var server = jobj["data"].ToObject<SuiDaoServerConfig>(); 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>(); var client = servicesProvider.GetRequiredService<FastTunnelClient>();
@ -193,7 +233,7 @@ namespace SuiDao.Client
} }
// 登录 // 登录
_client.Send(new Message<LogInByKeyMassage> { MessageType = MessageType.C_LogIn, Content = new LogInByKeyMassage { key = key } }); _client.Send(new Message<LogInByKeyMassage> { MessageType = MessageType.C_LogIn, Content = new LogInByKeyMassage { key = key, server_id = server.server_id } });
return _client; return _client;
}, new SuiDaoServer { ServerAddr = server.ip, ServerPort = server.bind_port }); }, new SuiDaoServer { ServerAddr = server.ip, ServerPort = server.bind_port });

View File

@ -15,8 +15,10 @@ namespace SuiDao.Server
{ {
public LogInMassage GetConfig(JObject content) public LogInMassage GetConfig(JObject content)
{ {
var key = content.ToObject<LogInByKeyMassage>().key;
var res = HttpHelper.PostAsJson("https://api1.suidao.io/api/Client/GetTunnelByKey", $"{{ \"key\":\"{key}\"}}").Result; var logMsg = content.ToObject<LogInByKeyMassage>();
var res = HttpHelper.PostAsJson("https://api1.suidao.io/api/Client/GetTunnelByKey", $"{{ \"key\":\"{logMsg.key}\",\"server_id\":{logMsg.server_id}}}").Result;
var jobj = JObject.Parse(res); var jobj = JObject.Parse(res);
if ((bool)jobj["success"] == true) if ((bool)jobj["success"] == true)
{ {

View File

@ -1,6 +1,7 @@
<?xml version="1.0" encoding="utf-8"?> <?xml version="1.0" encoding="utf-8"?>
<Project ToolsVersion="Current" xmlns="http://schemas.microsoft.com/developer/msbuild/2003"> <Project ToolsVersion="Current" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
<PropertyGroup> <PropertyGroup>
<_LastSelectedProfileId>G:\GitHub\FastTunnel\SuiDao.Server\Properties\PublishProfiles\FolderProfile.pubxml</_LastSelectedProfileId> <_LastSelectedProfileId>D:\GitHub\FastTunnel\SuiDao.Server\Properties\PublishProfiles\FolderProfile.pubxml</_LastSelectedProfileId>
<ShowAllFiles>false</ShowAllFiles>
</PropertyGroup> </PropertyGroup>
</Project> </Project>