//This method is called when callExtension is used from SQF: //"Arma2Net.Unmanaged" callExtension "Arma2NetMySQLCommand ..." public override string Invoke(string args, int maxResultSize) { //if we haven't setup the database connection and such yet, this will do it Startup.StartupConnection(); IList <object> arguments; if (Format.TrySqfAsCollection(args, out arguments) && arguments.Count == 2 && arguments[0] != null && arguments[1] != null) { string database = arguments[0] as string; string mysql_command = arguments[1] as string; Logger.addMessage(Logger.LogType.Info, "Received - Database: " + database + " SQL Query: " + mysql_command.ToString()); if (SQL.dbs.SQLProviderExists(database)) { IEnumerable <string[][]> returned = SQL.dbs.getSQLProvider(database).RunCommand(mysql_command, maxResultSize); return(Format.ObjectAsSqf(returned)); } else { Logger.addMessage(Logger.LogType.Warning, "The database: " + database + " is not loaded in through the Databases.txt file."); } //Logger.addMessage(Logger.LogType.Info, "Returning false object"); return(Format.ObjectAsSqf(false)); } else { Logger.addMessage(Logger.LogType.Error, "The number and/or format of the arguments passed in doesn't match."); throw new ArgumentException(); } }
//This method is called when callExtension is used from SQF: //"Arma2Net.Unmanaged" callExtension "Arma2NetMySQL ..." public override string Invoke(string args, int maxResultSize) { //if we haven't setup the database connection and such yet, this will do it Startup.StartupConnection(); IList <object> arguments; if (Format.TrySqfAsCollection(args, out arguments) && arguments.Count >= 2 && arguments[0] != null && arguments[1] != null) { string database = arguments[0] as string; string procedure = arguments[1] as string; string parameters = arguments[2] as string; //strip out [] characters at the beginning and end if (parameters[0].ToString() == "[" && parameters[parameters.Length - 1].ToString() == "]") { parameters = parameters.Substring(1, parameters.Length - 2); } List <string> split = new List <string>(); if (parameters != null) { split = parameters.Split(',').ToList <string>(); } Logger.addMessage(Logger.LogType.Info, "Received - Database: " + database + " Procedure: " + procedure + " Parameters: " + parameters.ToString()); if (SQL.dbs.SQLProviderExists(database)) { IEnumerable <string[][]> returned = SQL.dbs.getSQLProvider(database).RunProcedure(procedure, split.ToArray(), maxResultSize); return(Format.ObjectAsSqf(returned)); } else { Logger.addMessage(Logger.LogType.Warning, "The database: " + database + " is not loaded in through the Databases.txt file."); } //Logger.addMessage(Logger.LogType.Info, "Returning false object"); return(Format.ObjectAsSqf(false)); } else { Logger.addMessage(Logger.LogType.Error, "The number and/or format of the arguments passed in doesn't match."); throw new ArgumentException(); } }
//AsyncAddIn - when you want to pass data from the game and immediately return null // then, subsequent checks by the game check to see if the data can be returned. //On the SQF side, this means that we can only do one call at a time... //This method is called when callExtension is used from SQF: //"Arma2Net.Unmanaged" callExtension "Arma2NetMySQLCommandAsync ..." public override string InvokeAsync(string args, int maxResultSize, CancellationToken token) { //if we haven't setup the database connection and such yet, this will do it Startup.StartupConnection(); IList <object> arguments; if (Format.TrySqfAsCollection(args, out arguments) && arguments.Count == 2 && arguments[0] != null && arguments[1] != null) { string database = arguments[0] as string; string mysql_command = arguments[1] as string; Logger.addMessage(Logger.LogType.Info, "Received - Database: " + database + " SQL Query: " + mysql_command.ToString()); if (SQL.dbs.SQLProviderExists(database)) { IEnumerable <string[][]> returned = SQL.dbs.getSQLProvider(database).RunCommand(mysql_command, maxResultSize); //the following is needed because we need to return something even if there is nothing to return //for example, an SQL DELETE call will go off and return "" //however, because on the SQF side, we check for this in a while loop so we know the database process has completed, we can //just return an empty array if (returned.ToString() == "") { return(Format.ObjectAsSqf("[]")); } return(Format.ObjectAsSqf(returned)); } else { Logger.addMessage(Logger.LogType.Warning, "The database: " + database + " is not loaded in through the Databases.txt file."); } //Logger.addMessage(Logger.LogType.Info, "Returning false object"); return(Format.ObjectAsSqf(false)); } else { Logger.addMessage(Logger.LogType.Error, "The number and/or format of the arguments passed in doesn't match."); throw new ArgumentException(); } }