summaryrefslogtreecommitdiff
path: root/protocols/Steam/src/steam_ws.cpp
diff options
context:
space:
mode:
Diffstat (limited to 'protocols/Steam/src/steam_ws.cpp')
-rw-r--r--protocols/Steam/src/steam_ws.cpp41
1 files changed, 36 insertions, 5 deletions
diff --git a/protocols/Steam/src/steam_ws.cpp b/protocols/Steam/src/steam_ws.cpp
index 27d244c45c..41acb5efbb 100644
--- a/protocols/Steam/src/steam_ws.cpp
+++ b/protocols/Steam/src/steam_ws.cpp
@@ -288,16 +288,47 @@ void CSteamProto::WSSendHeader(EMsg msgType, const CMsgProtoBufHeader &hdr, cons
m_ws->sendBinary(hdrbuf.data(), hdrbuf.length());
}
-int64_t CSteamProto::WSSendService(const char *pszServiceName, const ProtobufCppMessage &msg, bool bAnon)
+void CSteamProto::WSSendAnon(const char *pszServiceName, const ProtobufCppMessage &msg)
{
CMsgProtoBufHeader hdr;
hdr.has_client_sessionid = hdr.has_steamid = hdr.has_jobid_source = hdr.has_jobid_target = true;
- if (!bAnon)
- hdr.steamid = m_iSteamId, hdr.client_sessionid = m_iSessionId;
hdr.jobid_source = getRandomInt();
hdr.jobid_target = -1;
hdr.target_job_name = (char *)pszServiceName;
- WSSendHeader(bAnon ? EMsg::ServiceMethodCallFromClientNonAuthed : EMsg::ServiceMethodCallFromClient, hdr, msg);
+ WSSendHeader(EMsg::ServiceMethodCallFromClientNonAuthed, hdr, msg);
+}
+
+void CSteamProto::WSSendService(const char *pszServiceName, const ProtobufCppMessage &msg, void *pInfo)
+{
+ CMsgProtoBufHeader hdr;
+ hdr.has_client_sessionid = hdr.has_steamid = hdr.has_jobid_source = hdr.has_jobid_target = true;
+ hdr.steamid = m_iSteamId, hdr.client_sessionid = m_iSessionId;
+ hdr.jobid_source = getRandomInt();
+ hdr.jobid_target = -1;
+ hdr.target_job_name = (char *)pszServiceName;
+
+ if (pInfo)
+ SetRequestInfo(hdr.jobid_source, pInfo);
- return hdr.jobid_source;
+ WSSendHeader(EMsg::ServiceMethodCallFromClient, hdr, msg);
+}
+
+/////////////////////////////////////////////////////////////////////////////////////////
+
+void CSteamProto::SetRequestInfo(uint64_t requestId, void *pInfo)
+{
+ mir_cslock lck(m_csRequestLock);
+ m_requestInfo[requestId] = pInfo;
+}
+
+void* CSteamProto::GetRequestInfo(uint64_t requestId)
+{
+ mir_cslock lck(m_csRequestLock);
+ auto it = m_requestInfo.find(requestId);
+ if (it == m_requestInfo.end())
+ return nullptr;
+
+ void *pRet = it->second;
+ m_requestInfo.erase(it);
+ return pRet;
}