dtlauncher/.old 3/dtlauncher-client-win/LoginWindow.xaml.cs

145 lines
5.3 KiB
C#

using DTLib;
using System;
using System.IO;
using System.Net;
using System.Net.Sockets;
using System.Windows;
using static DTLib.NetWork;
namespace dtlauncher_client_win
{
/// <summary>
/// Логика взаимодействия для LoginWindow.xaml
/// </summary>
public partial class LoginWindow : Window
{
public Socket mainSocket { private set; get; } = new Socket(AddressFamily.InterNetwork, SocketType.Stream, ProtocolType.Tcp);
public string logfile { private set; get; } = $"logs\\client-{DateTime.Now}.log".Replace(':', '-').Replace(' ', '_');
public LoginWindow()
{
InitializeComponent();
try
{
FileWork.DirExistenceCheck("logs");
FileWork.DirExistenceCheck("downloads");
NetWork.Log += Log;
LoginButton.Click += Login;
RegisterButton.Click += Register;
Closed += CloseWindow;
Log("launcher is starting\n");
// подключение к серверу
mainSocket.Connect(new IPEndPoint(Dns.GetHostAddresses(
FileWork.ReadFromConfig("client.cfg", "central server ip"))[0],
Convert.ToInt32(FileWork.ReadFromConfig("client.cfg", "central server port"))));
mainSocket.ReceiveTimeout = 2000;
Log("connecting to the main server...");
string recieved = mainSocket.Request("new user connection try").ToStr();
if (recieved != "new user connection created")
throw new Exception("can't connect to the main server");
Log("connected to the main server");
//NetWork.RequestServersList(mainSocket);
}
catch (Exception e)
{
Log("\nerror:\n" + e.Message + "\n" + e.StackTrace + '\n');
}
}
void Log(string msg)
{
msg = "[" + DateTime.Now.ToString() + "]: " + msg;
FileWork.Log(logfile, msg);
LogBox.Text += msg;
}
void Log(string[] input)
{
if (input.Length % 2 == 0)
{
string str = "";
for (ushort i = 0; i < input.Length; i++)
str += input[++i];
Log(str);
}
else throw new Exception("error in Log(): every text string must have color string before");
}
void Register(object sender, EventArgs e)
{
try
{
string login = LoginBox.Text;
string password = PasswBox.Password;
string filename = $"register-{login}.req";
var hasher = new SecureHasher(256);
if (File.Exists(filename)) File.Delete(filename);
var writer = File.CreateText(filename);
writer.Write(login + " $" +
hasher.HashSaltCycled(password.ToBytes(), login.ToBytes(), 4096)
.HashToString());
writer.Close();
Log($"request file created:{Directory.GetCurrentDirectory()}\\{filename}");
}
catch (Exception ex)
{
Log("registration error: " + ex.Message);
}
}
void Login(object sender, EventArgs e)
{
try
{
/*// пересоздание сокета
if (mainSocket.IsBound)
{
mainSocket.Shutdown(SocketShutdown.Both);
mainSocket.Close();
mainSocket = new Socket(AddressFamily.InterNetwork, SocketType.Stream, ProtocolType.Tcp);
}
var hasher = new SecureHasher(256);
// подключение к серверу
mainSocket.Connect(new IPEndPoint(Dns.GetHostAddresses("m1net.keenetic.pro")[0], 20008));
mainSocket.ReceiveTimeout = 5000;
// авторизация
string login = LoginBox.Text;
string password = PasswBox.Password;
string recievedString = NetWork.Request(mainSocket, login).ToStr();
if (recievedString != "2e9b7473ce473cdbb9b9e68aa444f5146b1b415a05917aceecd3861804cc2fd8")
{
throw new Exception("incorrect login\n");
}
recievedString = NetWork.Request(mainSocket,hasher.HashSaltCycled(password.ToBytes(), login.ToBytes(), 4096)).ToStr();
if (recievedString != "82c8e541601e0883ea189a285e514adfa6c2da05c83285359bbcf73bd3a8518b")
{
throw new Exception("incorrect password");
}*/
Log("succesfully login\n");
var lauWin = new LauncherWindow(mainSocket, logfile);
//CloseSocket(null, null);
lauWin.Show();
Hide();
lauWin.Closed += CloseWindow;
}
catch (Exception ex)
{
Log("login error: " + ex.Message + '\n' + ex.StackTrace);
}
}
void CloseWindow(object sender, EventArgs e)
{
Log("DTchat closed");
Close();
App.Current.Shutdown();
}
}
}