summaryrefslogtreecommitdiff
path: root/protocols/Steam/src
diff options
context:
space:
mode:
Diffstat (limited to 'protocols/Steam/src')
-rw-r--r--protocols/Steam/src/steam_messages.cpp45
-rw-r--r--protocols/Steam/src/steam_proto.cpp5
-rw-r--r--protocols/Steam/src/steam_proto.h2
3 files changed, 28 insertions, 24 deletions
diff --git a/protocols/Steam/src/steam_messages.cpp b/protocols/Steam/src/steam_messages.cpp
index b6a4ee7bc3..f41ec3b84f 100644
--- a/protocols/Steam/src/steam_messages.cpp
+++ b/protocols/Steam/src/steam_messages.cpp
@@ -1,17 +1,13 @@
#include "stdafx.h"
-void CSteamProto::SendFriendMessage(uint32_t msgId, int64_t steamId, const char *pszMessage)
+int64_t CSteamProto::SendFriendMessage(EChatEntryType entry_type, int64_t steamId, const char *pszMessage)
{
CFriendMessagesSendMessageRequest request;
- request.chat_entry_type = (int)EChatEntryType::ChatMsg; request.has_chat_entry_type = true;
+ request.chat_entry_type = (int)entry_type; request.has_chat_entry_type = true;
request.contains_bbcode = request.has_contains_bbcode = true;
request.steamid = steamId; request.has_steamid = true;
request.message = (char *)pszMessage;
-
- auto iSourceId = WSSendService(FriendSendMessage, request);
- mir_cslock lck(m_csOwnMessages);
- if (COwnMessage *pOwn = m_arOwnMessages.find((COwnMessage *)&msgId))
- pOwn->iSourceId = iSourceId;
+ return WSSendService(FriendSendMessage, request);
}
void CSteamProto::OnMessageSent(const CFriendMessagesSendMessageResponse &reply, const CMsgProtoBufHeader &hdr)
@@ -48,20 +44,30 @@ void CSteamProto::OnMessageSent(const CFriendMessagesSendMessageResponse &reply,
void CSteamProto::OnGotIncomingMessage(const CFriendMessagesIncomingMessageNotification &reply, const CMsgProtoBufHeader &)
{
- MCONTACT hContact = GetContact(AccountIdToSteamId(reply.steamid_friend));
+ MCONTACT hContact = GetContact(reply.steamid_friend);
if (!hContact) {
debugLogA("message from unknown account %lld ignored", reply.steamid_friend);
return;
}
- DB::EventInfo dbei;
- dbei.flags = DBEF_UTF;
- if (reply.has_local_echo && reply.local_echo)
- dbei.flags |= DBEF_SENT;
- dbei.cbBlob = (int)mir_strlen(reply.message);
- dbei.pBlob = reply.message;
- dbei.timestamp = reply.has_rtime32_server_timestamp ? reply.rtime32_server_timestamp : time(0);
- ProtoChainRecvMsg(hContact, dbei);
+ switch (EChatEntryType(reply.chat_entry_type)) {
+ case EChatEntryType::ChatMsg:
+ {
+ DB::EventInfo dbei;
+ dbei.flags = DBEF_UTF;
+ if (reply.has_local_echo && reply.local_echo)
+ dbei.flags |= DBEF_SENT;
+ dbei.cbBlob = (int)mir_strlen(reply.message);
+ dbei.pBlob = reply.message;
+ dbei.timestamp = reply.has_rtime32_server_timestamp ? reply.rtime32_server_timestamp : time(0);
+ ProtoChainRecvMsg(hContact, dbei);
+ }
+ break;
+
+ case EChatEntryType::Typing:
+ CallService(MS_PROTO_CONTACTISTYPING, hContact, 10);
+ break;
+ }
}
/////////////////////////////////////////////////////////////////////////////////////////
@@ -69,10 +75,7 @@ void CSteamProto::OnGotIncomingMessage(const CFriendMessagesIncomingMessageNotif
int CSteamProto::UserIsTyping(MCONTACT hContact, int type)
{
// NOTE: Steam doesn't support sending "user stopped typing" so we're sending only positive info
- if (type == PROTOTYPE_SELFTYPING_OFF)
- return 0;
-
- ptrA steamId(getStringA(hContact, DBKEY_STEAM_ID));
- //SendRequest(new SendTypingRequest(m_szAccessToken, m_szUmqId, steamId));
+ if (type == PROTOTYPE_SELFTYPING_ON)
+ SendFriendMessage(EChatEntryType::Typing, GetId(hContact, DBKEY_STEAM_ID), "");
return 0;
}
diff --git a/protocols/Steam/src/steam_proto.cpp b/protocols/Steam/src/steam_proto.cpp
index c61ba628cd..2fcbfb72f3 100644
--- a/protocols/Steam/src/steam_proto.cpp
+++ b/protocols/Steam/src/steam_proto.cpp
@@ -213,12 +213,13 @@ int CSteamProto::SendMsg(MCONTACT hContact, MEVENT, const char *message)
return -1;
UINT hMessage = InterlockedIncrement(&hMessageProcess);
+ auto *pOwn = new COwnMessage(hContact, hMessage);
{
mir_cslock lck(m_csOwnMessages);
- m_arOwnMessages.insert(new COwnMessage(hContact, hMessage));
+ m_arOwnMessages.insert(pOwn);
}
- SendFriendMessage(hMessage, GetId(hContact, DBKEY_STEAM_ID), message);
+ pOwn->iSourceId = SendFriendMessage(EChatEntryType::ChatMsg, GetId(hContact, DBKEY_STEAM_ID), message);
return hMessage;
}
diff --git a/protocols/Steam/src/steam_proto.h b/protocols/Steam/src/steam_proto.h
index 17d62c3a75..02a613c617 100644
--- a/protocols/Steam/src/steam_proto.h
+++ b/protocols/Steam/src/steam_proto.h
@@ -253,7 +253,7 @@ class CSteamProto : public PROTO<CSteamProto>
mir_cs m_csOwnMessages;
OBJLIST<COwnMessage> m_arOwnMessages;
- void SendFriendMessage(uint32_t msgId, int64_t steamId, const char *pszMessage);
+ int64_t SendFriendMessage(EChatEntryType, int64_t steamId, const char *pszMessage);
void OnGotIncomingMessage(const CFriendMessagesIncomingMessageNotification &reply, const CMsgProtoBufHeader &hdr);
void OnMessageSent(const CFriendMessagesSendMessageResponse &reply, const CMsgProtoBufHeader &hdr);
int __cdecl OnPreCreateMessage(WPARAM, LPARAM lParam);