END_TEST START_TEST(Server_HistorizingStrategyValueSet) { // init to a defined value UA_StatusCode retval = setUInt32(client, outNodeId, 43); ck_assert_str_eq(UA_StatusCode_name(retval), UA_StatusCode_name(UA_STATUSCODE_GOOD)); // set a data backend UA_HistorizingNodeIdSettings setting; setting.historizingBackend = UA_HistoryDataBackend_Memory(3, 100); setting.maxHistoryDataResponseSize = 100; setting.historizingUpdateStrategy = UA_HISTORIZINGUPDATESTRATEGY_VALUESET; serverMutexLock(); retval = gathering->registerNodeId(server, gathering->context, &outNodeId, setting); serverMutexUnlock(); ck_assert_str_eq(UA_StatusCode_name(retval), UA_StatusCode_name(UA_STATUSCODE_GOOD)); // fill the data UA_fakeSleep(100); UA_DateTime start = UA_DateTime_now(); UA_fakeSleep(100); for (UA_UInt32 i = 0; i < 10; ++i) { retval = setUInt32(client, outNodeId, i); ck_assert_str_eq(UA_StatusCode_name(retval), UA_StatusCode_name(UA_STATUSCODE_GOOD)); UA_fakeSleep(100); } UA_DateTime end = UA_DateTime_now(); // request UA_HistoryReadResponse response; UA_HistoryReadResponse_init(&response); requestHistory(start, end, &response, 0, false, NULL); // test the response ck_assert_str_eq(UA_StatusCode_name(response.responseHeader.serviceResult), UA_StatusCode_name(UA_STATUSCODE_GOOD)); ck_assert_uint_eq(response.resultsSize, 1); for (size_t i = 0; i < response.resultsSize; ++i) { ck_assert_str_eq(UA_StatusCode_name(response.results[i].statusCode), UA_StatusCode_name(UA_STATUSCODE_GOOD)); ck_assert_uint_eq(response.results[i].historyData.encoding, UA_EXTENSIONOBJECT_DECODED); ck_assert(response.results[i].historyData.content.decoded.type == &UA_TYPES[UA_TYPES_HISTORYDATA]); UA_HistoryData * data = (UA_HistoryData *)response.results[i].historyData.content.decoded.data; ck_assert(data->dataValuesSize > 0); for (size_t j = 0; j < data->dataValuesSize; ++j) { ck_assert(data->dataValues[j].sourceTimestamp >= start && data->dataValues[j].sourceTimestamp < end); ck_assert_uint_eq(data->dataValues[j].hasSourceTimestamp, true); ck_assert_str_eq(UA_StatusCode_name(data->dataValues[j].status), UA_StatusCode_name(UA_STATUSCODE_GOOD)); ck_assert_uint_eq(data->dataValues[j].hasValue, true); ck_assert(data->dataValues[j].value.type == &UA_TYPES[UA_TYPES_UINT32]); UA_UInt32 * value = (UA_UInt32 *)data->dataValues[j].value.data; ck_assert_uint_eq(*value, j); } } UA_HistoryReadResponse_deleteMembers(&response); UA_HistoryDataBackend_Memory_deleteMembers(&setting.historizingBackend); }
void MySQLPreparedStatement::setUInt16(const uint8 index, const uint16 value) { setUInt32(index, value); }
void WorldSession::HandleOfferPetitionOpcode(WorldPacket& recvData) { sLog->outDebug(LOG_FILTER_NETWORKIO, "Received opcode CMSG_OFFER_PETITION"); ObjectGuid petitionGuid, playerGuid; uint32 type, junk; Player* player; ObjectGuid guid1; ObjectGuid guid2; recvData >> junk; // this is not petition type! guid1[3] = recvData.ReadBit(); guid1[2] = recvData.ReadBit(); guid1[5] = recvData.ReadBit(); guid2[4] = recvData.ReadBit(); guid1[7] = recvData.ReadBit(); guid1[6] = recvData.ReadBit(); guid2[3] = recvData.ReadBit(); guid2[7] = recvData.ReadBit(); guid2[0] = recvData.ReadBit(); guid1[4] = recvData.ReadBit(); guid2[1] = recvData.ReadBit(); guid2[6] = recvData.ReadBit(); guid2[2] = recvData.ReadBit(); guid1[1] = recvData.ReadBit(); guid2[5] = recvData.ReadBit(); guid1[0] = recvData.ReadBit(); recvData.FlushBits(); recvData.ReadByteSeq(guid2[2]); recvData.ReadByteSeq(guid2[3]); recvData.ReadByteSeq(guid2[1]); recvData.ReadByteSeq(guid2[5]); recvData.ReadByteSeq(guid2[4]); recvData.ReadByteSeq(guid1[7]); recvData.ReadByteSeq(guid2[0]); recvData.ReadByteSeq(guid1[2]); recvData.ReadByteSeq(guid1[0]); recvData.ReadByteSeq(guid1[6]); recvData.ReadByteSeq(guid2[7]); recvData.ReadByteSeq(guid1[1]); recvData.ReadByteSeq(guid1[4]); recvData.ReadByteSeq(guid1[3]); recvData.ReadByteSeq(guid1[5]); recvData.ReadByteSeq(guid2[6]); petitionGuid = guid1; playerGuid = guid2; player = ObjectAccessor::FindPlayer(playerGuid); if (!player) return; type = GUILD_CHARTER_TYPE; uint32 petitionGuidLow = GUID_LOPART(petitionGuid); sLog->outDebug(LOG_FILTER_NETWORKIO, "OFFER PETITION: type %u, GUID1 %u, to player id: %u", type, petitionGuidLow, GUID_LOPART(playerGuid)); if (!sWorld->getBoolConfig(CONFIG_ALLOW_TWO_SIDE_INTERACTION_GUILD) && GetPlayer()->GetTeam() != player->GetTeam()) { if (type == GUILD_CHARTER_TYPE) Guild::SendCommandResult(this, GUILD_COMMAND_CREATE, ERR_GUILD_NOT_ALLIED); return; } if (type == GUILD_CHARTER_TYPE) { if (player->GetGuildIdInvited()) { SendPetitionSignResult(_player->GetGUID(), MAKE_NEW_GUID(petitionGuidLow, 0, HIGHGUID_ITEM), PETITION_SIGN_ALREADY_SIGNED_OTHER); return; } if (player->GetGuildId()) { SendPetitionSignResult(_player->GetGUID(), MAKE_NEW_GUID(petitionGuidLow, 0, HIGHGUID_ITEM), PETITION_SIGN_ALREADY_IN_GUILD); return; } } auto stmt = CharacterDatabase.GetPreparedStatement(CHAR_SEL_PETITION_SIGNATURE); stmt->setUInt32(0, petitionGuidLow); auto result = CharacterDatabase.Query(stmt); typedef std::vector<uint32> storage; storage loParts; // result == NULL also correct charter without signs if (result) { loParts.reserve(uint32(result->GetRowCount())); do { auto fields = result->Fetch(); auto loPart = fields[0].GetUInt32(); if (GUID_LOPART(playerGuid) == loPart) { player->GetSession()->SendAlreadySigned(playerGuid); return; } loParts.push_back(loPart); } while (result->NextRow()); } WorldPacket data(SMSG_PETITION_SHOW_SIGNATURES); ByteBuffer signsBuffer; guid2 = _player->GetGUID(); //ObjectGuid guid1 = petitionGuid; data.WriteBit(guid2[4]); data.WriteBit(guid1[4]); data.WriteBit(guid2[5]); data.WriteBit(guid2[0]); data.WriteBit(guid2[6]); data.WriteBit(guid1[7]); data.WriteBit(guid2[7]); data.WriteBit(guid1[0]); data.WriteBit(guid2[2]); data.WriteBit(guid2[3]); data.WriteBits(loParts.size(), 21); for (auto lowGuid : loParts) { ObjectGuid signerGuid = MAKE_NEW_GUID(lowGuid, 0, HIGHGUID_PLAYER); uint8 bitsSendOrder[8] = { 6, 2, 4, 5, 3, 0, 7, 1 }; data.WriteBitInOrder(signerGuid, bitsSendOrder); signsBuffer.WriteByteSeq(signerGuid[4]); signsBuffer.WriteByteSeq(signerGuid[7]); signsBuffer.WriteByteSeq(signerGuid[5]); signsBuffer.WriteByteSeq(signerGuid[3]); signsBuffer.WriteByteSeq(signerGuid[2]); signsBuffer << uint32(0); signsBuffer.WriteByteSeq(signerGuid[6]); signsBuffer.WriteByteSeq(signerGuid[1]); signsBuffer.WriteByteSeq(signerGuid[0]); } data.WriteBit(guid1[5]); data.WriteBit(guid1[6]); data.WriteBit(guid1[1]); data.WriteBit(guid1[3]); data.WriteBit(guid2[1]); data.WriteBit(guid1[2]); data.FlushBits(); data << uint32(petitionGuidLow); if (signsBuffer.size()) data.append(signsBuffer); data.WriteByteSeq(guid1[2]); data.WriteByteSeq(guid2[1]); data.WriteByteSeq(guid2[6]); data.WriteByteSeq(guid1[3]); data.WriteByteSeq(guid2[7]); data.WriteByteSeq(guid1[0]); data.WriteByteSeq(guid2[0]); data.WriteByteSeq(guid2[2]); data.WriteByteSeq(guid1[4]); data.WriteByteSeq(guid1[7]); data.WriteByteSeq(guid1[6]); data.WriteByteSeq(guid2[4]); data.WriteByteSeq(guid2[3]); data.WriteByteSeq(guid2[5]); data.WriteByteSeq(guid1[5]); data.WriteByteSeq(guid1[1]); player->GetSession()->SendPacket(&data); }
void MySQLPreparedStatement::setBool(const uint8 index, const bool value) { setUInt32(index, value); }
void WorldSession::HandlePetitionRenameOpcode(WorldPacket& recvData) { sLog->outDebug(LOG_FILTER_NETWORKIO, "Received opcode CMSG_PETITION_RENAME"); ObjectGuid petitionGuid; uint32 type = 0; std::string newName; uint32 nameLen = 0; petitionGuid[7] = recvData.ReadBit(); petitionGuid[1] = recvData.ReadBit(); petitionGuid[0] = recvData.ReadBit(); petitionGuid[2] = recvData.ReadBit(); nameLen = recvData.ReadBits(7); petitionGuid[3] = recvData.ReadBit(); petitionGuid[5] = recvData.ReadBit(); petitionGuid[4] = recvData.ReadBit(); petitionGuid[6] = recvData.ReadBit(); recvData.FlushBits(); recvData.ReadByteSeq(petitionGuid[3]); recvData.ReadByteSeq(petitionGuid[0]); recvData.ReadByteSeq(petitionGuid[5]); newName = recvData.ReadString(nameLen); recvData.ReadByteSeq(petitionGuid[7]); recvData.ReadByteSeq(petitionGuid[4]); recvData.ReadByteSeq(petitionGuid[2]); recvData.ReadByteSeq(petitionGuid[6]); recvData.ReadByteSeq(petitionGuid[1]); Item* item = _player->GetItemByGuid(petitionGuid); if (!item) { sLog->outDebug(LOG_FILTER_NETWORKIO, "CMSG_PETITION_QUERY failed for petition (GUID: %u)", GUID_LOPART(petitionGuid)); return; } if (sGuildMgr->GetGuildByName(newName)) { Guild::SendCommandResult(this, GUILD_COMMAND_CREATE, ERR_GUILD_NAME_EXISTS_S, newName); return; } if (sObjectMgr->IsReservedName(newName) || !ObjectMgr::IsValidCharterName(newName)) { Guild::SendCommandResult(this, GUILD_COMMAND_CREATE, ERR_GUILD_NAME_INVALID, newName); return; } auto stmt = CharacterDatabase.GetPreparedStatement(CHAR_UPD_PETITION_NAME); stmt->setString(0, newName); stmt->setUInt32(1, GUID_LOPART(petitionGuid)); CharacterDatabase.Execute(stmt); sLog->outDebug(LOG_FILTER_NETWORKIO, "Petition (GUID: %u) renamed to '%s'", GUID_LOPART(petitionGuid), newName.c_str()); WorldPacket data(SMSG_PETITION_RENAME); data.WriteBit(petitionGuid[1]); data.WriteBit(petitionGuid[7]); data.WriteBit(petitionGuid[3]); data.WriteBit(petitionGuid[0]); data.WriteBits(nameLen, 7); data.WriteBit(petitionGuid[2]); data.WriteBit(petitionGuid[5]); data.WriteBit(petitionGuid[6]); data.WriteBit(petitionGuid[4]); data.FlushBits(); data.WriteByteSeq(petitionGuid[7]); data.WriteByteSeq(petitionGuid[2]); data.WriteByteSeq(petitionGuid[1]); data.WriteByteSeq(petitionGuid[3]); data.WriteByteSeq(petitionGuid[0]); data.WriteByteSeq(petitionGuid[4]); data.WriteByteSeq(petitionGuid[5]); if (nameLen) data.append(newName.c_str(), nameLen); data.WriteByteSeq(petitionGuid[6]); SendPacket(&data); }