从ejabberd检索聊天记录时如何识别已发送和未发送的消息?

时间:2019-01-04 15:38:52

标签: xmpp ejabberd bosh strophe.js

我正在使用以下代码检索聊天记录。在视图中,我需要显示消息的滴答声,无论是否传递。但是,已传递和未传递消息的消息节结构相同。因此,如何在不设置外部数据库的情况下区分已传递和未传递的邮件。

这是我在service.ts文件中的代码:

this.Connection.mam.query(from, {
    with: to,
    before: '',
    max: '10',
    onMessage: (message) = > {
        console.log(message);
    },
    onComplete: (response) = > {
        console.log('Got all the messages');
    }
});

我得到的输出是:

<message
    xmlns=​"jabber:​client" to=​"sashank@localhost/​9158846669251631426100" from=​"sashank@localhost">​

    <result
        xmlns=​"urn:​xmpp:​mam:​2" id=​"1546597812368545">​

        <forwarded
            xmlns=​"urn:​xmpp:​forward:​0">​

            <message
                xmlns=​"jabber:​client" xml:lang=​"en" 
         to="murali@localhost" from=​"sashank@localhost/​18846625227131105454610" type=​"chat" id=​"0777d27e-7238-42ba-9063-78185c05e76d">​

                <archived
                    xmlns=​"urn:​xmpp:​mam:​tmp" by=​"sashank@localhost" id=​"1546597812368545">​

                </archived>​

                <stanza-id
                    xmlns=​"urn:​xmpp:​sid:​0" by=​"sashank@localhost" id=​"1546597812368545">​

                </stanza-id>​

                <request
                    xmlns=​"urn:​xmpp:​receipts">​

                </request>​

                <body>​Hello buddy! How are you</body>​

            </message>​

            <delay
                xmlns=​"urn:​xmpp:​delay" from=​"localhost" stamp=​"2019-01-04T10:​30:​12.368545Z">​

            </delay>​

        </forwarded>​

    </result>​

</message>​

这是已传递的消息,未传递的消息在节结构中看起来也一样,没有额外的属性。谢谢!

1 个答案:

答案 0 :(得分:0)

这是正确的。他们看起来一样。 MAM存储仅存储“消息”节的提要,包括带有正文,状态消息等的消息。因此,您需要获取此提要,然后在客户端进行后处理-获取带有正文的消息,然后获取状态并将其映射到他们的信息。然后才将处理后的数据显示给最终用户。

这不是一种很干净的方法,但这就是MAM的工作原理