ChatX/chatclient/LoginWindow.xaml.cs

175 lines
5.8 KiB
C#
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Linq;
using System.Text;
using System.Text.Json;
using System.Threading.Tasks;
using System.Windows;
using System.Windows.Controls;
using System.Windows.Data;
using System.Windows.Documents;
using System.Windows.Input;
using System.Windows.Media;
using System.Windows.Media.Imaging;
using System.Windows.Shapes;
using System.Net.Sockets;
using System.IO;
using log4net;
using log4net.Config;
using System.Windows.Interop;
using chatapi;
using System.Runtime.CompilerServices;
namespace chatclient
{
/// <summary>
/// LoginWindow.xaml 的交互逻辑
/// </summary>
public partial class LoginWindow : Window, INotifyPropertyChanged
{
private static readonly ILog log = LogManager.GetLogger(typeof(LoginWindow));
public LoginWindow()
{
InitializeComponent();
this.DataContext = this;
}
public event PropertyChangedEventHandler? PropertyChanged;
private void Update(string UpdateName)
{
PropertyChanged?.Invoke(this, new PropertyChangedEventArgs(UpdateName));
}
public static string UserName { get; set; } = "";
public static string UserPassword { get; set; } = "";
public static string SignName { get; set; } = "";
public static string SignPassword1 { get; set; } = "";
public static string SignPassword2 { get; set; } = "";
private string? _SignMsg;
public string? SignMsg
{
get { return _SignMsg; }
set
{
_SignMsg = value;
Update("SignMsg");
}
}
private bool _SaveAccount;
public bool SaveAccount
{
get { return _SaveAccount; }
set
{
_SaveAccount = value;
Update("SaveAccount");
}
}
private void Login_Click(object sender, RoutedEventArgs e)
{
if (UserName == "")
{
LoginMsg.Text = "用户名不能为空";
}
else if (UserPassword == "")
{
LoginMsg.Text = "密码不能为空";
}
else
{
var LoginData = new
{
type = "login",
username = UserName,
password = UserPassword
};
string LoginJsonData = JsonSerializer.Serialize(LoginData);
byte[] dataBytes = Encoding.UTF8.GetBytes(LoginJsonData);
log.Info($"向服务器发送登录请求UserName:{UserName}");
if (MainWindow.Client is not null)
{
if (MainWindow.Client.Connected)
{
MainWindow.Client.Send(dataBytes);
}
else
{
try
{
log.Info("未连接服务器,尝试连接");
MainWindow.Client = new Socket(AddressFamily.InterNetwork, SocketType.Stream, ProtocolType.Tcp);
MainWindow.Client.Connect("127.0.0.1", 5555);
}
catch (Exception ex)
{
log.Error(ex);
MainWindow.Client.Close();
}
finally
{
LoginMsg.Text = "服务器连接失败或已断开连接";
}
}
}
}
}
private void Sign_Click(object sender, RoutedEventArgs e)
{
if (SignName == "")
{
SignMsg = "用户名不能为空";
}
else if (SignPassword1 == "")
{
SignMsg = "密码不能为空";
}
else if (SignPassword2 == "")
{
SignMsg = "请再次确认密码";
}
else if (SignPassword1 != SignPassword2)
{
SignMsg = "两次密码输入不一致";
}
else
{
var SignData = new
{
type = "register",
username = SignName,
password = SignPassword1
};
string SignJsonData = JsonSerializer.Serialize(SignData);
byte[] dataBytes = Encoding.UTF8.GetBytes(SignJsonData);
log.Info($"向服务器发送注册请求UserName:{SignName}");
Update("LoginMsg");
if (MainWindow.Client is not null)
{
if (MainWindow.Client.Connected)
{
MainWindow.Client.Send(dataBytes);
}
else
{
try
{
log.Info("未连接服务器,尝试连接");
MainWindow.Client = new Socket(AddressFamily.InterNetwork, SocketType.Stream, ProtocolType.Tcp);
MainWindow.Client.Connect("127.0.0.1", 5555);
}
catch (Exception ex)
{
log.Error(ex);
MainWindow.Client.Close();
}
finally
{
SignMsg = "服务器连接失败或已断开连接";
}
}
}
}
}
}
}