实现退出登录

This commit is contained in:
Mili 2022-09-16 22:30:23 +08:00
parent c69e6ff0bf
commit 53c6eab3e4
5 changed files with 87 additions and 30 deletions

View File

@ -26,13 +26,13 @@ while (Running)
{
switch (order)
{
case "quit":
case OrderDictionary.Quit:
Running = false;
break;
case "help":
case OrderDictionary.Help:
ServerHelper.WriteLine("Milimoe -> 帮助");
break;
case "restart":
case OrderDictionary.Restart:
if (ServerSocket == null)
{
ServerHelper.WriteLine("重启服务器");
@ -73,6 +73,8 @@ void StartServer()
Console.Title = Config.SERVER_NAME + " - FunGame Server Port: " + Config.SERVER_PORT;
}
Config.DefaultDataHelper.Close();
// 连接MySQL服务器
if (!Config.DefaultDataHelper.Connect())
{
@ -104,20 +106,19 @@ void StartServer()
{
socket = ServerSocket.Accept();
IPEndPoint? clientIP = (IPEndPoint?)socket.RemoteEndPoint;
if (clientIP != null)
ServerHelper.WriteLine("客户端" + clientIP.ToString() + "连接 . . .");
else
ServerHelper.WriteLine("未知地点客户端连接 . . .");
string clientIPaddress = (clientIP != null) ? clientIP.ToString() : "Unknown";
ServerHelper.WriteLine("客户端" + clientIPaddress + "连接 . . .");
if (Read(socket) && Send(socket))
Task.Factory.StartNew(() =>
{
new ClientSocket(socket, Running).Start();
ClientSocket cs = new ClientSocket(socket, Running);
Task t = Task.Factory.StartNew(() =>
{
cs.Start();
});
cs.Task = t;
}
else
if (clientIP != null)
ServerHelper.WriteLine("客户端" + clientIP.ToString() + "连接失败。");
else
ServerHelper.WriteLine("客户端连接失败。");
ServerHelper.WriteLine("客户端" + clientIPaddress + "连接失败。");
}
catch (Exception e)
{
@ -157,9 +158,9 @@ bool Read(Socket socket)
if (length > 0)
{
string msg = Config.DEFAULT_ENCODING.GetString(buffer, 0, length);
string typestring = CommonEnums.GetSocketTypeName(SocketHelper.GetType(msg));
string typestring = EnumHelper.GetSocketTypeName(SocketHelper.GetType(msg));
msg = SocketHelper.GetMessage(msg);
if (typestring != CommonEnums.SocketType.Unknown.ToString())
if (typestring != SocketMessageType.Unknown.ToString())
{
ServerHelper.WriteLine("[ 客户端(" + typestring + "] -> " + msg);
return true;
@ -177,7 +178,7 @@ bool Send(Socket socket)
// 发送消息给客户端
string msg = " >> 已连接至服务器:" + Config.SERVER_NAME + "。\n\n********** 服务器公告 **********\n\n" + Config.SERVER_NOTICE + "\n\n";
byte[] buffer = new byte[2048];
buffer = Config.DEFAULT_ENCODING.GetBytes(SocketHelper.MakeMessage((int)CommonEnums.SocketType.GetNotice, msg));
buffer = Config.DEFAULT_ENCODING.GetBytes(SocketHelper.MakeMessage((int)SocketMessageType.GetNotice, msg));
if (socket.Send(buffer) > 0)
{
ServerHelper.WriteLine("[ 客户端 ] <- " + "已确认连接");

View File

@ -0,0 +1,15 @@
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
namespace FunGameServer.Models.Config
{
public class OrderDictionary
{
public const string Help = "help";
public const string Quit = "quit";
public const string Restart = "restart";
}
}

View File

@ -12,6 +12,7 @@ using System.Reflection.Metadata;
using FunGame.Core.Api.Model.Entity;
using System.Net;
using FunGame.Core.Api.Model.Enum;
using MySqlX.XDevAPI.Common;
namespace FunGameServer.Sockets
{
@ -19,8 +20,9 @@ namespace FunGameServer.Sockets
{
public bool Running { get; set; } = false;
public Socket? Socket { get; set; } = null;
public Task? Task = null;
private User? user = null;
private User? User = null;
public ClientSocket(Socket socket, bool running)
{
@ -41,22 +43,49 @@ namespace FunGameServer.Sockets
{
string msg = Config.DEFAULT_ENCODING.GetString(buffer, 0, length);
int type = SocketHelper.GetType(msg);
string typestring = CommonEnums.GetSocketTypeName(type);
string typestring = EnumHelper.GetSocketTypeName(type);
msg = SocketHelper.GetMessage(msg);
if (type != (int)CommonEnums.SocketType.HeartBeat) ServerHelper.WriteLine("[ 客户端(" + typestring + "] -> " + msg);
if (type != (int)SocketMessageType.HeartBeat) ServerHelper.WriteLine("[ 客户端(" + typestring + "] -> " + msg);
switch (type)
{
case (int)CommonEnums.SocketType.GetNotice:
case (int)SocketMessageType.GetNotice:
msg = Config.SERVER_NOTICE;
break;
case (int)CommonEnums.SocketType.Login:
case (int)SocketMessageType.Login:
break;
case (int)CommonEnums.SocketType.CheckLogin:
case (int)SocketMessageType.CheckLogin:
// 添加至玩家列表
if (!Config.OnlinePlayers.ContainsKey(msg))
{
if (Task != null)
{
User = new User(msg);
Config.OnlinePlayers.AddOrUpdate(User.Userame, Task, (key, value) => value);
ServerHelper.WriteLine("OnlinePlayers: 玩家 " + User.Userame + " 已添加");
}
}
else
{
// TODO
ServerHelper.WriteLine("OnlinePlayers: 玩家 " + msg + " 重复登录!");
}
msg = " >> 欢迎回来, " + msg + " 。";
break;
case (int)CommonEnums.SocketType.Logout:
case (int)SocketMessageType.Logout:
msg = " >> 你已成功退出登录! ";
if (Task != null && User != null)
{
if (Config.OnlinePlayers.TryRemove(User.Userame, out Task))
{
ServerHelper.WriteLine("OnlinePlayers: 玩家 " + User.Userame + " 已移除");
Task = null;
User = null;
}
else
ServerHelper.WriteLine("OnlinePlayers: 移除玩家 " + User.Userame + " 失败");
}
break;
case (int)CommonEnums.SocketType.HeartBeat:
case (int)SocketMessageType.HeartBeat:
msg = "";
break;
}
@ -78,7 +107,7 @@ namespace FunGameServer.Sockets
{
byte[] buffer = new byte[2048];
buffer = Config.DEFAULT_ENCODING.GetBytes(Convert.ToString(SocketHelper.MakeMessage(type, msg)));
string typestring = CommonEnums.GetSocketTypeName(type);
string typestring = EnumHelper.GetSocketTypeName(type);
if (socket.Send(buffer) > 0)
{
if (msg != "")

View File

@ -1,4 +1,5 @@
using FunGame.Core.Api.Model.Entity;
using FunGame.Core.Api.Model.Enum;
using FunGameServer.Models.Config;
using MySql.Data.MySqlClient;
using System;
@ -6,7 +7,6 @@ using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using static FunGame.Core.Api.Model.Enum.CommonEnums;
namespace FunGameServer.Utils
{
@ -51,5 +51,14 @@ namespace FunGameServer.Utils
}
return false;
}
public void Close()
{
if (msc != null && msc.State == System.Data.ConnectionState.Open)
{
msc.Close();
}
msc = null;
}
}
}

View File

@ -1,4 +1,5 @@
using FunGameServer.Models.Config;
using FunGame.Core.Api.Model.Enum;
using FunGameServer.Models.Config;
using System;
using System.Collections;
using System.Collections.Generic;
@ -6,7 +7,6 @@ using System.Linq;
using System.Text;
using System.Text.RegularExpressions;
using System.Threading.Tasks;
using static FunGame.Core.Api.Model.Enum.CommonEnums;
namespace FunGameServer.Utils
{
@ -68,7 +68,10 @@ namespace FunGameServer.Utils
public static void InitOrderList()
{
Config.OrderList.Add("Help", "Milimoe -> 帮助");
Config.OrderList.Clear();
Config.OrderList.Add(OrderDictionary.Help, "Milimoe -> 帮助");
Config.OrderList.Add(OrderDictionary.Quit, "Milimoe -> 帮助");
Config.OrderList.Add(OrderDictionary.Restart, "Milimoe -> 帮助");
}
public static bool IsIP(string ip)