thomasfn

Just wut

Apr 16th, 2015
442
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C# 4.20 KB | None | 0 0
  1. private void Worker()
  2. {
  3.     // Keep consuming
  4.     Signal signal;
  5.     while ((signal = commandstream.Consume()) != Signal.Exit)
  6.     {
  7.         AutoResetEvent waitevent = new AutoResetEvent(false);
  8.         bool connected = false;
  9.  
  10.         // Check if we're registered
  11.         if (signal == Signal.Update || signal == Signal.Remove)
  12.         {
  13.             lock (syncroot)
  14.             {
  15.                 if (!registered)
  16.                 {
  17.                     if (signal == Signal.Update)
  18.                         signal = Signal.Register;
  19.                     else
  20.                         continue;
  21.                 }
  22.             }
  23.         }
  24.  
  25.         // Attempt to connect
  26.         MasterServerClient client = new MasterServerClient(endpoint);
  27.         MasterServerConnection connection = null;
  28.         client.OnConnected += (sender, conn) =>
  29.             {
  30.                 // We connected, so we need to move on to signal acting
  31.                 connected = true;
  32.                 connection = conn as MasterServerConnection;
  33.                 waitevent.Set();
  34.             };
  35.         client.OnConnectFailed += (sender, reason) =>
  36.             {
  37.                 // We didn't connect, so we need to move on a disconnect
  38.                 connected = false;
  39.                 waitevent.Set();
  40.             };
  41.         client.OnLogMessage += client_OnLogMessage;
  42.         client.Connect();
  43.         while (!waitevent.WaitOne(20)) client.Update();
  44.         if (!connected)
  45.         {
  46.             // Connection failed, just move on to the next signal
  47.             continue;
  48.         }
  49.  
  50.         // Hook connection lost event
  51.         connection.OnDisconnected += (sender) =>
  52.             {
  53.                 connected = false;
  54.                 waitevent.Set();
  55.             };
  56.        
  57.         // Act on signal
  58.         ServerInfo myinfo;
  59.         switch (signal)
  60.         {
  61.             case Signal.Register:
  62.                 myinfo = GameServerRoot.Instance.MyInfo;
  63.                 connection.RegisterGameServer(myinfo.Hostname, myinfo.Game, myinfo.Tags, myinfo.Port, myinfo.PlayerCount, myinfo.MaxPlayerCount,
  64.                     (sender, data) =>
  65.                     {
  66.                         var response = data as MasterServerGameServerRegistered;
  67.                         if (response.Success)
  68.                         {
  69.                             lock (syncroot)
  70.                             {
  71.                                 token = response.Token;
  72.                                 registered = true;
  73.                                 WriteLog("Successfully registered game server with master server (token: {0})", token);
  74.                             }
  75.                         }
  76.                         else
  77.                         {
  78.                             lock (syncroot)
  79.                             {
  80.                                 token = 0;
  81.                                 registered = false;
  82.                                 WriteLog("Failed to register game server with master server (master server rejected request)");
  83.                             }
  84.                         }
  85.                         waitevent.Set();
  86.                     });
  87.                 while (!waitevent.WaitOne(20))
  88.                 {
  89.                     client.Update();
  90.                     if (!connected)
  91.                     {
  92.                         WriteLog("Failed to register game server with master server (connection to master server was lost)");
  93.                         break;
  94.                     }
  95.                 }
  96.                 break;
  97.             case Signal.Update:
  98.             case Signal.UpdateFallback:
  99.                 myinfo = GameServerRoot.Instance.MyInfo;
  100.                 connection.UpdateGameServer(token, myinfo.PlayerCount,
  101.                     (sender, data) =>
  102.                     {
  103.                         var response = data as MasterServerGameServerUpdated;
  104.                         if (response.Success)
  105.                             WriteLog("Successfully updated game server record on master server", token);
  106.                         else
  107.                         {
  108.                             lock (syncroot)
  109.                             {
  110.                                 token = 0;
  111.                                 registered = false;
  112.                                 WriteLog("Failed to update game server record with master server (master server rejected request)");
  113.                             }
  114.                             if (signal != Signal.UpdateFallback)
  115.                                 Register();
  116.                         }
  117.                         waitevent.Set();
  118.                     });
  119.                 while (!waitevent.WaitOne(20))
  120.                 {
  121.                     client.Update();
  122.                     if (!connected)
  123.                     {
  124.                         WriteLog("Failed to update game server on master server (connection to master server was lost)");
  125.                         break;
  126.                     }
  127.                 }
  128.                 break;
  129.             case Signal.Remove:
  130.                 connection.RemoveGameServer(token,
  131.                     (sender, data) =>
  132.                     {
  133.                         lock (syncroot)
  134.                         {
  135.                             token = 0;
  136.                             registered = false;
  137.                         }
  138.                         var response = data as MasterServerGameServerRemoved;
  139.                         if (response.Success)
  140.                             WriteLog("Successfully removed game server record from master server", token);
  141.                         else
  142.                             WriteLog("Failed to remove game server record from master server (master server rejected request)");
  143.                         waitevent.Set();
  144.                     });
  145.                 while (!waitevent.WaitOne(20))
  146.                 {
  147.                     client.Update();
  148.                     if (!connected)
  149.                     {
  150.                         WriteLog("Failed to remove game server from master server (connection to master server was lost)");
  151.                         break;
  152.                     }
  153.                 }
  154.                 break;
  155.         }
  156.  
  157.         // Disconnect
  158.         if (connected) connection.Disconnect();
  159.         client.Update();
  160.     }
  161.     exitevent.Set();
  162. }
Advertisement
Add Comment
Please, Sign In to add comment