private void SQLConnect(ReportingMessage reportMessage, TrackingObject trackingObject) { string initSqlQuery = "CALL gameserverinit(@serverhash, @namex, @descriptionx, @gameportx, @gameaddressx, @protocolx, @programversion, @maxplayersx, @modcontrolx, @modcontrolshax, @gamemodex, @cheatsx, @warpmodex, @universex, @bannerx, @homepagex, @httpportx, @adminx, @teamx, @locationx, @fixedipx);"; Dictionary <string, object> parameters = reportMessage.GetParameters(); try { databaseConnection.ExecuteNonReader(initSqlQuery, parameters); } catch (Exception e) { Console.WriteLine("WARNING: Ignoring error on connection (add server), error: " + e.Message); } string playerSqlQuery = "CALL gameserverplayer(@hash, @player, '1')"; foreach (string connectedPlayer in reportMessage.players) { Console.WriteLine("Player " + connectedPlayer + " joined " + reportMessage.serverHash); Dictionary <string, object> playerParams = new Dictionary <string, object>(); playerParams["@hash"] = reportMessage.serverHash; playerParams["@player"] = connectedPlayer; try { databaseConnection.ExecuteNonReader(playerSqlQuery, playerParams); } catch (Exception e) { Console.WriteLine("WARNING: Ignoring error on connection (add player), error: " + e.Message); } trackingObject.players = reportMessage.players; } }
public static ReportingMessage FromBytesBE(byte[] inputBytes) { ReportingMessage returnMessage = new ReportingMessage(); using (MessageStream2.MessageReader mr = new MessageStream2.MessageReader(inputBytes)) { returnMessage.serverHash = mr.Read <string>(); returnMessage.serverName = mr.Read <string>(); returnMessage.description = mr.Read <string>(); returnMessage.gamePort = mr.Read <int>(); returnMessage.gameAddress = mr.Read <string>(); returnMessage.protocolVersion = mr.Read <int>(); returnMessage.programVersion = mr.Read <string>(); returnMessage.maxPlayers = mr.Read <int>(); returnMessage.modControl = mr.Read <int>(); returnMessage.modControlSha = mr.Read <string>(); returnMessage.gameMode = mr.Read <int>(); returnMessage.cheats = mr.Read <bool>(); returnMessage.warpMode = mr.Read <int>(); returnMessage.universeSize = mr.Read <long>(); returnMessage.banner = mr.Read <string>(); returnMessage.homepage = mr.Read <string>(); returnMessage.httpPort = mr.Read <int>(); returnMessage.admin = mr.Read <string>(); returnMessage.team = mr.Read <string>(); returnMessage.location = mr.Read <string>(); returnMessage.fixedIP = mr.Read <bool>(); returnMessage.players = mr.Read <string[]>(); } return(returnMessage); }
private void SQLReport(ReportingMessage reportMessage, TrackingObject trackingObject) { //Take all the currently connected players and remove the players that were connected already to generate a list of players to be added List <string> addList = new List <string>(reportMessage.players); foreach (string player in trackingObject.players) { if (addList.Contains(player)) { addList.Remove(player); } } //Take all the old players connected and remove the players that are connected already to generate a list of players to be removed List <string> removeList = new List <string>(trackingObject.players); foreach (string player in reportMessage.players) { if (removeList.Contains(player)) { removeList.Remove(player); } } //Add new players foreach (string player in addList) { Console.WriteLine("Player " + player + " joined " + reportMessage.serverHash); Dictionary <string, object> playerParams = new Dictionary <string, object>(); playerParams["hash"] = reportMessage.serverHash; playerParams["player"] = player; string sqlQuery = "CALL gameserverplayer(@hash ,@player, '1')"; try { databaseConnection.ExecuteNonReader(sqlQuery, playerParams); } catch (Exception e) { Console.WriteLine("WARNING: Ignoring error on report (add player), error: " + e.Message); } } //Remove old players foreach (string player in removeList) { Console.WriteLine("Player " + player + " left " + reportMessage.serverHash); Dictionary <string, object> playerParams = new Dictionary <string, object>(); playerParams["hash"] = reportMessage.serverHash; playerParams["player"] = player; string sqlQuery = "CALL gameserverplayer(@hash ,@player, '0')"; try { databaseConnection.ExecuteNonReader(sqlQuery, playerParams); } catch (Exception e) { Console.WriteLine("WARNING: Ignoring error on report (remove player), error: " + e.Message); } } trackingObject.players = reportMessage.players; }
public void HandleReport(string serverID, int clientID, ReportingMessage reportMessage) { ReferenceID thisReference = new ReferenceID(serverID, clientID); int trackNumber = trackID[thisReference]; lock (connectedClients) { connectedClients[thisReference] = reportMessage; } SQLReport(trackNumber, reportMessage); }
private void HandleReport(NetworkClient <object> client, byte[] data) { using (MessageReader mr = new MessageReader(data)) { string serverID = mr.Read <string>(); int clientID = mr.Read <int>(); byte[] reportBytes = mr.Read <byte[]>(); ReportingMessage reportMessage = ReportingMessage.FromBytesBE(reportBytes); databaseDriver.HandleReport(serverID, clientID, reportMessage); Console.WriteLine("Server " + serverID + ":" + clientID + " reported new state"); } }
private void SQLReport(int trackNumber, ReportingMessage reportMessage) { Dictionary <string, object> parameters = reportMessage.GetParameters(trackNumber); //Build SQL text string sqlText = "UPDATE DMPServerList SET "; sqlText += "`serverHash`=@serverHash, "; sqlText += "`serverName`=@serverName, "; sqlText += "`description`=@description, "; sqlText += "`gamePort`=@gamePort, "; sqlText += "`gameAddress`=@gameAddress, "; sqlText += "`protocolVersion`=@protocolVersion, "; sqlText += "`programVersion`=@programVersion, "; sqlText += "`maxPlayers`=@maxPlayers, "; sqlText += "`modControl`=@modControl, "; sqlText += "`modControlSha`=@modControlSha, "; sqlText += "`gameMode`=@gameMode, "; sqlText += "`cheats`=@cheats, "; sqlText += "`warpMode`=@warpMode, "; sqlText += "`universeSize`=@universeSize, "; sqlText += "`banner`=@banner, "; sqlText += "`homepage`=@homepage, "; sqlText += "`httpPort`=@httpPort, "; sqlText += "`admin`=@admin, "; sqlText += "`team`=@team, "; sqlText += "`location`=@location, "; sqlText += "`fixedIP`=@fixedIP, "; sqlText += "`players`=@players, "; sqlText += "`playerCount`=@playerCount "; sqlText += "WHERE `id`=@id"; //Run SQL try { databaseConnection.ExecuteNonReader(sqlText, parameters); } catch (Exception e) { Console.WriteLine("WARNING: Ignoring error on report, error: " + e); } }
public void HandleReport(string serverID, int clientID, ReportingMessage reportMessage) { ReferenceID thisReference = new ReferenceID(serverID, clientID); lock (connectedClients) { connectedClients[thisReference] = reportMessage; } if (!pairMatch.ContainsKey(thisReference)) { pairMatch.Add(thisReference, reportMessage.serverHash); if (!trackingObjects.ContainsKey(reportMessage.serverHash)) { trackingObjects.Add(reportMessage.serverHash, new TrackingObject()); SQLConnect(reportMessage, trackingObjects[reportMessage.serverHash]); } TrackingObject trackingObject = trackingObjects[reportMessage.serverHash]; trackingObject.referenceCount++; Console.WriteLine(reportMessage.serverHash + " references: " + trackingObject.referenceCount); } SQLReport(reportMessage, trackingObjects[reportMessage.serverHash]); }