From d2aa97dda01f8592bf198fffda3ce67b125d40bd Mon Sep 17 00:00:00 2001
From: YangHua <1475658476@qq.com>
Date: Sun, 18 Feb 2024 14:33:56 +0800
Subject: [PATCH] create server
---
.gitignore | 2 +
GameServer/GameServer.csproj | 10 +
GameServer/Program.cs | 145 +++++++++++++++
GameServer/Room.cs | 176 ++++++++++++++++++
GameServer/User.cs | 174 +++++++++++++++++
.../bin/Debug/net6.0/GameServer.deps.json | 23 +++
GameServer/bin/Debug/net6.0/GameServer.dll | Bin 0 -> 19456 bytes
GameServer/bin/Debug/net6.0/GameServer.exe | Bin 0 -> 149504 bytes
GameServer/bin/Debug/net6.0/GameServer.pdb | Bin 0 -> 14332 bytes
.../net6.0/GameServer.runtimeconfig.json | 9 +
.../bin/Debug/net6.0/ref/GameServer.dll | Bin 0 -> 8192 bytes
...CoreApp,Version=v6.0.AssemblyAttributes.cs | 4 +
.../Debug/net6.0/GameServer.AssemblyInfo.cs | 23 +++
.../GameServer.AssemblyInfoInputs.cache | 1 +
....GeneratedMSBuildEditorConfig.editorconfig | 10 +
.../Debug/net6.0/GameServer.GlobalUsings.g.cs | 8 +
.../obj/Debug/net6.0/GameServer.assets.cache | Bin 0 -> 215 bytes
.../GameServer.csproj.AssemblyReference.cache | Bin 0 -> 90939 bytes
.../GameServer.csproj.BuildWithSkipAnalyzers | 0
.../GameServer.csproj.CoreCompileInputs.cache | 1 +
.../GameServer.csproj.FileListAbsolute.txt | 44 +++++
GameServer/obj/Debug/net6.0/GameServer.dll | Bin 0 -> 19456 bytes
.../net6.0/GameServer.genruntimeconfig.cache | 1 +
GameServer/obj/Debug/net6.0/GameServer.pdb | Bin 0 -> 14332 bytes
GameServer/obj/Debug/net6.0/apphost.exe | Bin 0 -> 149504 bytes
.../obj/Debug/net6.0/ref/GameServer.dll | Bin 0 -> 8192 bytes
.../obj/Debug/net6.0/refint/GameServer.dll | Bin 0 -> 7680 bytes
.../obj/GameServer.csproj.nuget.dgspec.json | 66 +++++++
.../obj/GameServer.csproj.nuget.g.props | 16 ++
.../obj/GameServer.csproj.nuget.g.targets | 2 +
GameServer/obj/project.assets.json | 72 +++++++
GameServer/obj/project.nuget.cache | 8 +
32 files changed, 795 insertions(+)
create mode 100644 .gitignore
create mode 100644 GameServer/GameServer.csproj
create mode 100644 GameServer/Program.cs
create mode 100644 GameServer/Room.cs
create mode 100644 GameServer/User.cs
create mode 100644 GameServer/bin/Debug/net6.0/GameServer.deps.json
create mode 100644 GameServer/bin/Debug/net6.0/GameServer.dll
create mode 100644 GameServer/bin/Debug/net6.0/GameServer.exe
create mode 100644 GameServer/bin/Debug/net6.0/GameServer.pdb
create mode 100644 GameServer/bin/Debug/net6.0/GameServer.runtimeconfig.json
create mode 100644 GameServer/bin/Debug/net6.0/ref/GameServer.dll
create mode 100644 GameServer/obj/Debug/net6.0/.NETCoreApp,Version=v6.0.AssemblyAttributes.cs
create mode 100644 GameServer/obj/Debug/net6.0/GameServer.AssemblyInfo.cs
create mode 100644 GameServer/obj/Debug/net6.0/GameServer.AssemblyInfoInputs.cache
create mode 100644 GameServer/obj/Debug/net6.0/GameServer.GeneratedMSBuildEditorConfig.editorconfig
create mode 100644 GameServer/obj/Debug/net6.0/GameServer.GlobalUsings.g.cs
create mode 100644 GameServer/obj/Debug/net6.0/GameServer.assets.cache
create mode 100644 GameServer/obj/Debug/net6.0/GameServer.csproj.AssemblyReference.cache
create mode 100644 GameServer/obj/Debug/net6.0/GameServer.csproj.BuildWithSkipAnalyzers
create mode 100644 GameServer/obj/Debug/net6.0/GameServer.csproj.CoreCompileInputs.cache
create mode 100644 GameServer/obj/Debug/net6.0/GameServer.csproj.FileListAbsolute.txt
create mode 100644 GameServer/obj/Debug/net6.0/GameServer.dll
create mode 100644 GameServer/obj/Debug/net6.0/GameServer.genruntimeconfig.cache
create mode 100644 GameServer/obj/Debug/net6.0/GameServer.pdb
create mode 100644 GameServer/obj/Debug/net6.0/apphost.exe
create mode 100644 GameServer/obj/Debug/net6.0/ref/GameServer.dll
create mode 100644 GameServer/obj/Debug/net6.0/refint/GameServer.dll
create mode 100644 GameServer/obj/GameServer.csproj.nuget.dgspec.json
create mode 100644 GameServer/obj/GameServer.csproj.nuget.g.props
create mode 100644 GameServer/obj/GameServer.csproj.nuget.g.targets
create mode 100644 GameServer/obj/project.assets.json
create mode 100644 GameServer/obj/project.nuget.cache
diff --git a/.gitignore b/.gitignore
new file mode 100644
index 0000000..c7912f4
--- /dev/null
+++ b/.gitignore
@@ -0,0 +1,2 @@
+/.vs
+/GameServer.sln
diff --git a/GameServer/GameServer.csproj b/GameServer/GameServer.csproj
new file mode 100644
index 0000000..74abf5c
--- /dev/null
+++ b/GameServer/GameServer.csproj
@@ -0,0 +1,10 @@
+
+
+
+ Exe
+ net6.0
+ enable
+ enable
+
+
+
diff --git a/GameServer/Program.cs b/GameServer/Program.cs
new file mode 100644
index 0000000..2b6e3aa
--- /dev/null
+++ b/GameServer/Program.cs
@@ -0,0 +1,145 @@
+using System;
+using System.Collections.Concurrent;
+using System.Net;
+using System.Net.Sockets;
+using System.Text;
+using System.Threading.Tasks;
+
+namespace GameServer
+{
+ internal class Program
+ {
+ private static ConcurrentDictionary clients = new ConcurrentDictionary();
+
+ static async Task Main(string[] args)
+ {
+ await RunServer();
+ Console.ReadKey();
+ }
+
+ static async Task RunServer()
+ {
+ int port = 12345;
+ TcpListener listener = new TcpListener(IPAddress.Any, port);
+ listener.Start();
+ Console.WriteLine($"Server listening on port {port}");
+
+ while (true)
+ {
+ TcpClient client = await listener.AcceptTcpClientAsync();
+ _ = HandleClientAsync(client);
+ }
+ }
+
+ static async Task HandleClientAsync(TcpClient client)
+ {
+ using (NetworkStream stream = client.GetStream())
+ {
+ string clientAddress = client.Client.RemoteEndPoint.ToString();
+
+ clients.TryAdd(clientAddress, client);
+
+ var user = User.Create(client, stream);
+
+ Console.WriteLine($"Client connected: {clientAddress}");
+
+ byte[] buffer = new byte[4096];
+ byte[] response = null;
+ int bytesRead;
+ while ((bytesRead = await stream.ReadAsync(buffer, 0, buffer.Length)) > 0)
+ {
+ string data = Encoding.UTF8.GetString(buffer, 0, bytesRead);
+ //Console.WriteLine($"Received from {clientAddress}: {data}");
+ string[] commands = data.Split(" ");
+ if (commands.Length > 0)
+ {
+ switch (commands[0])
+ {
+ case "test":
+ Console.WriteLine($"测试 {commands[1]}");
+ break;
+ case "regist"://注册临时身份
+ user.Regist(commands[1]);
+ Console.WriteLine($"注册 {commands[1]}");
+ break;
+ case "getusers"://获取用户列表
+ response = Encoding.UTF8.GetBytes(string.Format("getusers {0}", User.GetUsers(user.userId)));
+ await stream.WriteAsync(response, 0, response.Length);
+ break;
+ case "createroom"://创建房间
+ Console.WriteLine($"创建房间 {commands[1]}");
+ var room = Room.Create(commands[1], user.userId);
+ response = Encoding.UTF8.GetBytes(string.Format("createroom {0},{1},{2}", room.roomId, room.roomname, room.creater));
+ await stream.WriteAsync(response, 0, response.Length);
+ break;
+ case "getrooms"://获取所有房间
+ response = Encoding.UTF8.GetBytes(string.Format("getrooms {0}", Room.GetRooms()));
+ await stream.WriteAsync(response, 0, response.Length);
+ break;
+ case "getownrooms"://获取自己创建的房间
+ response = Encoding.UTF8.GetBytes(string.Format("getownrooms {0}", Room.GetRooms(user.userId)));
+ await stream.WriteAsync(response, 0, response.Length);
+ break;
+ case "joinroom"://加入房间
+ string join = Room.JoinRoom(user, ulong.Parse(commands[1]));
+ if (!string.IsNullOrWhiteSpace(join))
+ {
+ response = Encoding.UTF8.GetBytes(string.Format("joinroom {0}", join));
+ await stream.WriteAsync(response, 0, response.Length);
+ }
+ break;
+ case "getroomusers"://获取所在房间的用户
+ response = Encoding.UTF8.GetBytes(string.Format("getroomusers {0}", User.GetUsers(user.userId, user.roomId)));
+ await stream.WriteAsync(response, 0, response.Length);
+ break;
+ case "joins"://批量加入房间
+ List users = Room.BatchJoinRoom(ulong.Parse(commands[1]));
+ for (int i = 0; i < users.Count; i++)
+ {
+ User.Send2User(users[i].userId, string.Format("send2user joins"));
+ }
+ //response = Encoding.UTF8.GetBytes(string.Format("joins {0}", joins));
+ //await stream.WriteAsync(response, 0, response.Length);
+ break;
+ case "leaveroom"://离开房间
+ string leave = Room.LeaveRoom(user);
+ if (!string.IsNullOrWhiteSpace(leave))
+ {
+ response = Encoding.UTF8.GetBytes(string.Format("leaveroom {0}", leave));
+ await stream.WriteAsync(response, 0, response.Length);
+ }
+ Console.WriteLine($"离开房间 {leave}");
+ break;
+ case "closeroom"://关闭房间
+ string close = Room.CloseRoom(ulong.Parse(commands[1]));
+ if (!string.IsNullOrWhiteSpace(close))
+ {
+ response = Encoding.UTF8.GetBytes(string.Format("closeroom {0}", close));
+ await stream.WriteAsync(response, 0, response.Length);
+ }
+ break;
+ case "send2user"://对用户说
+ User.Send2User(ulong.Parse(commands[1]), string.Format("send2user {0}", commands[2]));
+ break;
+ case "send2room"://对房间说
+ User.Send2Room(user.userId, user.roomId, string.Format("send2room {0}", commands[1]));
+ Console.WriteLine($"send2room {commands[1]}");
+ break;
+ case "send2world"://对世界说
+ User.Send2World(user, string.Format("send2world {0}", commands[1]));
+ break;
+ case "player"://对player说
+ User.Send2Player(user.userId, user.roomId, string.Format("player {0}", commands[1]));
+ break;
+ }
+ }
+ }
+
+ clients.TryRemove(clientAddress, out _);
+ user.OffLine();
+ Console.WriteLine($"Client disconnected: {clientAddress}");
+ }
+ client.Close();
+ }
+ }
+}
\ No newline at end of file
diff --git a/GameServer/Room.cs b/GameServer/Room.cs
new file mode 100644
index 0000000..d2fe400
--- /dev/null
+++ b/GameServer/Room.cs
@@ -0,0 +1,176 @@
+using System;
+using System.Collections.Generic;
+using System.Linq;
+using System.Text;
+using System.Threading.Tasks;
+
+namespace GameServer
+{
+ ///
+ /// 房间
+ ///
+ public class Room
+ {
+ #region 静态
+ private static List rooms = new List();
+ //public static ulong counter = 1;
+ #endregion
+
+ ///
+ /// 房间ID
+ ///
+ public ulong roomId = 0;
+ ///
+ /// 房间名称
+ ///
+ public string roomname = "";
+ ///
+ /// 创建人
+ ///
+ public ulong creater = 0;
+ ///
+ /// 房间用户
+ ///
+ public List users = new List();
+
+ ///
+ /// 构造函数
+ ///
+ /// 房间名称
+ /// 创建人ID
+ public Room(string _roomname, ulong _creater)
+ {
+ roomId = ulong.Parse(_roomname);
+ roomname = _roomname;
+ creater = _creater;
+ }
+
+ ///
+ /// 创建房间
+ ///
+ /// 房间名称
+ /// 创建人ID
+ ///
+ public static Room Create(string _roomname, ulong _creater)
+ {
+ var room = new Room(_roomname, _creater);
+ rooms.Add(room);
+ return room;
+ }
+
+ ///
+ /// 获取房间列表
+ ///
+ /// 创建人
+ ///
+ public static string GetRooms(ulong _creater = 0)
+ {
+ StringBuilder sb = new StringBuilder();
+ rooms.ForEach(r =>
+ {
+ if (_creater == 0)
+ sb.AppendFormat("{0},{1},{2};", r.roomId, r.roomname, r.creater);
+ else
+ {
+ if (r.creater == _creater)
+ sb.AppendFormat("{0},{1},{2};", r.roomId, r.roomname, r.creater);
+ }
+ });
+ return sb.ToString().Trim(';');
+ }
+
+ ///
+ /// 加入房间
+ ///
+ ///
+ ///
+ ///
+ public static string JoinRoom(User _user, ulong _roomId)
+ {
+ var room = rooms.Find(r => r.roomId == _roomId);
+ if (_user.roomId == 0)
+ {
+ if (room != null && !room.users.Contains(_user))
+ {
+ room.users.Add(_user);
+ _user.roomId = _roomId;
+ return string.Format("{0},{1},{2}", room.roomId, room.roomname, room.creater);
+ }
+ }
+ return "";
+ }
+
+ ///
+ /// 批量加入房间
+ ///
+ ///
+ ///
+ public static List BatchJoinRoom(ulong _roomId)
+ {
+ var room = rooms.Find(r => r.roomId == _roomId);
+ List users = User.GetAllUsers();
+ if (room != null)
+ {
+ for (int i = 0; i < users.Count; i++)
+ {
+ int index = i;
+ if (users[index].roomId == 0)
+ {
+ if (!room.users.Contains(users[index]))
+ {
+ room.users.Add(users[index]);
+ users[index].roomId = _roomId;
+ }
+ }
+ }
+ return users;
+ }
+ return users;
+ }
+
+ ///
+ /// 离开房间
+ ///
+ /// 用户
+ ///
+ public static string LeaveRoom(User _user)
+ {
+ if (_user != null)
+ {
+ var room = rooms.Find(r => r.roomId == _user.roomId);
+ if (room != null)
+ {
+ room.users.Remove(_user);
+ _user.roomId = 0;
+ return string.Format("{0},{1},{2},{3}", room.roomId, room.roomname, room.creater,_user.userId);
+ }
+ }
+ return "";
+ }
+
+ ///
+ /// 关闭房间
+ ///
+ /// 房间ID
+ ///
+ public static string CloseRoom(ulong _roomId)
+ {
+ var room = rooms.Find(r => r.roomId == _roomId);
+ if (room != null)
+ {
+ room.users.ForEach(u =>
+ {
+ //通知退出
+ u.Write(string.Format("roomclosed {0}", room.roomId));
+ u.roomId = 0;
+ });
+ room.users.Clear();
+ rooms.Remove(room);
+
+ //关闭房间通知
+ return string.Format("{0}", room.roomId);
+ }
+ return "";
+ }
+ }
+}
\ No newline at end of file
diff --git a/GameServer/User.cs b/GameServer/User.cs
new file mode 100644
index 0000000..9bd5685
--- /dev/null
+++ b/GameServer/User.cs
@@ -0,0 +1,174 @@
+using System;
+using System.Collections.Generic;
+using System.Linq;
+using System.Net.Sockets;
+using System.Text;
+using System.Threading.Tasks;
+
+namespace GameServer
+{
+ public class User
+ {
+ #region 私有,静态
+ private static List Users = new List();
+ //private static ulong counter = 1;
+ #endregion
+
+ ///
+ /// 用户ID(服务端)
+ ///
+ public ulong userId = 0;
+ ///
+ /// 远程终端节点
+ ///
+ public string remoteId = "";
+ ///
+ /// 用户姓名
+ ///
+ public string username = "";
+ ///
+ /// 所在房间ID(0表示不在任何房间)
+ ///
+ public ulong roomId = 0;
+ public TcpClient client = null;
+ public NetworkStream stream = null;
+
+ ///
+ /// 用户构造函数
+ ///
+ /// 客户端
+ /// 流
+ public User(TcpClient _client, NetworkStream _stream)
+ {
+ client = _client;
+ stream = _stream;
+ remoteId = client.Client.RemoteEndPoint.ToString();
+ Users.Add(this);
+ }
+
+ ///
+ /// 注册
+ ///
+ /// 名字
+ public void Regist(string _username)
+ {
+ userId = ulong.Parse(_username);
+ username = _username;
+ byte[] response = Encoding.UTF8.GetBytes(string.Format("regist {0},{1},{2}", userId, username, roomId));
+ stream.WriteAsync(response, 0, response.Length);
+ }
+
+ ///
+ /// 写入
+ ///
+ ///
+ public void Write(string msg)
+ {
+ byte[] buffer = Encoding.UTF8.GetBytes(msg);
+ stream.WriteAsync(buffer, 0, buffer.Length);
+ }
+
+ public void OffLine()
+ {
+ Room.LeaveRoom(this);
+ Users.Remove(this);
+ }
+
+ ///
+ /// 创建用户
+ ///
+ ///
+ ///
+ public static User Create(TcpClient _client, NetworkStream _stream)
+ {
+ return new User(_client, _stream);
+ }
+
+ ///
+ /// 获取用户列表
+ ///
+ /// 除此之外(通常指自己)
+ ///
+ public static string GetUsers(ulong except, ulong roomId = 0)
+ {
+ StringBuilder sb = new StringBuilder();
+ var tempUsers = Users;
+ if (roomId != 0)
+ {
+ tempUsers = Users.Where(u => u.roomId.Equals(roomId)).ToList();
+ }
+ tempUsers.ForEach(u =>
+ {
+ if (u.userId != except)
+ {
+ sb.AppendFormat("{0},{1},{2};", u.userId, u.username, u.roomId);
+ }
+
+ });
+ return sb.ToString().Trim(';');
+ }
+
+ public static List GetAllUsers()
+ {
+ return Users;
+ }
+
+ ///
+ /// 私发
+ ///
+ ///
+ public static void Send2User(ulong _userId, string msg)
+ {
+ var user = Users.Find(u => u.userId == _userId);
+ if (user != null)
+ {
+ user.Write(msg);
+ }
+ }
+
+ ///
+ /// 房间
+ ///
+ ///
+ public static void Send2Room(ulong _userId, ulong _roomId, string msg)
+ {
+ var users = Users.Where(u => u.roomId == _roomId && u.userId != _userId).ToList();
+ users.ForEach(u =>
+ {
+ if (u.roomId != 0)
+ {
+ u.Write(msg);
+ }
+ });
+ }
+
+ ///
+ /// 房间
+ ///
+ ///
+ public static void Send2Player(ulong _userId, ulong _roomId, string msg)
+ {
+ var users = Users.Where(u => u.roomId == _roomId && u.userId != _userId).ToList();
+ users.ForEach(u =>
+ {
+ if (u.roomId != 0)
+ {
+ u.Write(String.Format("{0}", msg));
+ }
+ });
+ }
+
+ ///
+ /// 世界
+ ///
+ ///
+ public static void Send2World(User _user, string msg)
+ {
+ Users.ForEach((u) =>
+ {
+ if (u.userId != _user.userId)
+ u.Write(msg);
+ });
+ }
+ }
+}
diff --git a/GameServer/bin/Debug/net6.0/GameServer.deps.json b/GameServer/bin/Debug/net6.0/GameServer.deps.json
new file mode 100644
index 0000000..f28731c
--- /dev/null
+++ b/GameServer/bin/Debug/net6.0/GameServer.deps.json
@@ -0,0 +1,23 @@
+{
+ "runtimeTarget": {
+ "name": ".NETCoreApp,Version=v6.0",
+ "signature": ""
+ },
+ "compilationOptions": {},
+ "targets": {
+ ".NETCoreApp,Version=v6.0": {
+ "GameServer/1.0.0": {
+ "runtime": {
+ "GameServer.dll": {}
+ }
+ }
+ }
+ },
+ "libraries": {
+ "GameServer/1.0.0": {
+ "type": "project",
+ "serviceable": false,
+ "sha512": ""
+ }
+ }
+}
\ No newline at end of file
diff --git a/GameServer/bin/Debug/net6.0/GameServer.dll b/GameServer/bin/Debug/net6.0/GameServer.dll
new file mode 100644
index 0000000000000000000000000000000000000000..0c344bb95d89f408f56b9775e1196da3d2f7da05
GIT binary patch
literal 19456
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
v1E)mEhIy>1n7(0_?R^`4Nj=T?GC&DPx66
literal 0
HcmV?d00001
diff --git a/GameServer/bin/Debug/net6.0/GameServer.exe b/GameServer/bin/Debug/net6.0/GameServer.exe
new file mode 100644
index 0000000000000000000000000000000000000000..754afd1e08bef34c29c5ff9dfb654334b25f509c
GIT binary patch
literal 149504
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