Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- private void Worker()
- {
- // Keep consuming
- Signal signal;
- while ((signal = commandstream.Consume()) != Signal.Exit)
- {
- AutoResetEvent waitevent = new AutoResetEvent(false);
- bool connected = false;
- // Check if we're registered
- if (signal == Signal.Update || signal == Signal.Remove)
- {
- lock (syncroot)
- {
- if (!registered)
- {
- if (signal == Signal.Update)
- signal = Signal.Register;
- else
- continue;
- }
- }
- }
- // Attempt to connect
- MasterServerClient client = new MasterServerClient(endpoint);
- MasterServerConnection connection = null;
- client.OnConnected += (sender, conn) =>
- {
- // We connected, so we need to move on to signal acting
- connected = true;
- connection = conn as MasterServerConnection;
- waitevent.Set();
- };
- client.OnConnectFailed += (sender, reason) =>
- {
- // We didn't connect, so we need to move on a disconnect
- connected = false;
- waitevent.Set();
- };
- client.OnLogMessage += client_OnLogMessage;
- client.Connect();
- while (!waitevent.WaitOne(20)) client.Update();
- if (!connected)
- {
- // Connection failed, just move on to the next signal
- continue;
- }
- // Hook connection lost event
- connection.OnDisconnected += (sender) =>
- {
- connected = false;
- waitevent.Set();
- };
- // Act on signal
- ServerInfo myinfo;
- switch (signal)
- {
- case Signal.Register:
- myinfo = GameServerRoot.Instance.MyInfo;
- connection.RegisterGameServer(myinfo.Hostname, myinfo.Game, myinfo.Tags, myinfo.Port, myinfo.PlayerCount, myinfo.MaxPlayerCount,
- (sender, data) =>
- {
- var response = data as MasterServerGameServerRegistered;
- if (response.Success)
- {
- lock (syncroot)
- {
- token = response.Token;
- registered = true;
- WriteLog("Successfully registered game server with master server (token: {0})", token);
- }
- }
- else
- {
- lock (syncroot)
- {
- token = 0;
- registered = false;
- WriteLog("Failed to register game server with master server (master server rejected request)");
- }
- }
- waitevent.Set();
- });
- while (!waitevent.WaitOne(20))
- {
- client.Update();
- if (!connected)
- {
- WriteLog("Failed to register game server with master server (connection to master server was lost)");
- break;
- }
- }
- break;
- case Signal.Update:
- case Signal.UpdateFallback:
- myinfo = GameServerRoot.Instance.MyInfo;
- connection.UpdateGameServer(token, myinfo.PlayerCount,
- (sender, data) =>
- {
- var response = data as MasterServerGameServerUpdated;
- if (response.Success)
- WriteLog("Successfully updated game server record on master server", token);
- else
- {
- lock (syncroot)
- {
- token = 0;
- registered = false;
- WriteLog("Failed to update game server record with master server (master server rejected request)");
- }
- if (signal != Signal.UpdateFallback)
- Register();
- }
- waitevent.Set();
- });
- while (!waitevent.WaitOne(20))
- {
- client.Update();
- if (!connected)
- {
- WriteLog("Failed to update game server on master server (connection to master server was lost)");
- break;
- }
- }
- break;
- case Signal.Remove:
- connection.RemoveGameServer(token,
- (sender, data) =>
- {
- lock (syncroot)
- {
- token = 0;
- registered = false;
- }
- var response = data as MasterServerGameServerRemoved;
- if (response.Success)
- WriteLog("Successfully removed game server record from master server", token);
- else
- WriteLog("Failed to remove game server record from master server (master server rejected request)");
- waitevent.Set();
- });
- while (!waitevent.WaitOne(20))
- {
- client.Update();
- if (!connected)
- {
- WriteLog("Failed to remove game server from master server (connection to master server was lost)");
- break;
- }
- }
- break;
- }
- // Disconnect
- if (connected) connection.Disconnect();
- client.Update();
- }
- exitevent.Set();
- }
Advertisement
Add Comment
Please, Sign In to add comment