mirror of
https://github.com/project-redbud/FunGame-Server.git
synced 2025-12-05 08:09:03 +00:00
实现退出登录
This commit is contained in:
parent
c69e6ff0bf
commit
53c6eab3e4
@ -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("[ 客户端 ] <- " + "已确认连接");
|
||||
|
||||
15
FunGameServer/Models/Config/OrderDictionary.cs
Normal file
15
FunGameServer/Models/Config/OrderDictionary.cs
Normal 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";
|
||||
}
|
||||
}
|
||||
@ -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 != "")
|
||||
|
||||
@ -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;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
@ -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)
|
||||
|
||||
Loading…
x
Reference in New Issue
Block a user