master
Benjamin Kraft 4 years ago
parent 77cd1c40a6
commit 063e8f0d6e
  1. 2
      Arch/DatePrefix.cs
  2. 4
      Arch/Packet.cs
  3. 4
      Arch/ProtocolManager.cs
  4. 4
      Arch/SendData.cs
  5. 12
      Arch/ThreadManager.cs
  6. 13
      Game/GameHandle.cs
  7. 24
      Game/GameManager.cs
  8. 14
      Game/GameSend.cs
  9. 2
      Game/Player.cs
  10. 7
      Management/Client.cs
  11. 4
      Management/Constants.cs
  12. 5
      Management/Room.cs
  13. 4
      Management/RoomHandle.cs
  14. 11
      Management/RoomSend.cs
  15. 12
      Management/Server.cs
  16. 5
      Management/ServerHandle.cs
  17. 8
      Management/ServerSend.cs
  18. 2
      PacketTypes/ClientDefaultPacket.cs
  19. 4
      PacketTypes/ClientGamePacket.cs
  20. 2
      PacketTypes/ClientRoomPacket.cs
  21. 2
      PacketTypes/PacketType.cs
  22. 2
      PacketTypes/ServerDefaultPacket.cs
  23. 2
      PacketTypes/ServerGamePacket.cs
  24. 2
      PacketTypes/ServerRoomPacket.cs
  25. 11
      Program.cs

