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;
        }
Exemplo n.º 4
0
        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");
     }
 }
Exemplo n.º 6
0
        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]);
        }