ZeroLauncher/Manager/LoginManager.cs

147 lines
6.9 KiB
C#
Raw Normal View History

2024-03-07 21:04:59 +08:00
using System.Diagnostics;
using System.Net;
using System.Net.Http;
namespace Zerolauncher.Manager
{
internal class LoginManager
{
//private static readonly HttpClient client = new HttpClient();
public static async Task SendPostRequest()
{
var client = new HttpClient();
client.DefaultRequestVersion = HttpVersion.Version20;
client.DefaultVersionPolicy = HttpVersionPolicy.RequestVersionOrLower;
var values = new Dictionary<string, string>
{
{ "thing1", "hello" },
{ "thing2", "world" }
};
var content = new FormUrlEncodedContent(values);
var response = await client.PostAsync("http://www.example.com/recepticle.aspx", content);
var responseString = await response.Content.ReadAsStringAsync();
Console.WriteLine(responseString);
}
public static async Task LoginTest()
{
var client = new HttpClient();
client.DefaultRequestVersion = HttpVersion.Version20;
client.DefaultVersionPolicy = HttpVersionPolicy.RequestVersionOrLower;
var values = new Dictionary<string, string>
{
{ "thing1", "hello" },
{ "thing2", "world" }
};
var content = new FormUrlEncodedContent(values);
var response = await client.PostAsync("http://www.example.com/recepticle.aspx", content);
var responseString = await response.Content.ReadAsStringAsync();
Console.WriteLine(responseString);
}
public static void GameTest()
{
//Account account = new Account
//{
// userName = "b1783488228",
// userPWD = "565656",
// serverId = "179"
//};
//SingleGame game = new SingleGame(account);
}
public static async Task DoLogin(SingleGame game)
{
var client = new HttpClient();
string? need_web = null;
client.Timeout = TimeSpan.FromSeconds(10);
switch (game.account.providerId)
{
case 0:
{
var values = new Dictionary<string, string>
{
{ "loginFrom", "uframe" },
{ "postLoginHandler", "default" },
{ "layoutSelfAdapting", "true" },
{ "externalLogin", "qq" },
{ "displayMode", "popup" },
{ "layout", "vertical" },
{ "appId", "www_home" },
{ "mainDivId", "popup_login_div" },
{ "includeFcmInfo", "false" },
{ "userNameLabel", "4399用户名" },
{ "userNameTip", "请输入4399用户名" },
{ "welcomeTip", "欢迎回到4399" },
{ "username", game.account.userName },
{ "password", game.account.userPWD }
};
var content = new FormUrlEncodedContent(values);
HttpResponseMessage? response = null;
try
{
response = await client.PostAsync("http://ptlogin.4399.com/ptlogin/login.do?v=1", content);
}
catch (Exception ex)
{
game.Send($"{StaticHandleS.HintText} 网络发生错误,类型:{ex.GetType().Name},消息:{ex.Message}");
need_web = $"http://web.4399.com/stat/togame.php?target=ddt&server_id=S{game.account.serverId}";
break;
}
var responseString = await response.Content.ReadAsStringAsync();
// eventHandles.__errorCallback('密码错误');
if (responseString.Contains("eventHandles.__errorCallback"))
{
game.Send($"{StaticHandleS.HintText} 登录异常:{responseString.Split("eventHandles.__errorCallback('")[1].Split("'")[0]}");
need_web = $"http://web.4399.com/stat/togame.php?target=ddt&server_id=S{game.account.serverId}";
break;
}
if(!game.Send($"{StaticHandleS.HintText} 登录成功,开始解析iframe")) return;
}
{
HttpResponseMessage? response = null;
try
{
response = await client.PostAsync("http://web.4399.com/stat/togame.php?target=ddt&server_id=S" + game.account.serverId, null);
}
catch (Exception ex)
{
game.Send($"{StaticHandleS.HintText} 网络发生错误,类型:{ex.GetType().Name},消息:{ex.Message}");
need_web = $"http://web.4399.com/stat/togame.php?target=ddt&server_id=S{game.account.serverId}";
break;
}
var responseString = await response.Content.ReadAsStringAsync();
if (!responseString.Contains("name=\"game_box\""))
{
game.Send($"{StaticHandleS.HintText} 解析异常:服务器返回数据不正确");
need_web = $"http://web.4399.com/stat/togame.php?target=ddt&server_id=S{game.account.serverId}";
break;
}
responseString = responseString.Split("name=\"game_box\"")[1].Split("src=\"")[1].Split("\"")[0];
response = await client.PostAsync(responseString, null);
responseString = await response.Content.ReadAsStringAsync();
responseString = "http://" + response.RequestMessage.RequestUri.ToString().Split("/")[2] + "/" + responseString.Split("movie\" value='")[1].Split("'")[0];
Trace.WriteLine(responseString);
game.Send($"{StaticHandleS.GameSa} {responseString}");
}
break;
default:
game.Send($"{StaticHandleS.HintText} 错误。未适配的运营商:{game.account.serverId}");
break;
}
client.Dispose();
if (need_web == null) return;
for (int i = 6; i > 0; i--)
{
await Task.Delay(1000);
if (!game.Send($"{StaticHandleS.HintText} 自动登录失败,将在{i}后启用网页登录,关闭窗口取消")) { return; }
}
game.Send($"{StaticHandleS.UseBrowser} {need_web}");
}
}
}