int PipeWriteData(const char *base_cmd, const char *args, const char *data) { assert(base_cmd); assert(args); char *command = StringFormat("%s %s", base_cmd, args); IOData io = cf_popen_full_duplex(command, false, true); free(command); if (io.write_fd == -1 || io.read_fd == -1) { Log(LOG_LEVEL_VERBOSE, "Error occurred while opening pipes for " "communication with application '%s'.", base_cmd); return -1; } Log(LOG_LEVEL_DEBUG, "Opened fds %d and %d for command '%s'.", io.read_fd, io.write_fd, args); int res = 0; if (PipeWrite(&io, data) != strlen(data)) { Log(LOG_LEVEL_VERBOSE, "Was not able to send whole data to application '%s'.", base_cmd); res = -1; } /* If script returns non 0 status */ int close = cf_pclose_full_duplex(&io); if (close != EXIT_SUCCESS) { Log(LOG_LEVEL_VERBOSE, "Application '%s' returned with non zero return code: %d", base_cmd, close); res = -1; } return res; }
task main () { string _tmp; displayCenteredTextLine(0, "HiTechnic"); displayCenteredBigTextLine(1, "Color V2"); displayCenteredTextLine(3, "Test 1"); displayCenteredTextLine(5, "Connect sensor"); displayCenteredTextLine(6, "to S1"); sleep(2000); // Create struct to hold sensor data tHTCS2 colorSensor; // Initialise and configure struct and port initSensor(&colorSensor, S1); eraseDisplay(); while (true) { // Read the currently detected colour and RGB/HSV data from the sensor if (!readSensor(&colorSensor)) { displayTextLine(4, "ERROR!!"); sleep(2000); stopAllTasks(); } displayCenteredTextLine(0, "Color: %d", colorSensor.color); displayCenteredBigTextLine(1, "R G B"); eraseRect(0,10, 99, 41); fillRect( 0, 10, 30, 10 + (colorSensor.red+1)/8); fillRect(35, 10, 65, 10 + (colorSensor.green+1)/8); fillRect(70, 10, 99, 10 + (colorSensor.blue+1)/8); StringFormat(_tmp, " %3d %3d", colorSensor.red, colorSensor.green); displayTextLine(7, "%s %3d", _tmp, colorSensor.blue); sleep(100); } }
int32 ZoneDatabase::GetDoorsDBCountPlusOne(const char *zone_name, int16 version) { uint32 oMaxID = 0; std::string query = StringFormat("SELECT MAX(doorid) FROM doors " "WHERE zone = '%s' AND (version = %u OR version = -1)", zone_name, version); auto results = QueryDatabase(query); if (!results.Success()) { return -1; } if (results.RowCount() != 1) return -1; auto row = results.begin(); if (!row[0]) return 0; return atoi(row[0]) + 1; }
void RuleManager::_SaveRule(Database *db, RuleType type, uint16 index) { char vstr[100]; switch(type) { case IntRule: sprintf(vstr, "%d", m_RuleIntValues[index]); break; case RealRule: sprintf(vstr, "%.13f", m_RuleRealValues[index]); break; case BoolRule: sprintf(vstr, "%s", m_RuleBoolValues[index]?"true":"false"); break; } std::string query = StringFormat("REPLACE INTO rule_values " "(ruleset_id, rule_name, rule_value) " " VALUES(%d, '%s', '%s')", m_activeRuleset, _GetRuleName(type, index), vstr); auto results = db->QueryDatabase(query); }
task main () { int _x_axis = 0; int _y_axis = 0; int _z_axis = 0; string _tmp; nxtDisplayCenteredTextLine(0, "HiTechnic"); nxtDisplayCenteredBigTextLine(1, "Accel"); nxtDisplayCenteredTextLine(3, "Test 1"); nxtDisplayCenteredTextLine(5, "Connect sensor"); nxtDisplayCenteredTextLine(6, "to S1"); wait1Msec(2000); PlaySound(soundBeepBeep); while(bSoundActive) EndTimeSlice(); while (true) { eraseDisplay(); // Read all of the axes at once if (!HTACreadAllAxes(HTAC, _x_axis, _y_axis, _z_axis)) { nxtDisplayTextLine(4, "ERROR!!"); wait1Msec(2000); StopAllTasks(); } nxtDisplayTextLine(0,"HTAC Test 1"); // We can't provide more than 2 parameters to nxtDisplayTextLine(), // so we'll do in two steps using StringFormat() nxtDisplayTextLine(2, " X Y Z"); StringFormat(_tmp, "%4d %4d", _x_axis, _y_axis); nxtDisplayTextLine(3, "%s %4d", _tmp, _z_axis); wait1Msec(100); } }
VOODOO_METHODDEF(VSParameterDX9::SetTexture)(_In_ ITexture * pVal) { VOODOO_DEBUG_FUNCLOG(m_Core->GetLogger()); if (m_Desc.Type < VSPT_Texture || m_Desc.Type > VSPT_TextureCube) return VSFERR_INVALIDCALL; m_Texture = pVal; ParameterList::iterator child = m_Attached.begin(); while (child != m_Attached.end()) { (*child)->SetTexture(pVal); } if (m_Effect && m_Handle) { Variant propVar = CreateVariant(); if (FAILED(pVal->GetProperty(PropIds::D3D9Texture, &propVar))) { m_Core->GetLogger()->LogMessage(VSLog_PlugError, VOODOO_D3D9_NAME, StringFormat("Unable to get hardware texture from texture %1%.") << pVal); return VSFERR_INVALIDPARAMS; } LPDIRECT3DTEXTURE9 pDXTexture = reinterpret_cast<LPDIRECT3DTEXTURE9>(propVar.VPVoid); HRESULT hr = m_Effect->m_Handle->SetTexture(m_Handle, pDXTexture); if (FAILED(hr)) { m_Core->GetLogger()->LogMessage(VSLog_PlugError, VOODOO_D3D9_NAME, StringFormat("Unable to bind texture %1% to parameter %2%.") << pVal << this); return VSFERR_INVALIDCALL; } m_Core->GetLogger()->LogMessage(VSLog_PlugDebug, VOODOO_D3D9_NAME, StringFormat("Bound texture %1% to parameter %2%.") << pVal << this); } return VSF_OK; }
bool BaseGuildManager::GetEntireGuild(uint32 guild_id, std::vector<CharGuildInfo *> &members) { members.clear(); if(m_db == nullptr) return(false); //load up the rank info for each guild. std::string query = StringFormat(GuildMemberBaseQuery " WHERE g.guild_id=%d", guild_id); auto results = m_db->QueryDatabase(query); if (!results.Success()) { return false; } for (auto row = results.begin(); row != results.end(); ++row) { auto ci = new CharGuildInfo; ProcessGuildMember(row, *ci); members.push_back(ci); } Log(Logs::Detail, Logs::Guilds, "Retreived entire guild member list for guild %d from the database", guild_id); return true; }
int Database::FindCharacter(const char *characterName) { char *safeCharName = RemoveApostrophes(characterName); std::string query = StringFormat("SELECT `id` FROM `character_` WHERE `name`='%s' LIMIT 1", safeCharName); auto results = QueryDatabase(query); if (!results.Success()) { _log(UCS__ERROR, "FindCharacter failed. %s %s", query.c_str(), results.ErrorMessage().c_str()); safe_delete(safeCharName); return -1; } safe_delete(safeCharName); if (results.RowCount() != 1) { _log(UCS__ERROR, "Bad result from FindCharacter query for character %s", characterName); return -1; } auto row = results.begin(); int characterID = atoi(row[0]); return characterID; }
void Database::LogPlayerAARateHourly(QSPlayerAARateHourly_Struct* QS, uint32 items) { if (items == 0) { return; } std::string query = StringFormat( "INSERT INTO `qs_player_aa_rate_hourly` (char_id, aa_count, hour_time) " "VALUES " "(%i, %i, UNIX_TIMESTAMP() - MOD(UNIX_TIMESTAMP(), 3600)) " "ON DUPLICATE KEY UPDATE " "`aa_count` = `aa_count` + %i", QS->charid, QS->add_points, QS->add_points); auto results = QueryDatabase(query); if (!results.Success()) { Log.Out(Logs::Detail, Logs::QS_Server, "Failed AA Rate Log Record Insert: %s\n%s", results.ErrorMessage().c_str(), query.c_str()); } }
bool EQLConfig::SetDynamicCount(int count) { char namebuf[128]; database.DoEscapeString(namebuf, m_name.c_str(), m_name.length()&0x3F); //limit len to 64 namebuf[127] = '\0'; std::string query = StringFormat("UPDATE launcher SET dynamics=%d WHERE name='%s'", count, namebuf); auto results = database.QueryDatabase(query); if (!results.Success()) { return false; } //update in-memory version. m_dynamics = count; //if the launcher is connected, update it. LauncherLink *ll = launcher_list.Get(m_name.c_str()); if(ll != nullptr) { ll->BootDynamics(count); } return false; }
bool BaseGuildManager::DBSetPublicNote(uint32 charid, const char* note) { if(m_db == nullptr) return(false); //escape our strings. uint32 len = strlen(note); auto esc = new char[len * 2 + 1]; m_db->DoEscapeString(esc, note, len); //insert the new `guilds` entry std::string query = StringFormat("UPDATE guild_members SET public_note='%s' WHERE char_id=%d", esc, charid); safe_delete_array(esc); auto results = m_db->QueryDatabase(query); if (!results.Success()) { return false; } Log(Logs::Detail, Logs::Guilds, "Set public not for char %d", charid); return true; }
bool ResourceManager::findResource(ResourceLoadOptions& options) { Path& path = options.name; for(auto it = resourceLoaders.begin(); it != resourceLoaders.end(); it++) { auto ext = PathGetFileExtension(options.name); auto loader = it->value.get(); if( loader->getResourceGroup() != options.group ) continue; Path newPath = StringFormat("%s.%s", path.c_str(), ext.c_str()); if (archive->existsFile(newPath)) { path = PathNormalize(newPath); return true; } } return false; }
bool Database::Create_ItemMove_Table() { Log.Out(Logs::Detail, Logs::QS_Server, "Attempting to create item move table."); std::string query = StringFormat( "CREATE TABLE `qs_player_item_move_log` ( " "`char_id` int(11) DEFAULT '0', " "`from_slot` mediumint(7) DEFAULT '0', " "`to_slot` mediumint(7) DEFAULT '0', " "`item_id` int(11) DEFAULT '0', " "`charges` mediumint(7) DEFAULT '0', " "`stack_size` mediumint(7) DEFAULT '0', " "`char_items` mediumint(7) DEFAULT '0', " "`postaction` tinyint(1) DEFAULT '0', " "`time` timestamp NULL DEFAULT NULL ON UPDATE CURRENT_TIMESTAMP " ") ENGINE = InnoDB DEFAULT CHARSET = utf8;"); auto results = QueryDatabase(query); if (!results.Success()) { Log.Out(Logs::General, Logs::QS_Server, "Error creating qs_player_item_move_log. \n%s", query.c_str()); return false; } return true; }
bool Database::GetServerSettings() { server_log->Log(log_database, "Entered GetServerSettings."); std::string query; query = StringFormat("SELECT * FROM tblloginserversettings"); auto results = QueryDatabase(query); if (!results.Success()) { server_log->Log(log_database_error, "GetServerSettings Mysql check_query failed: %s", query.c_str()); return false; } bool result = true; auto row = results.begin(); for (auto row = results.begin(); row != results.end(); ++row) { std::string type = row[0]; std::string value = row[1]; std::string category = row[2]; std::string description = row[3]; std::string defaults = row[4]; if (value.empty()) { server_log->Log(log_database, "Mysql check_query returns NO value for type %s", type.c_str()); result = false; } else if (!value.empty()) { server_log->Log(log_database, "Mysql check_query returns `value`: %s for type %s", value.c_str(), type.c_str()); } } return result; }
int16 SpawnConditionManager::GetCondition(const char *zone_short, uint32 instance_id, uint16 condition_id) { if(!strcasecmp(zone_short, zone->GetShortName()) && instance_id == zone->GetInstanceID()) { //this is a local spawn condition std::map<uint16, SpawnCondition>::iterator condi; condi = spawn_conditions.find(condition_id); if(condi == spawn_conditions.end()) { Log(Logs::Detail, Logs::Spawns, "Unable to find local condition %d in Get request.", condition_id); return(0); //unable to find the spawn condition } SpawnCondition &cond = condi->second; return cond.value; } //this is a remote spawn condition, grab it from the DB //load spawn conditions std::string query = StringFormat("SELECT value FROM spawn_condition_values " "WHERE zone = '%s' AND instance_id = %u AND id = %d", zone_short, instance_id, condition_id); auto results = database.QueryDatabase(query); if (!results.Success()) { Log(Logs::Detail, Logs::Spawns, "Unable to query remote condition %d from zone %s in Get request.", condition_id, zone_short); return 0; //dunno a better thing to do... } if (results.RowCount() == 0) { Log(Logs::Detail, Logs::Spawns, "Unable to load remote condition %d from zone %s in Get request.", condition_id, zone_short); return 0; //dunno a better thing to do... } auto row = results.begin(); return atoi(row[0]); }
void GenericAgentConfigSetInputFile(GenericAgentConfig *config, const char *workdir, const char *input_file) { free(config->original_input_file); free(config->input_file); free(config->input_dir); config->original_input_file = xstrdup(input_file); if (workdir && FilePathGetType(input_file) == FILE_PATH_TYPE_NON_ANCHORED) { config->input_file = StringFormat("%s%cinputs%c%s", workdir, FILE_SEPARATOR, FILE_SEPARATOR, input_file); } else { config->input_file = xstrdup(input_file); } config->input_dir = xstrdup(config->input_file); if (!ChopLastNode(config->input_dir)) { free(config->input_dir); config->input_dir = xstrdup("."); } }
// Add new Zone Object (theoretically only called for items dropped to ground) uint32 ZoneDatabase::AddObject(uint32 type, uint32 icon, const Object_Struct& object, const ItemInst* inst) { uint32 database_id = 0; uint32 item_id = 0; int16 charges = 0; if (inst && inst->GetItem()) { item_id = inst->GetItem()->ID; charges = inst->GetCharges(); } // SQL Escape object_name uint32 len = strlen(object.object_name) * 2 + 1; char* object_name = new char[len]; DoEscapeString(object_name, object.object_name, strlen(object.object_name)); // Save new record for object std::string query = StringFormat("INSERT INTO object " "(zoneid, xpos, ypos, zpos, heading, " "itemid, charges, objectname, type, icon) " "values (%i, %f, %f, %f, %f, %i, %i, '%s', %i, %i)", object.zone_id, object.x, object.y, object.z, object.heading, item_id, charges, object_name, type, icon); safe_delete_array(object_name); auto results = QueryDatabase(query); if (!results.Success()) { LogFile->write(EQEMuLog::Error, "Unable to insert object: %s", results.ErrorMessage().c_str()); return 0; } // Save container contents, if container if (inst && inst->IsType(ItemClassContainer)) SaveWorldContainer(object.zone_id, database_id, inst); return database_id; }
void Raid::RemoveMember(const char *characterName) { std::string query = StringFormat("DELETE FROM raid_members where name='%s'", characterName); auto results = database.QueryDatabase(query); Client *client = entity_list.GetClientByName(characterName); disbandCheck = true; SendRaidRemoveAll(characterName); SendRaidDisband(client); LearnMembers(); VerifyRaid(); if(client) client->SetRaidGrouped(false); ServerPacket *pack = new ServerPacket(ServerOP_RaidRemove, sizeof(ServerRaidGeneralAction_Struct)); ServerRaidGeneralAction_Struct *rga = (ServerRaidGeneralAction_Struct*)pack->pBuffer; rga->rid = GetID(); rga->instance_id = zone->GetInstanceID(); strn0cpy(rga->playername, characterName, 64); rga->zoneid = zone->GetZoneID(); worldserver.SendPacket(pack); safe_delete(pack); }
bool Database::GetLoginDataFromAccountName(std::string name, std::string &password, unsigned int &id) { std::string query; char tmpUN[1024]; DoEscapeString(tmpUN, name.c_str(), (int)name.length()); (tmpUN, name.c_str(), (int)name.length()); query = StringFormat("SELECT LoginServerID, AccountPassword " "FROM %s WHERE " "AccountName = '%s'", LoadServerSettings("schema", "account_table").c_str(), tmpUN ); auto results = QueryDatabase(query); if (!results.Success()) { server_log->Log(log_database_error, "Mysql query failed: %s", query.c_str()); return false; } if (results.RowCount() > 0) { auto row = results.begin(); if (row[0] != nullptr) { id = atoi(row[0]); password = row[1]; return true; } server_log->Log(log_database_error, "Unknown error, no result for: %s", query.c_str()); return false; } server_log->Log(log_database_error, "Mysql query returned no result for: %s", query.c_str()); return false; }
void Database::LogPlayerItemMove(QSPlayerLogItemMove_Struct* QS, uint32 items) { if (items == 0) { return; } for(uint32 i = 0; i < items; i++) { std::string query = StringFormat( "INSERT INTO `qs_player_item_move_log` SET " "`char_id` = '%i', " "`from_slot` = '%i', " "`to_slot` = '%i', " "`item_id` = '%i', " "`charges` = '%i', " "`stack_size` = '%i', " "`char_items` = '%i', " "`postaction` = '%i', " "`time` = now()", QS->char_id, QS->items[i].from_slot, QS->items[i].to_slot, QS->items[i].item_id, QS->items[i].charges, QS->stack_size, QS->char_count, QS->postaction); auto results = QueryDatabase(query); if(!results.Success()) { Log.Out(Logs::Detail, Logs::QS_Server, "Failed Move Log Record Entry Insert: %s\n%s", results.ErrorMessage().c_str(), query.c_str()); } } }
bool BaseGuildManager::GetEntireGuild(uint32 guild_id, std::vector<CharGuildInfo *> &members) { members.clear(); if(m_db == nullptr) return(false); //load up the rank info for each guild. std::string query = StringFormat(GuildMemberBaseQuery " WHERE g.guild_id=%d", guild_id); auto results = m_db->QueryDatabase(query); if (!results.Success()) { _log(GUILDS__ERROR, "Error loading guild member list '%s': %s", query.c_str(), results.ErrorMessage().c_str()); return false; } for (auto row = results.begin(); row != results.end(); ++row) { CharGuildInfo *ci = new CharGuildInfo; ProcessGuildMember(row, *ci); members.push_back(ci); } _log(GUILDS__DB, "Retreived entire guild member list for guild %d from the database", guild_id); return true; }
bool BaseGuildManager::DBSetPublicNote(uint32 charid, const char* note) { if(m_db == nullptr) return(false); //escape our strings. uint32 len = strlen(note); char *esc = new char[len*2+1]; m_db->DoEscapeString(esc, note, len); //insert the new `guilds` entry std::string query = StringFormat("UPDATE guild_members SET public_note='%s' WHERE char_id=%d", esc, charid); safe_delete_array(esc); auto results = m_db->QueryDatabase(query); if (!results.Success()) { _log(GUILDS__ERROR, "Error setting public note for char %d '%s': %s", charid, query.c_str(), results.ErrorMessage().c_str()); return false; } _log(GUILDS__DB, "Set public not for char %d", charid); return true; }
bool Group::LearnMembers() { std::string query = StringFormat("SELECT name FROM group_id WHERE groupid = %lu", (unsigned long)GetID()); auto results = database.QueryDatabase(query); if (!results.Success()) return false; if (results.RowCount() == 0) { Log.Out(Logs::General, Logs::Error, "Error getting group members for group %lu: %s", (unsigned long)GetID(), results.ErrorMessage().c_str()); return false; } int memberIndex = 0; for(auto row = results.begin(); row != results.end(); ++row) { if(!row[0]) continue; members[memberIndex] = nullptr; strn0cpy(membername[memberIndex], row[0], 64); memberIndex++; } return true; }
bool Database::SetServerSettings(std::string type, std::string category, std::string defaults) { std::string query; Config* newval = new Config; std::string loadINIvalue = newval->LoadOption(category, type, "login.ini"); query = StringFormat( "UPDATE tblloginserversettings " "SET value = '%s' " "WHERE type = '%s' " "AND category = '%s' " "LIMIT 1", loadINIvalue.empty() ? defaults.c_str() : loadINIvalue.c_str(), type.c_str(), category.c_str()); safe_delete(newval); auto results = QueryDatabase(query); if (!results.Success()) { server_log->Log(log_database_error, "SetServerSettings Mysql check_query failed: %s", query.c_str()); return false; } return true; }
void Database::CreateLSAccount(std::string name, std::string password, std::string email, unsigned int created_by, std::string LastIPAddress, std::string creationIP) { bool activate = 0; if (LoadServerSettings("options", "auto_account_activate") == "TRUE") { activate = 1; } std::string query; char tmpUN[1024]; DoEscapeString(tmpUN, name.c_str(), (int)name.length()); query = StringFormat("INSERT INTO %s " "SET AccountName = '%s', " "AccountPassword = sha('%s'), " "AccountCreateDate = now(), " "LastLoginDate = now(), " "LastIPAddress = '%s', " "client_unlock = '%s', " "created_by = '%s', " "creationIP = '%s'", LoadServerSettings("schema", "account_table").c_str(), tmpUN, password.c_str(), LastIPAddress.c_str(), std::to_string(activate).c_str(), std::to_string(created_by).c_str(), creationIP.c_str() ); auto results = QueryDatabase(query); if (!results.Success()) { server_log->Log(log_database_error, "Mysql query failed: %s", query.c_str()); } }
void Database::AddSpeech(const char* from, const char* to, const char* message, uint16 minstatus, uint32 guilddbid, uint8 type) { char *escapedFrom = new char[strlen(from) * 2 + 1]; char *escapedTo = new char[strlen(to) * 2 + 1]; char *escapedMessage = new char[strlen(message) * 2 + 1]; DoEscapeString(escapedFrom, from, strlen(from)); DoEscapeString(escapedTo, to, strlen(to)); DoEscapeString(escapedMessage, message, strlen(message)); std::string query = StringFormat("INSERT INTO `qs_player_speech` " "SET `from` = '%s', `to` = '%s', `message`='%s', " "`minstatus`='%i', `guilddbid`='%i', `type`='%i'", escapedFrom, escapedTo, escapedMessage, minstatus, guilddbid, type); safe_delete_array(escapedFrom); safe_delete_array(escapedTo); safe_delete_array(escapedMessage); auto results = QueryDatabase(query); if(!results.Success()) { Log.Out(Logs::Detail, Logs::QS_Server, "Failed Speech Entry Insert: %s", results.ErrorMessage().c_str()); Log.Out(Logs::Detail, Logs::QS_Server, "%s", query.c_str()); } }
void RuleManager::_SaveRule(Database *db, RuleType type, uint16 index) { char vstr[100]; switch(type) { case IntRule: sprintf(vstr, "%d", m_RuleIntValues[index]); break; case RealRule: sprintf(vstr, "%.13f", m_RuleRealValues[index]); break; case BoolRule: sprintf(vstr, "%s", m_RuleBoolValues[index]?"true":"false"); break; } std::string query = StringFormat("REPLACE INTO rule_values " "(ruleset_id, rule_name, rule_value) " " VALUES(%d, '%s', '%s')", m_activeRuleset, _GetRuleName(type, index), vstr); auto results = db->QueryDatabase(query); if (!results.Success()) _log(RULES__ERROR, "Fauled to set rule in the database: %s: %s", query.c_str(), results.ErrorMessage().c_str()); }
bool CMysqlDBApi::LockTask(_U32 avatar_id, _U32 task_id) { String sql = StringFormat("SELECT state FROM task_table WHERE avatar_id=%u AND task_id=%u", avatar_id, task_id); if(mysql_real_query(m_mysql, sql.c_str(), (unsigned long)sql.size())!=0) { printf("error in mysql_real_query(%d), %s", mysql_errno(m_mysql), mysql_error(m_mysql)); return false; } MYSQL_RES *result = mysql_store_result(m_mysql); if(!result) { printf("error in mysql_store_result(%d), %s", mysql_errno(m_mysql), mysql_error(m_mysql)); return false; } ZION_ASSERT(mysql_num_fields(result)==1); MYSQL_ROW row; bool is_error = true; while((row=mysql_fetch_row(result))!=NULL) { if(atoi(row[0])==0) is_error = false; } mysql_free_result(result); return !is_error; }
std::string Att::IntToStr(int data) const { return StringFormat("%d", data); }
std::string Att::DblToStr(double data) const { return StringFormat("%f", data); }