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 string key { get; set; }
public long server_id { get; set; }
}
}

View File

@ -5,9 +5,18 @@ using System.Text;
namespace SuiDao.Client.Models
{
public class SuiDaoServerConfig
{
public SuiDaoServerInfo[] servers { get; set; }
}
public class SuiDaoServerInfo
{
public string ip { 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)
{
var res = HttpHelper.PostAsJson("https://api1.suidao.io/api/Client/GetServerByKey", $"{{ \"key\":\"{key}\"}}").Result;
var jobj = JObject.Parse(res);
var res_str = HttpHelper.PostAsJson("https://api1.suidao.io/api/Client/GetServerByKey", $"{{ \"key\":\"{key}\"}}").Result;
var jobj = JObject.Parse(res_str);
if ((bool)jobj["success"] == true)
{
// 记录登录记录
@ -171,7 +171,47 @@ namespace SuiDao.Client
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>();
@ -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;
}, new SuiDaoServer { ServerAddr = server.ip, ServerPort = server.bind_port });

View File

@ -15,8 +15,10 @@ namespace SuiDao.Server
{
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);
if ((bool)jobj["success"] == true)
{

View File

@ -1,6 +1,7 @@
<?xml version="1.0" encoding="utf-8"?>
<Project ToolsVersion="Current" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
<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>
</Project>