summaryrefslogtreecommitdiff
path: root/protocols/Steam/src/steam_server.cpp
diff options
context:
space:
mode:
Diffstat (limited to 'protocols/Steam/src/steam_server.cpp')
-rw-r--r--protocols/Steam/src/steam_server.cpp33
1 files changed, 33 insertions, 0 deletions
diff --git a/protocols/Steam/src/steam_server.cpp b/protocols/Steam/src/steam_server.cpp
index c2d9469207..c6e50bf891 100644
--- a/protocols/Steam/src/steam_server.cpp
+++ b/protocols/Steam/src/steam_server.cpp
@@ -17,6 +17,39 @@ along with this program. If not, see <http://www.gnu.org/licenses/>.
#include "stdafx.h"
+void CSteamProto::SendFriendMessage(uint32_t msgId, int64_t steamId, const char *pszMessage)
+{
+ CMStringA szId(FORMAT, "%d", msgId);
+
+ CFriendMessagesSendMessageRequest request;
+ request.chat_entry_type = (int)EChatEntryType::ChatMsg; request.has_chat_entry_type = true;
+ request.client_message_id = szId.GetBuffer();
+ request.contains_bbcode = request.has_contains_bbcode = true;
+ request.steamid = steamId; request.has_steamid = true;
+ request.message = (char *)pszMessage;
+ WSSendService(FriendSendMessage, request);
+}
+
+void CSteamProto::OnMessageSent(const CFriendMessagesSendMessageResponse *pResponse)
+{
+ COwnMessage *pOwn;
+ {
+ mir_cslock lck(m_csOwnMessages);
+ pOwn = m_arOwnMessages.find((COwnMessage *)&pResponse->ordinal);
+ }
+
+ if (pOwn) {
+ uint32_t timestamp = (pResponse->has_server_timestamp) ? pResponse->server_timestamp : 0;
+ if (timestamp > getDword(pOwn->hContact, DB_KEY_LASTMSGTS))
+ setDword(pOwn->hContact, DB_KEY_LASTMSGTS, timestamp);
+
+ pOwn->timestamp = timestamp;
+ ProtoBroadcastAck(pOwn->hContact, ACKTYPE_MESSAGE, ACKRESULT_SUCCESS, (HANDLE)pOwn->iMessageId, 0);
+ }
+}
+
+/////////////////////////////////////////////////////////////////////////////////////////
+
void CSteamProto::SendHeartBeat()
{
CMsgClientHeartBeat packet;