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. 13
      Program.cs

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

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

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

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

@ -1,10 +1,10 @@
using System;
using System.Collections.Generic;
using System.Linq;
using System.Threading;
using GameServer.Management;
using BasicServer.Game;
using BasicServer.Management;
namespace GameServer.Arch {
namespace BasicServer.Arch {
internal static class ThreadManager {
private static readonly List<Action> ToExecuteOnMainThread = new();
@ -46,6 +46,8 @@ namespace GameServer.Arch {
public static void MainThread() {
Console.WriteLine($"Main thread started. Running at {Constants.TicksPerSec} ticks per second.");
var nextLoop = DateTime.Now;
Server.Start(50, 26950);
while (IsRunning)
while (nextLoop < DateTime.Now) {
@ -59,8 +61,8 @@ namespace GameServer.Arch {
}
private static void Tick() {
foreach (var room in Server.Rooms.Values.Where(room => room.Game != null && room.Game.IsRunning)) {
room.Game.Update();
foreach (var room in Server.Rooms.Values) {
room.Game?.Update();
}
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 GameServer.Management;
using BasicServer.Management;
namespace GameServer.Game {
namespace BasicServer.Game {
public class GameManager {
public bool IsRunning { get; set; }
private Room Room { get; }
private Dictionary<int, Player> Players { get; } = new();
private bool IsStarted { get; set; }
public GameManager(Room room) {
Room = room;
foreach (var client in room.Clients) {
Players.Add(client.Id, new Player(client.Id, client.Name));
}
}
public void Start() {
foreach (var player in Players.Values) {
player.Start();
}
IsStarted = true;
}
public void Update() {
foreach (var player in Players.Values) {
player.Update();
}
if (!IsStarted)
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 int Id { get; }

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

Loading…
Cancel
Save