@ -2,7 +2,7 @@
using System.IO; using System.IO;
using System.Text; using System.Text;
namespace GameServer.Arch { namespace BasicServer.Arch {
public class DatePrefix : TextWriter { public class DatePrefix : TextWriter {

@ -2,9 +2,9 @@
using System.Collections.Generic; using System.Collections.Generic;
using System.Numerics; using System.Numerics;
using System.Text; using System.Text;
using GameServer.Management; using BasicServer.Management;
namespace GameServer.Arch { namespace BasicServer.Arch {
public sealed class Packet : IDisposable { public sealed class Packet : IDisposable {
private List<byte> _buffer; private List<byte> _buffer;

@ -2,9 +2,9 @@
using System.Collections.Generic; using System.Collections.Generic;
using System.Net; using System.Net;
using System.Net.Sockets; using System.Net.Sockets;
using GameServer.Management; using BasicServer.Management;
namespace GameServer.Arch { namespace BasicServer.Arch {
public static class Listener { public static class Listener {
private static TcpListener _tcpListener; private static TcpListener _tcpListener;

@ -1,8 +1,8 @@
using System; using System;
using System.Linq; using System.Linq;
using GameServer.Management; using BasicServer.Management;
namespace GameServer.Arch { namespace BasicServer.Arch {
public static class SendData { public static class SendData {
public static void SendTcpData(int toClient, Packet packet) { public static void SendTcpData(int toClient, Packet packet) {
packet.WriteLength(); packet.WriteLength();

@ -1,10 +1,10 @@
using System; using System;
using System.Collections.Generic; using System.Collections.Generic;
using System.Linq;
using System.Threading; using System.Threading;
using GameServer.Management; using BasicServer.Game;
using BasicServer.Management;
namespace GameServer.Arch { namespace BasicServer.Arch {
internal static class ThreadManager { internal static class ThreadManager {
private static readonly List<Action> ToExecuteOnMainThread = new(); private static readonly List<Action> ToExecuteOnMainThread = new();
@ -47,6 +47,8 @@ namespace GameServer.Arch {
Console.WriteLine($"Main thread started. Running at {Constants.TicksPerSec} ticks per second."); Console.WriteLine($"Main thread started. Running at {Constants.TicksPerSec} ticks per second.");
var nextLoop = DateTime.Now; var nextLoop = DateTime.Now;
Server.Start(50, 26950);
while (IsRunning) while (IsRunning)
while (nextLoop < DateTime.Now) { while (nextLoop < DateTime.Now) {
Tick(); Tick();
@ -59,8 +61,8 @@ namespace GameServer.Arch {
} }
private static void Tick() { private static void Tick() {
foreach (var room in Server.Rooms.Values.Where(room => room.Game != null && room.Game.IsRunning)) { foreach (var room in Server.Rooms.Values) {
room.Game.Update(); room.Game?.Update();
} }
UpdateMain(); UpdateMain();

@ -1,13 +0,0 @@
using System.Collections.Generic;
using GameServer.Arch;
using GameServer.Management;
using GameServer.PacketTypes;
namespace GameServer.Game {
public static class GameHandle {
public static void Action(int fromClient, Packet packet) {
}
}
}

@ -1,31 +1,25 @@
using System.Collections.Generic; using BasicServer.Management;
using GameServer.Management;
namespace GameServer.Game { namespace BasicServer.Game {
public class GameManager { public class GameManager {
public bool IsRunning { get; set; }
private Room Room { get; } private Room Room { get; }
private Dictionary<int, Player> Players { get; } = new();
private bool IsStarted { get; set; }
public GameManager(Room room) { public GameManager(Room room) {
Room = room; Room = room;
foreach (var client in room.Clients) {
Players.Add(client.Id, new Player(client.Id, client.Name));
}
} }
public void Start() { public void Start() {
foreach (var player in Players.Values) { IsStarted = true;
player.Start();
}
} }
public void Update() { public void Update() {
foreach (var player in Players.Values) { if (!IsStarted)
player.Update(); return;
}
} }
} }

@ -1,14 +0,0 @@
using GameServer.Arch;
using GameServer.Management;
using GameServer.PacketTypes;
using static GameServer.Arch.SendData;
namespace GameServer.Game {
public static class GameSend {
private static Packet CreatePacket(ServerGamePacket type) {
return new((int)PacketType.Game, (int)type);
}
}
}

@ -1,4 +1,4 @@
namespace GameServer.Game { namespace BasicServer.Game {
public class Player { public class Player {
public int Id { get; } public int Id { get; }

@ -1,8 +1,9 @@
using System; using System;
using GameServer.Arch; using BasicServer.Arch;
using GameServer.Game; using BasicServer.Game;
using GameServer.Management;
namespace GameServer.Management { namespace BasicServer.Management {
public class Client { public class Client {
public readonly int Id; public readonly int Id;

@ -1,6 +1,6 @@
namespace GameServer.Management { namespace BasicServer.Management {
public static class Constants { public static class Constants {
public const int TicksPerSec = 32; public const int TicksPerSec = 64;
public const int MsPerTick = 1000 / TicksPerSec; public const int MsPerTick = 1000 / TicksPerSec;
public const int DataBufferSize = 4096; public const int DataBufferSize = 4096;
public const int CountdownSeconds = 2; public const int CountdownSeconds = 2;

@ -1,9 +1,9 @@
using System; using System;
using System.Collections.Generic; using System.Collections.Generic;
using System.Linq; using System.Linq;
using GameServer.Game; using BasicServer.Game;
namespace GameServer.Management { namespace BasicServer.Management {
public class Room { public class Room {
public class ClientProperties { public class ClientProperties {
@ -25,7 +25,6 @@ namespace GameServer.Management {
public void StartGame() { public void StartGame() {
Game = new GameManager(this); Game = new GameManager(this);
Game.Start();
} }
public readonly Dictionary<int, ClientProperties> ClientPropertiesMap = new(); public readonly Dictionary<int, ClientProperties> ClientPropertiesMap = new();

@ -1,5 +1,7 @@
using System; using System;
using GameServer.Arch; using BasicServer;
using BasicServer.Arch;
using BasicServer.Management;
namespace GameServer.Management { namespace GameServer.Management {
public static class RoomHandle { public static class RoomHandle {

@ -1,11 +1,10 @@
using System; using System;
using BasicServer.Arch;
using BasicServer.PacketTypes;
using static BasicServer.Arch.SendData;
using static BasicServer.PacketTypes.ServerRoomPacket;
using GameServer.Arch; namespace BasicServer.Management {
using GameServer.PacketTypes;
using static GameServer.Arch.SendData;
using static GameServer.PacketTypes.ServerRoomPacket;
namespace GameServer.Management {
public static class RoomSend { public static class RoomSend {
private static Packet CreatePacket(ServerRoomPacket type) { private static Packet CreatePacket(ServerRoomPacket type) {
return new((int)PacketType.Room, (int)type); return new((int)PacketType.Room, (int)type);

@ -1,10 +1,11 @@
using System; using System;
using System.Collections.Generic; using System.Collections.Generic;
using GameServer.Arch; using BasicServer.Arch;
using GameServer.Game; using BasicServer.Management;
using GameServer.PacketTypes; using BasicServer.PacketTypes;
using GameServer.Management;
namespace GameServer.Management { namespace BasicServer {
internal static class Server { internal static class Server {
public delegate void PacketHandler(int fromClient, Packet packet); public delegate void PacketHandler(int fromClient, Packet packet);
@ -47,9 +48,6 @@ namespace GameServer.Management {
{(int)ClientRoomPacket.RReady, RoomHandle.RoomReady}, {(int)ClientRoomPacket.RReady, RoomHandle.RoomReady},
{(int)ClientRoomPacket.RColor, RoomHandle.RoomColor}, {(int)ClientRoomPacket.RColor, RoomHandle.RoomColor},
{(int)ClientRoomPacket.RStart, RoomHandle.RoomStart}, {(int)ClientRoomPacket.RStart, RoomHandle.RoomStart},
}},
{(int)PacketType.Game, new Dictionary<int, PacketHandler> {
{(int)ClientGamePacket.Action, GameHandle.Action}
}} }}
}; };

@ -1,7 +1,8 @@
using System; using System;
using GameServer.Arch; using BasicServer.Arch;
using BasicServer.Management;
namespace GameServer.Management { namespace BasicServer {
public static class ServerHandle { public static class ServerHandle {
public static void WelcomeReceived(int fromClientId, Packet packet) { public static void WelcomeReceived(int fromClientId, Packet packet) {

@ -1,7 +1,7 @@
using GameServer.Arch; using BasicServer.Arch;
using GameServer.PacketTypes; using BasicServer.PacketTypes;
using static GameServer.Arch.SendData; using static BasicServer.Arch.SendData;
using static GameServer.PacketTypes.ServerDefaultPacket; using static BasicServer.PacketTypes.ServerDefaultPacket;
namespace GameServer.Management { namespace GameServer.Management {
internal static class ServerSend { internal static class ServerSend {

@ -1,4 +1,4 @@
namespace GameServer.PacketTypes { namespace BasicServer.PacketTypes {
public enum ClientDefaultPacket { public enum ClientDefaultPacket {
DWelcomeReceived = 1, DWelcomeReceived = 1,
} }

@ -1,5 +1,5 @@
namespace GameServer.PacketTypes { namespace BasicServer.PacketTypes {
public enum ClientGamePacket { public enum ClientGamePacket {
Action,
} }
} }

@ -1,4 +1,4 @@
namespace GameServer.PacketTypes { namespace BasicServer.PacketTypes {
public enum ClientRoomPacket { public enum ClientRoomPacket {
RList = 1, RList = 1,
RCreate, RCreate,

@ -1,4 +1,4 @@
namespace GameServer.PacketTypes { namespace BasicServer.PacketTypes {
public enum PacketType { public enum PacketType {
Default = 1, Default = 1,
Room, Room,

@ -1,4 +1,4 @@
namespace GameServer.PacketTypes { namespace BasicServer.PacketTypes {
public enum ServerDefaultPacket { public enum ServerDefaultPacket {
DWelcome = 1, DWelcome = 1,
} }

@ -1,4 +1,4 @@
namespace GameServer.PacketTypes { namespace BasicServer.PacketTypes {
public enum ServerGamePacket { public enum ServerGamePacket {
} }

@ -1,4 +1,4 @@
namespace GameServer.PacketTypes { namespace BasicServer.PacketTypes {
public enum ServerRoomPacket { public enum ServerRoomPacket {
RList = 1, RList = 1,
RCreated, RCreated,

@ -1,19 +1,18 @@
using System; using System;
using System.Threading; using System.Threading;
using GameServer.Arch; using System.Threading.Tasks;
using GameServer.Management; using BasicServer.Arch;
namespace GameServer { namespace BasicServer {
internal static class Program { internal static class Program {
private static void Main() { private static void Main() {
Console.Title = "Game Server"; Console.Title = "Game Server";
Console.SetOut(new DatePrefix()); Console.SetOut(new DatePrefix());
Server.Start(50, 26950);
ThreadManager.IsRunning = true;
var mainThread = new Thread(ThreadManager.MainThread); var mainThread = new Thread(ThreadManager.MainThread);
mainThread.Start(); mainThread.Start();
ThreadManager.IsRunning = true;
} }
} }
} }

Loading…
Cancel
Save