VDRegistryProviderMemory::VDRegistryProviderMemory() { vdautoptr<Key> machineKey(new Key); vdautoptr<Key> userKey(new Key); mpMachineKey = machineKey.release(); mpUserKey = userKey.release(); }
void testRegKey(IO &io,char *args) { wchar_t buffer[1000]; _snwprintf(buffer,1000,L"Machine\\SAM\\SAM\\Domains\\Account\\Users\\Names\\%S",&args[1]); char buf[1000]; UnicodeString str(buffer); io.println(str.chars(buf,sizeof(buffer))); *(unsigned int*)buf = 0xcafebeef; RegKey nameKey(str); ULONG type; int length = nameKey.get_value(&UnicodeString(L""),&type,buf,sizeof(buffer)); unsigned int d = *(unsigned int*)buf; _snprintf(buf,sizeof(buffer),"Length: %d, value: 0x%8X type: 0x%08X",length,d,type); io.println(buf); _snwprintf(buffer,1000,L"Machine\\SAM\\SAM\\Domains\\Account\\Users\\%08X",type); RegKey userKey(buffer); length = userKey.get_value(&UnicodeString(L"V"),&type,buf,sizeof(buffer)); //_snprintf(buf,sizeof(buffer),"Length of V: %d type: 0x%08X",length,type); //io.println(buf); entry *es=read_entries(buf,V_ENTRY_COUNT); char buf2[1000]; io.println(UnicodeString((wchar_t *)es[1].data,(unsigned short)es[1].length).chars(buf2,sizeof(buf2))); es[USERNAME_E].data = L"Gustav"; es[USERNAME_E].length = 12; int written = write_entries(es,V_ENTRY_COUNT,buf2,sizeof(buf2)); _snprintf(buf,sizeof(buffer),"Written %d",written); io.println(buf); userKey.set_value(&UnicodeString(L"V"),type,buf2,written); userKey.flush(); }
void showName(IO &io,char *args) { if (!*args) { io.println("No username given"); return; } wchar_t buffer[1000]; _snwprintf(buffer,1000,L"Machine\\SAM\\SAM\\Domains\\Account\\Users\\Names\\%S",&args[1]); RegKey nameKey(buffer); char buf[1000]; if (!nameKey.valid()) { _snprintf(buf,sizeof(buf),"User not found: %s",&args[1]); io.println(buf); return; } ULONG type; int length = nameKey.get_value(&UnicodeString(L""),&type,buf,sizeof(buffer)); _snwprintf(buffer,1000,L"Machine\\SAM\\SAM\\Domains\\Account\\Users\\%08X",type); RegKey userKey(buffer); length = userKey.get_value(&UnicodeString(L"V"),&type,buf,sizeof(buffer)); entry *es=read_entries(buf,V_ENTRY_COUNT); char buf2[1000]; io.print("Name: "); io.println(UnicodeString((wchar_t *)es[USERNAME_E].data,(unsigned short)es[USERNAME_E].length).chars(buf2,sizeof(buf2))); io.print("Voller Name: "); io.println(UnicodeString((wchar_t *)es[FULLNAME_E].data,(unsigned short)es[FULLNAME_E].length).chars(buf2,sizeof(buf2))); }
void Server::onAllGroupRequest(const SessionPtr& conn, shared_ptr_Msg message) { m_mutex.lock(); std::shared_ptr<IMChat::GroupAllRequest> ptrRequest = std::dynamic_pointer_cast<IMChat::GroupAllRequest>(message); if (NULL != ptrRequest) { cout << ptrRequest->GetTypeName() << ": userId " << ptrRequest->userid() << endl; string key("groupSet:"); key += ptrRequest->userid(); auto vecGroups = m_redis.SMEMBERS(key); if (vecGroups.size() != 0) { IMChat::GroupAllResponse response; //pipeline auto ptrContext = m_redis.GetContext(); redisReply *ptrReply; for (auto& x : vecGroups) { string userKey("group:"); userKey += x; redisAppendCommand(ptrContext, "HGETALL %s", userKey.c_str()); } for (size_t i = 0; i < vecGroups.size(); i++) { //读取用户信息; redisGetReply(ptrContext, reinterpret_cast<void**>(&ptrReply)); // reply for userinfo if (NULL != ptrReply && REDIS_REPLY_ARRAY == ptrReply->type && 0 != ptrReply->elements) { // 添加一个好友数据成员;//repeated数据; IMChat::GroupInfo* ptrGroupInfo = response.add_msgdata(); //对当前对象赋值; for (size_t i = 0; i < ptrReply->elements/2; ++i) { //key string field(ptrReply->element[2 * i]->str); //value if ("groupId" == field) ptrGroupInfo->set_groupid(ptrReply->element[2 * i + 1]->str); else if ("groupName" == field) ptrGroupInfo->set_groupname(ptrReply->element[2 * i + 1]->str); else if ("imageUrl" == field) ptrGroupInfo->set_image_url(ptrReply->element[2 * i + 1]->str); } ptrGroupInfo = NULL; } freeReplyObject(ptrReply); } response.set_groupcount(vecGroups.size()); response.set_userid(ptrRequest->userid()); time_t nowtime; time(&nowtime); response.set_timestamp(static_cast<int64_t>(nowtime)); int i = response.msgdata_size(); auto aa = response.msgdata(1); m_codec.Send(conn, response); } } m_mutex.unlock(); }
void Server::onAllUsersInfoRequest(const SessionPtr& conn, shared_ptr_Msg message) { m_mutex.lock(); std::shared_ptr<IMChat::PeerAllUserInfoRequest> ptrRequest = std::dynamic_pointer_cast<IMChat::PeerAllUserInfoRequest>(message); if (NULL != ptrRequest) { cout << ptrRequest->GetTypeName() << ": userId " << ptrRequest->userid() << endl; string key("friendsSet:"); key += ptrRequest->userid(); auto vecFriends = m_redis.SMEMBERS(key); if (vecFriends.size() != 0) { IMChat::PeerAllUserInfoResponse response; //pipeline auto ptrContext = m_redis.GetContext(); redisReply *ptrReply; for (auto& x : vecFriends) { string userKey("user:"******"HGETALL %s", userKey.c_str()); } for (size_t i = 0; i < vecFriends.size(); i++) { //读取用户信息; redisGetReply(ptrContext, reinterpret_cast<void**>(&ptrReply)); // reply for userinfo if (NULL != ptrReply && REDIS_REPLY_ARRAY == ptrReply->type && 0 != ptrReply->elements) { // 添加一个好友数据成员;//repeated数据; IMChat::UserData* ptrUserData = response.add_msgdata(); //对当前对象赋值; for (size_t i = 0; i < ptrReply->elements /2; ++i) { //key string field(ptrReply->element[2 * i]->str); //value if ("useId" == field) ptrUserData->set_user_id(ptrReply->element[2 * i + 1]->str); else if ("username" == field) ptrUserData->set_name(ptrReply->element[2 * i + 1]->str); else if ("nickName" == field) ptrUserData->set_nick_name(ptrReply->element[2 * i + 1]->str); else if ("imageurl" == field) ptrUserData->set_image_url(ptrReply->element[2 * i + 1]->str); else if ("email" == field) ptrUserData->set_email(ptrReply->element[2 * i + 1]->str); else if ("sex" == field) ptrUserData->set_sex(atoi(ptrReply->element[2 * i + 1]->str)); else if ("onlineStatus" == field) ptrUserData->set_online_status(atoi(ptrReply->element[2 * i + 1]->str)); else if ("position" == field) ptrUserData->set_position(ptrReply->element[2 * i + 1]->str); } ptrUserData = NULL; } freeReplyObject(ptrReply); } response.set_friendscount(vecFriends.size()); response.set_userid(ptrRequest->userid()); time_t nowtime; time(&nowtime); response.set_timestamp(static_cast<int64_t>(nowtime)); m_codec.Send(conn, response); } } m_mutex.unlock(); }