1

当手机收到新短信时,我的应用程序会向电脑发送通知。如果重要的话,我正在通过蓝牙进行操作。

(这与PC端有关)

我正在努力的是跟踪每个联系人的消息。我正在考虑建立一个随着新联系人的加入而增长的链表。每个节点都将代表一个新联系人。

将有另一个垂直增长的列表,这将是该联系人的消息。

这是一个图表,可以清楚地说明:

 =======================
| contact 1 | contact 2 ...
 =======================
    ||           ||         
 =========    =========
 | msg 0 |    | msg 0 |
 =========    =========
    ||           ||         
 =========    =========
 | msg 1 |    | msg 1 |
 =========    =========
    .            .
    .            .
    .            .

这将处理收到的消息,但我如何跟踪发送的响应?我是否将消息标记为 TAG_MSG_SENT、TAG_MSG_RECEIVED 等?

我没有为此部分编写代码,因为我想先进行设计。

为什么这有关系?

好吧,当用户单击列表中的联系人时,我希望能够在新窗口中显示这样的会话:

==============================
|          contact 1         |
==============================
|Received 0                  |
|                      Sent 0|
|                      Sent 1|
|Received 1                  |
==============================

我在 Windows 上使用 C/C++。

4

2 回答 2

1

简单的方法是使用现有的文件系统来存储消息,如下所示:-

  1. 为特定文件夹中的每个联系人维护一个接收文件和发送文件。
  2. 将它们命名为contact-rec-file 和contact-sent-file。
  3. 每次您接收或发送消息。
  4. 将消息附加到相应的发送或接收文件
  5. 首先将消息的大小(以字节为单位)写入文件末尾
  6. 然后写下消息的内容。
  7. 每当您需要显示消息时打开文件
  8. 读取文件的大小,然后使用该大小读取消息的内容。

注意:使用主内存存储消息效率非常低,因为如果发送的消息更多,则会使用大量内存。

优化:-使用另一个文件来存储消息的数量及其在发送或接收文件中的查找位置,以便您可以在加载时读取该文件,然后如果您只读取特定消息,则直接查找文件到正确的位置。

于 2014-10-27T04:43:01.333 回答
0

这取决于您要跟踪的内容,如果您只想要发送和接收消息的统计信息,那么每个联系人的两个计数器就可以了。如果您只想要客户端发送和接收的消息,而不关心它们是如何交错的,那么每个客户端的 2 个列表就可以了。如果您还需要知道它们如何交错的顺序,那么正如您所建议的,一个带有附加标志的列表将起作用,该标志指示它是发送消息还是接收消息。当然还有其他可能性,这些只是为了让你开始。

好的,如果订单很重要,那么我还能想到另外两种方法:

1)在链表中,不是有一个指示状态的标志,而是有3个next指针,一个用于下一条消息,一个用于下一条发送消息,一个用于下一条接收消息。下一个消息指针将与其他消息指针具有相同的值,但这只是为了让您知道它们是如何交错的。因此,现在您可以轻松获取已发送消息、已接收消息或其他一些奇怪的消息的列表。

2) 只有 1 个链表/数组/表,每个条目将包含联系信息和 SENT/RECEIVED 标志。如果有很多关于您希望保留的联系人的其他信息,这并不好,因为现在需要复制它们。但为简单起见,只有 1 个列表而不是列表列表。要解决此问题,您可以创建一个仅包含联系信息的单独列表,并在消息链接列表中添加指向此联系信息列表的引用。您还可以在消息列表中创建一个 contacts_next_message 指针,这样您就可以使用它并获取所有联系人消息。

等等,有很多方法可以做到这一点。

于 2014-10-27T01:03:43.323 回答