diff --git a/src/CommandHandlers/GauntletHandlers.cs b/src/CommandHandlers/GauntletHandlers.cs index 7c4ea9a..d337159 100644 --- a/src/CommandHandlers/GauntletHandlers.cs +++ b/src/CommandHandlers/GauntletHandlers.cs @@ -30,7 +30,7 @@ class GauntletJoinRoomHandler : ICommandHandler class GauntletPlayAgainHandler : ICommandHandler { public void Handle(Client client, NetworkObject receivedObject) { - GauntletRoom room = client.Room as GauntletRoom; + GauntletRoom room = (client.Room as GauntletRoom)!; room.SetPlayerReady(client, false); NetworkPacket packet = Utils.ArrNetworkPacket(new string[] { @@ -52,7 +52,7 @@ class GauntletPlayAgainHandler : ICommandHandler class GauntletLobbyUserReadyHandler : ICommandHandler { public void Handle(Client client, NetworkObject receivedObject) { - GauntletRoom room = client.Room as GauntletRoom; + GauntletRoom room = (client.Room as GauntletRoom)!; room.SetPlayerReady(client); NetworkPacket packet = Utils.ArrNetworkPacket(new string[] { @@ -84,7 +84,7 @@ class GauntletLobbyUserReadyHandler : ICommandHandler class GauntletLobbyUserNotReadyHandler : ICommandHandler { public void Handle(Client client, NetworkObject receivedObject) { - GauntletRoom room = client.Room as GauntletRoom; + GauntletRoom room = (client.Room as GauntletRoom)!; room.SetPlayerReady(client, false); NetworkPacket packet = Utils.ArrNetworkPacket(new string[] { @@ -104,7 +104,7 @@ class GauntletLobbyUserNotReadyHandler : ICommandHandler class GauntletLevelLoadHandler : ICommandHandler { public void Handle(Client client, NetworkObject receivedObject) { // {"a":13,"c":1,"p":{"c":"gs.GLL","p":{"0":"0","1":"0","2":"5","en":"GauntletGameExtension"},"r":365587}} - GauntletRoom room = client.Room as GauntletRoom; + GauntletRoom room = (client.Room as GauntletRoom)!; NetworkObject p = receivedObject.Get("p"); NetworkPacket packet = Utils.ArrNetworkPacket(new string[] { @@ -125,12 +125,12 @@ class GauntletLevelLoadHandler : ICommandHandler [ExtensionCommandHandler("gs.GLLD")] class GauntletLevelLoadedHandler : ICommandHandler { - private System.Timers.Timer timer = null; + private System.Timers.Timer? timer = null; private int counter; private GauntletRoom room; public void Handle(Client client, NetworkObject receivedObject) { - room = client.Room as GauntletRoom; + room = (client.Room as GauntletRoom)!; counter = 5; // {"a":13,"c":1,"p":{"c":"msg","p":{"arr":["GCDS","365587","4"]},"r":365587}} @@ -149,7 +149,7 @@ class GauntletLevelLoadedHandler : ICommandHandler timer.Elapsed += OnTick; } - private void OnTick(Object source, ElapsedEventArgs e) { + private void OnTick(Object? source, ElapsedEventArgs e) { NetworkPacket packet; if (--counter > 0) { // {"a":13,"c":1,"p":{"c":"msg","p":{"arr":["GCDS","365587","4"]},"r":365587}} @@ -165,8 +165,8 @@ class GauntletLevelLoadedHandler : ICommandHandler room.Id.ToString() }, "msg", room.Id); - timer.Stop(); - timer.Close(); + timer!.Stop(); + timer!.Close(); timer = null; } foreach (var roomClient in room.Clients) { @@ -181,7 +181,7 @@ class GauntletRelayGameDataHandler : ICommandHandler { public void Handle(Client client, NetworkObject receivedObject) // {"a":13,"c":1,"p":{"c":"gs.RGD","p":{"0":"2700","1":"78","en":"GauntletGameExtension"},"r":4}} { - GauntletRoom room = client.Room as GauntletRoom; + GauntletRoom room = (client.Room as GauntletRoom)!; NetworkObject p = receivedObject.Get("p"); // {"a":13,"c":1,"p":{"c":"msg","p":{"arr":["RGD","365587","150","75"]},"r":365587}} @@ -204,7 +204,7 @@ class GauntletGameCompleteHandler : ICommandHandler { public void Handle(Client client, NetworkObject receivedObject) // {"a":13,"c":1,"p":{"c":"gs.GC","p":{"0":"1550","1":"84","en":"GauntletGameExtension"},"r":4}} { - GauntletRoom room = client.Room as GauntletRoom; + GauntletRoom room = (client.Room as GauntletRoom)!; NetworkObject p = receivedObject.Get("p"); room.ProcessResult(client, p.Get("0"), p.Get("1")); diff --git a/src/CommandHandlers/RacingHandlers.cs b/src/CommandHandlers/RacingHandlers.cs index 0c31a57..b1a2da4 100644 --- a/src/CommandHandlers/RacingHandlers.cs +++ b/src/CommandHandlers/RacingHandlers.cs @@ -18,7 +18,7 @@ class RacingPlayerReadyHandler : ICommandHandler // so server do not need generate this packet if (client.Room.Group == "RacingDragon") { - RacingRoom room = client.Room as RacingRoom; + RacingRoom room = (client.Room as RacingRoom)!; room.SetPlayerState(client, ready); Console.WriteLine($"IMR Lobby: {client.ClientID} {ready}"); room.TryLoad(); @@ -44,7 +44,7 @@ class RacingPlayerStatusHandler : ICommandHandler class RacingUACKHandler : ICommandHandler { public void Handle(Client client, NetworkObject receivedObject) { - RacingRoom room = client.Room as RacingRoom; + RacingRoom room = (client.Room as RacingRoom)!; room.SetPlayerState(client, RacingPlayerState.RaceReady1); } } @@ -54,7 +54,7 @@ class RacingUACKHandler : ICommandHandler class RacingARACKHandler : ICommandHandler { public void Handle(Client client, NetworkObject receivedObject) { - RacingRoom room = client.Room as RacingRoom; + RacingRoom room = (client.Room as RacingRoom)!; room.SetPlayerState(client, RacingPlayerState.RaceReady2); if (room.GetPlayersCount(RacingPlayerState.RaceReady2) == room.ClientsCount) { @@ -71,7 +71,7 @@ class RacingARACKHandler : ICommandHandler class RacingARHandler : ICommandHandler { public void Handle(Client client, NetworkObject receivedObject) { // {"a":13,"c":1,"p":{"c":"dr.AR","p":{"CT":"112.1268","FD":"3008.283","LC":"3","UN":"scourgexxwulf","en":""},"r":412467}} - RacingRoom room = client.Room as RacingRoom; + RacingRoom room = (client.Room as RacingRoom)!; NetworkObject p = receivedObject.Get("p"); room.SetResults(client, p.Get("UN"), p.Get("CT"), p.Get("LC")); diff --git a/src/Core/GauntletRoom.cs b/src/Core/GauntletRoom.cs index de62ff9..800e989 100644 --- a/src/Core/GauntletRoom.cs +++ b/src/Core/GauntletRoom.cs @@ -3,34 +3,38 @@ using sodoffmmo.Data; namespace sodoffmmo.Core; public class GauntletRoom : Room { - static GauntletRoom NextRoom = null; + static GauntletRoom? NextRoom = null; public static GauntletRoom Get() { if (NextRoom != null && NextRoom.ClientsCount == 1) { - var ret = NextRoom; + var ret = NextRoom!; NextRoom = null; return ret; } else { NextRoom = new GauntletRoom(); - return NextRoom; + return NextRoom!; } } - public GauntletRoom(string name = null) : base (name, "GauntletDO", true) { + public GauntletRoom() : base (null, "GauntletDO", true) { base.RoomVariables.Add(NetworkArray.VlElement("IS_RACE_ROOM", true)); } class Status { public string uid; public bool isReady = false; - public string resultA = null; - public string resultB = null; + public string resultA = ""; + public string resultB = ""; + + public Status(string uid) { + this.uid = uid; + } } private Dictionary players = new(); public void AddPlayer(Client client) { - players[client] = new Status { uid = client.PlayerData.Uid }; + players[client] = new Status(client.PlayerData.Uid); } public void SetPlayerReady(Client client, bool status = true) { @@ -51,7 +55,6 @@ public class GauntletRoom : Room { info.Add("UJR"); // User Joined Room info.Add(base.Id.ToString()); info.Add("2"); - int i = 0; foreach(var player in players) { info.Add(player.Value.uid); info.Add(player.Value.isReady.ToString()); @@ -70,7 +73,6 @@ public class GauntletRoom : Room { info.Add("PA"); // Play Again info.Add(base.Id.ToString()); info.Add("1"); - int i = 0; foreach(var player in players) { info.Add(player.Value.uid); info.Add(player.Value.isReady.ToString()); @@ -88,7 +90,7 @@ public class GauntletRoom : Room { int count = 0; foreach(var player in players) { - if (player.Value.resultA != null) ++count; + if (player.Value.resultB != "") ++count; } if (count != 2) return false; @@ -98,7 +100,7 @@ public class GauntletRoom : Room { info.Add("GC"); info.Add(base.Id.ToString()); foreach(var player in players) { - if (player.Value.resultA is null) + if (player.Value.resultB == "") continue; info.Add(player.Value.uid); info.Add(player.Value.resultA); @@ -117,7 +119,7 @@ public class GauntletRoom : Room { static object joinLock = new object(); - static public void Join(Client client, GauntletRoom room = null) { + static public void Join(Client client, GauntletRoom? room = null) { lock(joinLock) { if (room is null) room = GauntletRoom.Get(); diff --git a/src/Core/Racing.cs b/src/Core/Racing.cs index ff370fa..3f76902 100644 --- a/src/Core/Racing.cs +++ b/src/Core/Racing.cs @@ -19,12 +19,8 @@ public class RacingRoom : Room { return new RacingRoom(); } - public RacingRoom(string name = null, int? trackId = null) : base (name, "RacingDragon", true) { - if (trackId is null) { - TID = random.Next(105); - } else { - TID = (int)trackId; - } + public RacingRoom() : base (null, "RacingDragon", true) { + TID = random.Next(105); players = new(); results = new(); @@ -66,6 +62,12 @@ public class RacingRoom : Room { public string userName; public string time; public string laps; + + public Result(string userName, string time, string laps) { + this.userName = userName; + this.time = time; + this.laps = laps; + } } SortedDictionary results; @@ -75,11 +77,7 @@ public class RacingRoom : Room { while (results.ContainsKey(timef)) timef += 0.000001f; - results.Add(timef, new Result { - userName = userName, - time = time, - laps = laps - }); + results.Add(timef, new Result(userName, time, laps)); } public void SendResults() { @@ -104,7 +102,7 @@ public class RacingRoom : Room { // start and countdown - System.Timers.Timer timer; + System.Timers.Timer? timer = null; int counter; private void SetTimer(double timeout, System.Timers.ElapsedEventHandler callback, bool AutoReset = false) { @@ -124,7 +122,7 @@ public class RacingRoom : Room { SetTimer(0.2, SendJoin); } - private void SendJoin(Object source, ElapsedEventArgs e) { + private void SendJoin(Object? source, ElapsedEventArgs e) { foreach(var player in players) { Console.WriteLine($"Join Racing Room: {Name} RoomID: {Id} IID: {player.Key.ClientID}"); player.Key.JoinRoom(this); @@ -132,7 +130,7 @@ public class RacingRoom : Room { SetTimer(1, CountDown, true); } - private void CountDown(Object source, ElapsedEventArgs e) { + private void CountDown(Object? source, ElapsedEventArgs e) { if (!TryLoad()) { if (counter == 0) { Load(); @@ -160,8 +158,8 @@ public class RacingRoom : Room { } public void Load() { - timer.Stop(); - timer.Close(); + timer!.Stop(); + timer!.Close(); // {"a":13,"c":1,"p":{"c":"","p":{"arr":["RA","","ST"]},"r":412467}} NetworkPacket packet = Utils.ArrNetworkPacket(new string[] { @@ -216,6 +214,9 @@ public class RacingLobby { class Status { public string uid; public RacingPlayerState state = RacingPlayerState.NotReady; + public Status (string uid) { + this.uid = uid; + } } static object lobbyLock = new object(); @@ -225,7 +226,7 @@ public class RacingLobby { public static void SetPlayerState(Client client, RacingPlayerState state) { lock (lobbyLock) { if (!lobbyPlayers.ContainsKey(client)) { - lobbyPlayers[client] = new Status { uid = client.PlayerData.Uid }; + lobbyPlayers[client] = new Status(client.PlayerData.Uid); } lobbyPlayers[client].state = state; } diff --git a/src/Core/Room.cs b/src/Core/Room.cs index 7fc3c40..c44dd89 100644 --- a/src/Core/Room.cs +++ b/src/Core/Room.cs @@ -16,15 +16,15 @@ public class Room { public bool IsRemoved { get; private set; } = false; public NetworkArray RoomVariables = new(); - public Room(string name, string group = null, bool autoRemove = false) { + public Room(string? name, string? group = null, bool autoRemove = false) { Id = ++MaxId; if (name is null) { - Name = group + "_" + MaxId; + Name = group! + "_" + MaxId; } else { Name = name; } if (group is null) { - Group = name; + Group = name!; } else { Group = group; } diff --git a/src/Core/WorldEvent.cs b/src/Core/WorldEvent.cs index 603ea1a..264f1bb 100644 --- a/src/Core/WorldEvent.cs +++ b/src/Core/WorldEvent.cs @@ -9,10 +9,10 @@ class WorldEvent { End, NotActive } - private static WorldEvent _instance = null; + private static WorldEvent? _instance = null; private object EventLock = new object(); private Random random = new Random(); - private System.Timers.Timer timer = null; + private System.Timers.Timer? timer = null; public static WorldEvent Get() { if (_instance == null) { @@ -24,6 +24,7 @@ class WorldEvent { private WorldEvent() { startTime = DateTime.UtcNow.AddMinutes(-60); startTimeString = startTime.ToString("MM/dd/yyyy HH:mm:ss"); + room = Room.GetOrAdd("HubTrainingDO"); uid = "sodoff"; state = State.End; ScheduleEvent(Configuration.ServerConfiguration.FirstEventTimer); // WE_ != WEN_ @@ -32,7 +33,7 @@ class WorldEvent { // controlled (init/reset) by Reset() private Room room; private string uid; - private Client operatorAI; + private Client? operatorAI; private State state; private DateTime startTime; @@ -51,7 +52,6 @@ class WorldEvent { // reset event - set new id, start time, end time, etc private void Reset(DateTime newStartTime) { lock (EventLock) { - room = Room.GetOrAdd("HubTrainingDO"); uid = Path.GetRandomFileName().Substring(0, 8); // this is used as RandomSeed for random select ship variant operatorAI = null; state = State.NotActive; @@ -87,7 +87,7 @@ class WorldEvent { } // reset event and set timer to call PreEndEvent, send new WE_ info - private void PreInit(Object source, ElapsedEventArgs e) { + private void PreInit(Object? source, ElapsedEventArgs e) { Reset(nextStartTime); // WE_ == WEN_ AnnounceEvent(); } @@ -114,7 +114,7 @@ class WorldEvent { } } - private void PreEndEvent(Object source, ElapsedEventArgs e) { + private void PreEndEvent(Object? source, ElapsedEventArgs e) { Console.WriteLine($"Event {uid} force end from timer"); EndEvent(true); } @@ -152,7 +152,7 @@ class WorldEvent { } // send reward info - private void PostEndEvent1(Object source, ElapsedEventArgs e) { + private void PostEndEvent1(Object? source, ElapsedEventArgs e) { NetworkPacket packet = Utils.VlNetworkPacket( "WE_ScoutAttack_End", lastResults, @@ -179,7 +179,7 @@ class WorldEvent { } // schedule next event, set timer to call PreInit() and send new WEN_ info - private void PostEndEvent2(Object source, ElapsedEventArgs e) { + private void PostEndEvent2(Object? source, ElapsedEventArgs e) { ScheduleEvent(); // WE_ != WEN_ AnnounceEvent(false, true); // send only WEN_ (WE_ should stay unchanged ... as WE_..._End) } diff --git a/src/Data/NetworkArray.cs b/src/Data/NetworkArray.cs index abc0b11..89d7252 100644 --- a/src/Data/NetworkArray.cs +++ b/src/Data/NetworkArray.cs @@ -103,7 +103,7 @@ public class NetworkArray { } public class NullClass {}; - public static NullClass NULL; + public static NullClass NULL = new (); public void AddWithType(T value) { if (typeof(T) == typeof(NullClass)) @@ -120,7 +120,7 @@ public class NetworkArray { throw new Exception("Unsupported type"); } - private void AddWithTypeObject(NetworkDataType dataType, byte typeId, object obj) { + private void AddWithTypeObject(NetworkDataType dataType, byte typeId, object? obj) { Add(new DataWrapper(NetworkDataType.Byte,typeId)); Add(new DataWrapper(dataType, obj)); }