[Friends] Faster update
This commit is contained in:
parent
adedc4088f
commit
0139465337
@ -8,48 +8,19 @@ namespace Components
|
||||
|
||||
void Friends::UpdateUserInfo(SteamID user)
|
||||
{
|
||||
std::lock_guard<std::recursive_mutex> _(Friends::Mutex);
|
||||
|
||||
auto i = std::find_if(Friends::FriendsList.begin(), Friends::FriendsList.end(), [user] (Friends::Friend entry)
|
||||
{
|
||||
return (entry.userId.Bits == user.Bits);
|
||||
});
|
||||
|
||||
if(i != Friends::FriendsList.end())
|
||||
{
|
||||
Proto::IPC::Function function;
|
||||
|
||||
function.set_name("getPresence");
|
||||
function.set_name("getInfo");
|
||||
*function.add_params() = Utils::String::VA("%llx", user.Bits);
|
||||
|
||||
std::string* key = function.add_params();
|
||||
*function.add_params() = "name";
|
||||
*function.add_params() = "state";
|
||||
*function.add_params() = "iw4x_name";
|
||||
*function.add_params() = "iw4x_status";
|
||||
*function.add_params() = "iw4x_rank";
|
||||
*function.add_params() = "iw4x_server";
|
||||
|
||||
*key = "iw4x_status";
|
||||
IPCHandler::SendWorker("friends", function.SerializeAsString());
|
||||
|
||||
*key = "iw4x_rank";
|
||||
IPCHandler::SendWorker("friends", function.SerializeAsString());
|
||||
|
||||
*key = "iw4x_server";
|
||||
IPCHandler::SendWorker("friends", function.SerializeAsString());
|
||||
}
|
||||
|
||||
/*userInfo.online = Steam::Proxy::SteamFriends->GetFriendPersonaState(user) != 0;
|
||||
userInfo.name = Steam::Proxy::SteamFriends->GetFriendPersonaName(user);
|
||||
userInfo.statusName = Steam::Proxy::SteamFriends->GetFriendRichPresence(user, "iw4x_status");
|
||||
userInfo.prestige = Utils::Cryptography::Rand::GenerateInt() % (10 + 1);
|
||||
userInfo.experience = Utils::Cryptography::Rand::GenerateInt() % (2516000 + 1);*/
|
||||
|
||||
/* qsort(Friends::FriendsList.data(), Friends::FriendsList.size(), sizeof(Friends::Friend), [](const void* first, const void* second)
|
||||
{
|
||||
const Friends::Friend* friend1 = static_cast<const Friends::Friend*>(first);
|
||||
const Friends::Friend* friend2 = static_cast<const Friends::Friend*>(second);
|
||||
|
||||
std::string name1 = Utils::String::ToLower(Colors::Strip(friend1->name));
|
||||
std::string name2 = Utils::String::ToLower(Colors::Strip(friend2->name));
|
||||
|
||||
return name1.compare(name2);
|
||||
});*/
|
||||
}
|
||||
|
||||
void Friends::UpdateFriends()
|
||||
@ -160,13 +131,24 @@ namespace Components
|
||||
|
||||
if (entry == Friends::FriendsList.end()) return;
|
||||
|
||||
if(key == "iw4x_status")
|
||||
if (key == "iw4x_status")
|
||||
{
|
||||
entry->statusName = value;
|
||||
}
|
||||
else if(key == "iw4x_rank")
|
||||
else if (key == "iw4x_server")
|
||||
{
|
||||
if(value.size() == 4)
|
||||
entry->server = value;
|
||||
|
||||
// TODO: Query server here?
|
||||
if (entry->server.getType() != Game::NA_BAD)
|
||||
{
|
||||
Node::AddNode(entry->server);
|
||||
Network::SendCommand(entry->server, "getinfo", Utils::Cryptography::Rand::GenerateChallenge());
|
||||
}
|
||||
}
|
||||
else if (key == "iw4x_rank")
|
||||
{
|
||||
if (value.size() == 4)
|
||||
{
|
||||
int data = *reinterpret_cast<int*>(const_cast<char*>(value.data()));
|
||||
|
||||
@ -177,6 +159,44 @@ namespace Components
|
||||
}
|
||||
}
|
||||
|
||||
void Friends::InfoResponse(std::vector<std::string> params)
|
||||
{
|
||||
if (params.size() >= 1)
|
||||
{
|
||||
std::lock_guard<std::recursive_mutex> _(Friends::Mutex);
|
||||
|
||||
SteamID id;
|
||||
id.Bits = strtoull(params[0].data(), nullptr, 16);
|
||||
|
||||
auto entry = std::find_if(Friends::FriendsList.begin(), Friends::FriendsList.end(), [id](Friends::Friend entry)
|
||||
{
|
||||
return (entry.userId.Bits == id.Bits);
|
||||
});
|
||||
|
||||
if (entry == Friends::FriendsList.end()) return;
|
||||
|
||||
for(unsigned int i = 1; i < params.size(); i += 2)
|
||||
{
|
||||
if ((i + 1) >= params.size()) break;
|
||||
std::string key = params[i];
|
||||
std::string value = params[i + 1];
|
||||
|
||||
if(key == "name")
|
||||
{
|
||||
entry->name = value;
|
||||
}
|
||||
else if(key == "state")
|
||||
{
|
||||
entry->online = atoi(value.data()) != 0;
|
||||
}
|
||||
else
|
||||
{
|
||||
Friends::PresenceResponse({ Utils::String::VA("%llx", id.Bits), key, value });
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
void Friends::FriendsResponse(std::vector<std::string> params)
|
||||
{
|
||||
std::lock_guard<std::recursive_mutex> _(Friends::Mutex);
|
||||
@ -204,18 +224,9 @@ namespace Components
|
||||
|
||||
Friends::FriendsList.push_back(entry);
|
||||
|
||||
Friends::UpdateUserInfo(id);
|
||||
|
||||
Proto::IPC::Function function;
|
||||
function.set_name("getName");
|
||||
*function.add_params() = Utils::String::VA("%llx", id.Bits);
|
||||
IPCHandler::SendWorker("friends", function.SerializeAsString());
|
||||
|
||||
function.Clear();
|
||||
function.set_name("getPresence");
|
||||
*function.add_params() = Utils::String::VA("%llx", id.Bits);
|
||||
*function.add_params() = "iw4x_status";
|
||||
IPCHandler::SendWorker("friends", function.SerializeAsString());
|
||||
|
||||
function.Clear();
|
||||
function.set_name("requestPresence");
|
||||
*function.add_params() = Utils::String::VA("%llx", id.Bits);
|
||||
IPCHandler::SendWorker("friends", function.SerializeAsString());
|
||||
@ -263,6 +274,7 @@ namespace Components
|
||||
fInterface->map("friendsResponse", Friends::FriendsResponse);
|
||||
fInterface->map("nameResponse", Friends::NameResponse);
|
||||
fInterface->map("presenceResponse", Friends::PresenceResponse);
|
||||
fInterface->map("infoResponse", Friends::InfoResponse);
|
||||
}
|
||||
|
||||
Friends::~Friends()
|
||||
|
@ -54,5 +54,6 @@ namespace Components
|
||||
static void FriendsResponse(std::vector<std::string> params);
|
||||
static void NameResponse(std::vector<std::string> params);
|
||||
static void PresenceResponse(std::vector<std::string> params);
|
||||
static void InfoResponse(std::vector<std::string> params);
|
||||
};
|
||||
}
|
||||
|
@ -93,18 +93,7 @@ namespace Handlers
|
||||
response.set_name("presenceResponse");
|
||||
*response.add_params() = Utils::String::VA("%llX", id.Bits);
|
||||
*response.add_params() = params[1].data();
|
||||
|
||||
std::string* value = response.add_params();
|
||||
*value = Steam::Proxy::SteamFriends->GetFriendRichPresence(id, params[1].data());
|
||||
|
||||
if (params[1] == "iw4x_rank")
|
||||
{
|
||||
int experience = Utils::Cryptography::Rand::GenerateInt() % (2516000 + 1);
|
||||
int prestige = Utils::Cryptography::Rand::GenerateInt() % (10 + 1);
|
||||
|
||||
int data = (experience & 0xFFFFFF) | ((prestige << 24) & 0xFF);
|
||||
*value = std::string(reinterpret_cast<char*>(&data), 4);
|
||||
}
|
||||
*response.add_params() = Steam::Proxy::SteamFriends->GetFriendRichPresence(id, params[1].data());
|
||||
|
||||
endpoint.send(this->getCommand(), response.SerializeAsString());
|
||||
}
|
||||
@ -121,6 +110,48 @@ namespace Handlers
|
||||
}
|
||||
}
|
||||
|
||||
void Friends::getInfo(Worker::Endpoint endpoint, std::vector<std::string> params)
|
||||
{
|
||||
if (params.size() >= 1 && Steam::Proxy::SteamFriends)
|
||||
{
|
||||
SteamID id;
|
||||
id.Bits = strtoull(params[0].data(), nullptr, 16);
|
||||
|
||||
Proto::IPC::Function response;
|
||||
response.set_name("infoResponse");
|
||||
*response.add_params() = Utils::String::VA("%llX", id.Bits);
|
||||
|
||||
for(unsigned int i = 1; i < params.size(); ++i)
|
||||
{
|
||||
std::string key = params[i];
|
||||
*response.add_params() = key;
|
||||
|
||||
if(key == "name")
|
||||
{
|
||||
*response.add_params() = Steam::Proxy::SteamFriends->GetFriendPersonaName(id);
|
||||
}
|
||||
else if(key == "state")
|
||||
{
|
||||
*response.add_params() = Utils::String::VA("%d", Steam::Proxy::SteamFriends->GetFriendPersonaState(id));
|
||||
}
|
||||
else if (key == "iw4x_rank") // This is just a test
|
||||
{
|
||||
int experience = Utils::Cryptography::Rand::GenerateInt() % (2516000 + 1);
|
||||
int prestige = Utils::Cryptography::Rand::GenerateInt() % (10 + 1);
|
||||
|
||||
int data = (experience & 0xFFFFFF) | ((prestige << 24) & 0xFF);
|
||||
*response.add_params() = std::string(reinterpret_cast<char*>(&data), 4);
|
||||
}
|
||||
else
|
||||
{
|
||||
*response.add_params() = Steam::Proxy::SteamFriends->GetFriendRichPresence(id, key.data());
|
||||
}
|
||||
}
|
||||
|
||||
endpoint.send(this->getCommand(), response.SerializeAsString());
|
||||
}
|
||||
}
|
||||
|
||||
Friends::Friends()
|
||||
{
|
||||
using namespace std::placeholders;
|
||||
@ -129,6 +160,7 @@ namespace Handlers
|
||||
this->addFunction("setPresence", std::bind(&Friends::setPresence, this, _1, _2));
|
||||
this->addFunction("getPresence", std::bind(&Friends::getPresence, this, _1, _2));
|
||||
this->addFunction("requestPresence", std::bind(&Friends::requestPresence, this, _1, _2));
|
||||
this->addFunction("getInfo", std::bind(&Friends::getInfo, this, _1, _2));
|
||||
}
|
||||
|
||||
Friends::~Friends()
|
||||
|
@ -22,5 +22,6 @@ namespace Handlers
|
||||
void setPresence(Worker::Endpoint endpoint, std::vector<std::string> params);
|
||||
void getPresence(Worker::Endpoint endpoint, std::vector<std::string> params);
|
||||
void requestPresence(Worker::Endpoint endpoint, std::vector<std::string> params);
|
||||
void getInfo(Worker::Endpoint endpoint, std::vector<std::string> params);
|
||||
};
|
||||
}
|
||||
|
Loading…
Reference in New Issue
Block a user