Guest User

Notify clients of removed servers

a guest
Dec 24th, 2019
50
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
  1. From a842b28f5f703b14e9077eac21f1222f1ea61c2b Mon Sep 17 00:00:00 2001
  2. From: NegativeOne
  3. Date: Tue, 24 Dec 2019 17:50:12 +0100
  4. Subject: [PATCH] Notify game about closed servers
  5.  
  6. ---
  7. S2Library/Protocol/Payloads.cs |  6 +++---
  8.  S2Lobby/LobbyProcessor.cs      | 13 +++++++++++++
  9.  S2Lobby/Program.cs             | 29 +++++++++++++++++++++++------
  10.  3 files changed, 39 insertions(+), 9 deletions(-)
  11.  
  12. diff --git a/S2Library/Protocol/Payloads.cs b/S2Library/Protocol/Payloads.cs
  13. index 25f260a..a86d73a 100644
  14. --- a/S2Library/Protocol/Payloads.cs
  15. +++ b/S2Library/Protocol/Payloads.cs
  16. @@ -164,7 +164,7 @@ namespace S2Library.Protocol
  17.              UnknownType166 = 166,
  18.              UnknownType167 = 167,
  19.              RegisterServer = 168, // UnknownType168
  20. -            UnknownType169 = 169,
  21. +            UnlistServer = 169, // UnknownType169
  22.              ServerInfo = 170, // UnknownType170
  23.              GetServers = 171, // UnknownType171
  24.              StopServerUpdates = 172, // UnknownType172
  25. @@ -392,7 +392,7 @@ namespace S2Library.Protocol
  26.              PayloadTypes.Add(typeof(Payload166), Types.UnknownType166);
  27.              PayloadTypes.Add(typeof(Payload167), Types.UnknownType167);
  28.              PayloadTypes.Add(typeof(RegisterServer), Types.RegisterServer); // Payload168
  29. -            PayloadTypes.Add(typeof(Payload169), Types.UnknownType169);
  30. +            PayloadTypes.Add(typeof(UnlistServer), Types.UnlistServer); // Payload169
  31.              PayloadTypes.Add(typeof(ServerInfo), Types.ServerInfo); // Payload170
  32.              PayloadTypes.Add(typeof(GetServers), Types.GetServers); // Payload171
  33.              PayloadTypes.Add(typeof(StopServerUpdates), Types.StopServerUpdates); // Payload172
  34. @@ -4271,7 +4271,7 @@ namespace S2Library.Protocol
  35.  //    (**(code**)(* piVar1 + 8))("running",0xe);
  36.  //    (**(code**)(* piVar1 + 8))("ticket_id",8);
  37.  //    (**(code**)(* unaff_EDI + 4))(0xa9,piVar1);
  38. -    public class Payload169 : PayloadPrefix
  39. +    public class UnlistServer : PayloadPrefix // Payload169
  40.      {
  41.          public uint ServerId;
  42.          public bool Running;
  43. diff --git a/S2Lobby/LobbyProcessor.cs b/S2Lobby/LobbyProcessor.cs
  44. index dea2659..9126ab8 100644
  45. --- a/S2Lobby/LobbyProcessor.cs
  46. +++ b/S2Lobby/LobbyProcessor.cs
  47. @@ -23,6 +23,7 @@ namespace S2Lobby
  48.              if (_server != null)
  49.              {
  50.                  Program.Servers.Remove(_server.Id);
  51. +                NotifyUnlistServer(_server.Id, _server.Running);
  52.                  _server = null;
  53.              }
  54.          }
  55. @@ -526,5 +527,17 @@ namespace S2Lobby
  56.                  SendToLobbyConnection(server.Key, serverInfo);
  57.              }
  58.          }
  59. +
  60. +        private void NotifyUnlistServer(uint serverId, bool running)
  61. +        {
  62. +            UnlistServer unlistInfo = Payloads.CreatePayload<UnlistServer>();
  63. +            unlistInfo.ServerId = serverId;
  64. +            unlistInfo.Running = running;
  65. +            KeyValuePair<uint, uint>[] servers = ServerUpdateReceivers.ToArray();
  66. +            foreach (KeyValuePair<uint, uint> server in servers)
  67. +            {
  68. +                SendToLobbyConnection(server.Key, unlistInfo);
  69. +            }
  70. +        }
  71.      }
  72.  }
  73. diff --git a/S2Lobby/Program.cs b/S2Lobby/Program.cs
  74. index 4930b3e..f42a192 100644
  75. --- a/S2Lobby/Program.cs
  76. +++ b/S2Lobby/Program.cs
  77. @@ -13,8 +13,8 @@ namespace S2Lobby
  78.              new Program().Run();
  79.          }
  80.  
  81. -        private const uint LobbyPort = 6800;
  82. -        public const uint ChatPort = 6801;
  83. +        private uint LobbyPort { get; set; } = 6800;
  84. +        public uint ChatPort { get; private set; } = 6801;
  85.  
  86.          public string Ip { get; private set; } = "127.0.0.1";
  87.  
  88. @@ -46,6 +46,23 @@ namespace S2Lobby
  89.                  {
  90.                      Ip = lines[0];
  91.                  }
  92. +                if (lines.Length > 1)
  93. +                {
  94. +                    uint port;
  95. +                    if (UInt32.TryParse(lines[1], out port))
  96. +                    {
  97. +                        LobbyPort = port;
  98. +                        ChatPort = port + 1;
  99. +                    }
  100. +                }
  101. +                if (lines.Length > 2)
  102. +                {
  103. +                    uint port;
  104. +                    if (UInt32.TryParse(lines[2], out port))
  105. +                    {
  106. +                        ChatPort = port;
  107. +                    }
  108. +                }
  109.              }
  110.  
  111.              lock (_sync)
  112. @@ -183,9 +200,9 @@ namespace S2Lobby
  113.                  NetworkProcessor incomingLobbyProcessor;
  114.                  if (!_incomingLobbyProcessors.TryRemove(args.Conn.Id, out incomingLobbyProcessor))
  115.                  {
  116. -                    incomingLobbyProcessor.Close();
  117.                      Log($" Can't remove from incoming lobby processors: {args.Conn.Id}");
  118.                  }
  119. +                incomingLobbyProcessor.Close();
  120.  
  121.                  ConcurrentQueue<byte[]> outgoingLobbyQueue;
  122.                  if (!_outgoingLobbyQueues.TryRemove(args.Conn.Id, out outgoingLobbyQueue))
  123. @@ -210,9 +227,9 @@ namespace S2Lobby
  124.                  NetworkProcessor incomingChatProcessor;
  125.                  if (!_incomingChatProcessors.TryRemove(args.Conn.Id, out incomingChatProcessor))
  126.                  {
  127. -                    incomingChatProcessor.Close();
  128.                      Log($" Can't remove from incoming chat processors: {args.Conn.Id}");
  129.                  }
  130. +                incomingChatProcessor.Close();
  131.  
  132.                  ConcurrentQueue<byte[]> outgoingChatQueue;
  133.                  if (!_outgoingChatQueues.TryRemove(args.Conn.Id, out outgoingChatQueue))
  134. @@ -237,9 +254,9 @@ namespace S2Lobby
  135.                  NetworkProcessor incomingLobbyProcessor;
  136.                  if (!_incomingLobbyProcessors.TryRemove(args.Conn.Id, out incomingLobbyProcessor))
  137.                  {
  138. -                    incomingLobbyProcessor.Close();
  139.                      Log($" Can't remove from incoming lobby processors: {args.Conn.Id}");
  140.                  }
  141. +                incomingLobbyProcessor.Close();
  142.  
  143.                  ConcurrentQueue<byte[]> outgoingLobbyQueue;
  144.                  if (!_outgoingLobbyQueues.TryRemove(args.Conn.Id, out outgoingLobbyQueue))
  145. @@ -264,9 +281,9 @@ namespace S2Lobby
  146.                  NetworkProcessor incomingChatProcessor;
  147.                  if (!_incomingChatProcessors.TryRemove(args.Conn.Id, out incomingChatProcessor))
  148.                  {
  149. -                    incomingChatProcessor.Close();
  150.                      Log($" Can't remove from incoming chat processors: {args.Conn.Id}");
  151.                  }
  152. +                incomingChatProcessor.Close();
  153.  
  154.                  ConcurrentQueue<byte[]> outgoingChatQueue;
  155.                  if (!_outgoingChatQueues.TryRemove(args.Conn.Id, out outgoingChatQueue))
  156. --
RAW Paste Data