如何跟踪服务器和客户端之间交换的消息?

时间:2014-10-27 00:42:59

标签: algorithm client chat server

我的应用在手机上收到新的短信时会向电脑发送通知。如果重要的话,我就是在蓝牙上做这件事。

(这与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 ++。

2 个答案:

答案 0 :(得分:1)

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

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

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

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

答案 1 :(得分:0)

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

好的,如果订单很重要,那么我还有两种方法可以让我想到这一点:

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

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

依此类推,有很多方法可以做到这一点。