用于即时消息收发的方法和设备的制作方法

文档序号:6537235阅读:173来源:国知局
专利名称:用于即时消息收发的方法和设备的制作方法
技术领域
本发明涉及用于即时消息收发的方法和设备。
背景技术
在即时消息收发系统中,见图1,用户1A命令消息收发应用程序2A通过网络3向和从其他用户1B...1N的任何消息收发应用程序2B...2N发送和接收消息。给定精确连续的一连串消息,则有可能通过将结构放在消息内容中而沟通会话结构,使得其他用户1B...1N能理解,然而在实时聊天中,这扰乱了对话的流程。在大多数即时消息收发系统中,即使对于两个人之间的会话也存在多线程的讨论,并且在线程之间可发生混淆。如果例如“是”的简单回答到达得有点太晚,则其好象是对于一个不同线程的回答,并传达了错误的含义。时间浪费在解释“是”响应于哪个线程上。如果出现误解并不加以解决,则浪费更多时间。

发明内容
根据本发明的第一方面,提供了一种即时消息收发系统中的方法,该方法包括接收多于一条消息;基于每一消息的定时而定义消息结构;根据该定义的结构显示该消息;确定第一消息和第二消息的用户选择,其中在该消息结构中,第二消息不直接跟在第一消息之后;改变该用户选择的消息的消息结构,使得第二消息直接跟在第一消息之后;和根据该改变的消息结构而重新显示该消息。
通过改变显示的消息顺序,可以不管在线聊天的异步性质而表示会话结构。这在多用户聊天对话以及一对一会话中是有用的。该方案通过增加对动态会话结构的支持而对现有技术进行了改善。结构是通常通过在基于文本的异步通信中容易丢失的语调、手势和定时而表达的会话的一部分。利用本方案,有可能在发送和接收消息之后,对消息进行相关和再相关。所有消息在第一结构中被初始相关。第一消息标记会话的开始,而随后的消息将具有前驱消息,并因此系统对任何新消息和上次发送的消息进行相关。如果与用户完成并分派该消息时相反地、在用户第一次开始该消息时这么做,则与用户意图较接近的近似将被捕获并传达给其他用户。
所以,该消息顺序可基于发送每一消息的时间。可替换地并有利地,该消息顺序可基于创建每一消息的时间。
有利地,该方法还包括标记该第二消息相对于第一消息缩进(indent);并且以该缩进和改变的消息顺序而重新显示该消息。
图形用户接口可在即时消息收发对话中为每一消息显示包含加重点的小空区(margin),并且这些加重点可由用户在彼此之上拖放以指示消息之间的相关。可替换地,整个消息可在另一消息上拖放。
消息排序的任何改变被传播到该会话中的所有用户。由如上所述的用户相互作用而产生相关。消息结构的改变作为控制消息而以与任何其他消息在该消息收发系统中传播相同的方式在该即时消息收发系统中传播,使得每一控制消息到达每一消息收发应用程序一次。
为了产生一条相关信息,用户必须为该消息的始发者。
相关中仅涉及两条消息。图形用户接口(GUI)代表该关联是唯一的,因此用户明白发生了相关的改变,而不是其他相关。
不允许闭合的直接或间接消息引用,即如果消息A已响应于消息B,则消息B不能响应于消息A。


为了促进对本发明的这个和其他方面的更全面的理解,现在将参考附图仅通过例子来描述本发明的实施例,其中图1是基本的即时消息收发系统的概述;图2是根据优选实施例的包括控制消息的图1的更详细的示意图;图3是优选实施例需要的结构的类图;图4是本实施例的方法流程图;图5是优选实施例中的示例会话的次序图;图6A是相关之前的图5的三种消息的显示的表示;和图6B是相关之后的相同的三种消息的显示的表示。
具体实施例方式
图2是根据优选实施例的即时消息收发系统的使用例子图。在即时消息收发系统中,用户命令消息收发应用程序2A通过网络3向和从任何消息收发应用程序2B...2N发送和接收消息。每一消息收发应用程序2A...2N包含通信层4(4A...4N);消息收发引擎5(5A...5N);和图形用户接口(GUI)6(6A...6N)。每一消息收发应用程序5A...5N可发送消息7(7A,7B)和8(8A,8B)会话中的第一消息是第一前驱消息,而下一消息是第一后继消息,每一用户消息是前一消息(如果存在一个)的后继和后一消息(如果存在一个)的前驱。每一消息收发应用程序5A...5N可发送控制消息8A、8B以使接收的用户消息7A、7B相关,即,迫使现有用户消息成为另一用户消息的后继。每一消息收发应用程序能接收用户消息7A、7B和控制消息8A、8B。
图3图示了优选实施例需要的消息收发引擎的对象结构。该消息收发引擎5A包括以下对象MessageFactory 10;AbstractMessage 12;UserMessages14A到14N;TextMessage 16;Conversation 18;Participants 20A到20N;ControlMessage 22;和Correlations 24A...24N。
MessageFactory 10包括deserializeMessage()方法26;getMessage()方法28;createUserMessage()方法30;和createCorrelation()方法32。deserializeMessage()26把串行比特的字符串视作来自Conversation18的输入,并对其进行解串行化处理以为Conversation18形成具有id的UserMessage14A;UserMessage 14A存储在某存储器引导(reference)处,并且返回其id作为该方法的输出。getMessage()方法28将消息id视作输入,并返回关联的UserMessage 14A存储器引导作为输出。createUserMessage()方法30创建来自合适类的UserMessage 14A,在某存储器引导处存储它,并返回新对象的id。createCorrelation()方法32创建新Correlation对象24A并返回新对象的id。MessageFactory 10也包括AbatractMessage类12(见白色菱形箭头),它给予MessageFactory 10创建UserMessages 14A到14N和Correlations 24A...24N的能力。
AbstractMessage类12是UserMessages 14A...14N;TextMessage 16A...16N;ControlMessage 22和Correlations 24A...24N的基类(如白色三角形箭头所示)。基于该类的消息的创始者的标识符被存储在称作originatorName 34的字符串中。该originatorName标识符引用Participant对象(如+originator箭头所示)。基于该类的消息的标识符存储在称作id的字符串36中。
UserMessage 14A...14N将predecessorId字符串38和correlateTo()方法40添加到AbstractMessage类12中。predecessorId 38包含由自引用+predecessor箭头指示的前一UserMessage的Id。correlateTo()方法40将新前驱视作自变量,并以此换取predecessorId字符串38中的值,将现有前驱id返回到调用的例程。
TextMessage 16A...16N是另外包括消息文本字符串的一类UserMessage。其他种类的UserMessage包括含有文件、画面、声音消息或其组合的消息。在该描述中,一般使用UserMessage来描述除了该例中的文本之外的所有消息。
Conversation对象18代表几个Participant 20A...20N之间的一般会话。Conversation 18包括sendMessage()方法42;add()方法44;update view()方法46;newUserMessage()方法48;newCorrelation()方法50和messageList 52。Conversation 18还包括Participants 20A...20N和UserMessages 14A...14N。会话18代表特定会话;Conversation 18具有与其关联的一个或多个Participant对象20A...20N以及与其关联的零或多个UserMessages 14A...14N。sendMessage()方法42从通信层4接收串行比特流并调用MessageFactory 10的deserializeMessage方法26。返回UserMessage 14A的Id 36。add()方法44获得UserMessage Id 36并将其添加到messageList 52。updateView()方法46调用具有messageList 52的GUI 6作为参数,以更新具有该改变的messageList52的显示。当发送新消息时,newUserMessage()方法48从GUI 6接受用户输入;该方法请求MessageFactory createUserMessage 30创建Conversation 18的新消息;返回该新消息的id。当将对消息进行相关时,Correlation()方法50从GUI 6接受用户输入。两类Correlation对象24是可能的缺省相关和特定相关,当调用该方法时,通过包括作为参数的缩进标记而指示该特殊类型。
Participant 20A...20N包括用于存储参与者的姓名的name字符串54。从该类例示的每一Participant 20A...20N将代表会话中的参与者。
ControlMessage 22是一类AbstractMessage 12,而Correlation 24是一类ControlMessage 22。
Correlation 24包括predecessorId字符串56;successorId字符串58;getPredecessor()方法60;和getSuccessor()方法62。例示的Correlation 24是在始发者消息收发应用程序2A和其他参与者的消息收发应用程序2B...2N中改变预先存在的UserMessage 14的后继的特定控制消息。用户在利用GUI 6之后调用Correlation方法50以选择两个消息(例如图6A中的msg1和msg3)前驱(图5、6A和6B中的msg1)和后继(图5、6A和6B中的msg3)。所选消息的Id存储在新创建的Correlation 24的predecessorId 56和successorId58中。如果后继消息将被缩进(图6B中),然后将缩进标记存储在successorId字符串58中。getPredecessor()方法60从MessageFactory 10获取存储器引导。getPredecessor()方法60和getSuccessor()方法62分别返回前驱和后继消息的存储器引导。前驱存储器引导被传递到后继存储器引导的UserMessage的correlateTo()方法40。
所有UserMessage 14A...14N具有唯一id,并且即使存储器引导不同,所有客户机处理上的id也将相同。UserMessage被增强以包括前驱消息id。在创建UserMessage 14A时标识前驱id,并且通过分发UserMessage 14A自身,而将该前驱传播到所有同级(peer)。根据其示例的前驱id包含消息的内在部分。如果在消息被创建和传播到所有客户机之后,重新定义该前驱id,则该信息是必须由某些其他组件共享的新数据。该新数据利用Correlation 24而在同级处理之间传播。当在同级接收到该控制消息时,其被处理,得到的链路信息在本地会话中被更新,并更新该显示。
图4是优选实施例的方法流程400。
步骤402中,当创建消息时,Conversation 18接收该消息并进行记录。在替换实施例中,接收消息的时间就是记录消息的时间。在初始接收的消息是比特串时,sendMesage()42调用deserializeMessage()26并将该消息id返回到Conversation 18。
在步骤404中,如果消息是UserMessage 14,则Conversation方法add()44根据该消息创建时间而更新该会话的消息顺序。
在步骤406中,Conversation updateView()方法46以定义的消息顺序在该会话中显示消息。Conversation 18利用由每一UserMessage 14A...14N中的predecessorId 38定义的消息顺序和messageList 52来调用updateView()方法46。GUI中的标准方法用于提供屏幕图像。如果会话仍在进行,则该方法的控制返回移动到步骤402以进一步接收消息,否则在步骤412,该会话结束。
在步骤408,如果来自步骤402的消息是Correlation消息24,则Conversation add()方法44从Correlation获取predecessorId 56和successorId58。
在步骤410,add()方法44通过调用correlateTo()方法40而将由获取的successorId 58标识的UserMessage 14中的predecessorId 38改变为该确定的predecessorId 56。如果Correlation 24包括缩进标记,则该缩进标记被包括在predecessorId中。处理控制移动到步骤406以更新消息显示。
当不再有消息来临时,步骤412是处理的结束。
图5的次序图示出了从通信系统接收三种消息的消息收发同级会话模型的例子。该图包括7列,每列代表消息收发应用特征,而列之间的箭头代表特征之间的交互作用。这些列从左到右代表通信层4;Conversation对象18;messageFactory对象10;Correlation对象24A;第三TextMessage对象(msg3-14C);第二TextMessage对象(msg2-14B);和第一TextMessage对象(msg1-14A)。
在步骤501,通信层4将接收的消息比特流发送到合适的Conversation对象18,并触发sendMessage()方法42以处理对象比特流。在步骤502,将对象比特流发送到MessageFactory 10,并调用deserializeMessage()26来使流串行化。步骤503导致创建msg1。在步骤504,add()方法44将msg1添加到messageList 52。在步骤506,updateView()46刷新视图以显示该新消息。
在步骤508,通信层6象前面一样将接收的消息比特流发送到合适的Conversation,并触发sendMessage()方法42。在步骤510,将比特流发送到MessageFactory 10,并如前所述调用deserializeMessage()26。步骤512导致创建msg2。在步骤514,add()方法44将msg2添加到messageList 52。在步骤516,updateView()46刷新视图以显示msg1和msg2。
在步骤518,通信层6象前面一样将接收的消息比特流发送到合适的Conversation对象,并触发sendMessage()方法42。在步骤520,将比特流发送到MessageFactory 10,并如前所述调用deserializeMessage()26。步骤522导致创建msg3。在步骤524,add()方法44将msg3添加到messageList 52。在步骤526,updateView()刷新视图以显示msg1、msg2和msg3,如图6A所示。
在步骤528,通信层6象前面一样将接收的第四消息比特流发送到合适的Conversation对象,并触发sendMessage()方法42。在步骤530,将比特流发送到MessageFactory 10,并如前所述调用deserializeMessage()26。步骤532导致创建Correlation消息(ctrlMsg-24A)。在该例子中,该Correlation控制消息用于使msg3和msg1相关。在步骤534,Conversation 18调用有关Correlation 24A的getPredecessor 60,其依次调用MessageFactory中的getMessage 28(步骤536),该消息的存储器引导返回到Conversation 18。在步骤538,Conversation 18调用关于Correlation 24A的getSuccessor 62,其依次调用MessageFactory 10中的getMessage 28(步骤540),该消息的存储器引导返回到Conversation 18。在步骤542,Conversation 18利用从MessageFactory 10和Correlation 24A获取的存储器引导以及id而调用correlateTo()方法40。更新模型以反映该改变,并然后更新视图(步骤544),结果示于图6B中。
图6A示出了msg1、msg2和msg3的原始结构,并也用阴影框指示GUI已选择了msg1和msg3。
图6B示出了具有从msg1下垂并缩进的msg3的UserMessage的新结构。
消息收发应用系统的描述用于从消息收发网络中的其他用户接收消息方面,但相同的原理可应用于由第一用户本地产生的UserMessage和Correlation。
权利要求
1.一种即时消息收发系统中的方法,所述方法包括接收多于一条消息;基于每一消息的定时而定义消息结构;以该定义的结构显示该消息;确定第一消息和第二消息的用户选择,其中在该消息结构中,第二消息不直接跟在第一消息之后;改变该消息结构,使得第二消息直接跟在第一消息之后;和以该改变的消息结构而重新显示该消息。
2.根据权利要求1的方法,还包括确定用户要求该选择的第二消息具有与第一消息不同的结构水平;和改变该消息结构,使得第二消息跟在第一消息之后并具有与第一消息不同的层级。
3.根据权利要求2的方法,其中该不同的层级导致第二消息相对于第一消息结构缩进显示。
4. 根据权利要求1的方法,其中该消息结构基于发送每一消息的时间,或者该消息结构基于创建每一消息的时间。
5.根据权利要求1到4的任一项权利要求所述的方法,还包括显示用户在彼此之上拖放的图形表示,以指示消息之间的相关。
6.根据权利要求1到5的任一项权利要求所述的方法,其中该方法运行在该系统中的多个应用程序中的每一个上并且一个应用程序中的消息结构的任何改变被传播到该系统中的所有应用程序。
7.根据权利要求6的方法,其中控制消息在该系统中传播使得每一控制消息到达每一应用程序一次。
8.根据权利要求1到7的任一项权利要求所述的方法,其中消息仅响应于一个其他消息。
9.根据权利要求1到8的任一项权利要求所述的方法,其中如果第二消息已响应于第一消息,则第一消息不能响应于第二消息。
10.一种即时消息收发设备,包括用于接收多于一条消息的装置;用于基于每一消息的定时而定义消息结构的装置;用于以该定义的结构显示该消息的装置;用于确定第一消息和第二消息的用户选择的装置,其中在该消息结构中,第二消息不直接跟在第一消息之后;用于改变该消息结构以使得第二消息直接跟在第一消息之后的装置;和用于以该改变的消息结构而重新显示该消息的装置。
11.根据权利要求10的设备,还包括用于确定用户要求该选择的第二消息具有与第一消息不同的结构水平的装置;和用于改变该消息结构以使得第二消息跟在第一消息之后并具有与第一消息不同的层级的装置。
12.根据权利要求11的设备,其中该不同的层级导致第二消息相对于第一消息结构缩进显示。
13.根据权利要求10、11或12的设备,其中该消息结构基于发送每一消息的时间,或者其中该消息结构基于用户开始每一消息的时间。
14.根据权利要求10到13的任一项权利要求所述的设备,还包括用于显示用户在彼此之上拖放的图形表示以指示消息之间的相关的装置。
15.根据权利要求10到14的任一项权利要求所述的设备,具有对应设备,并且该设备中的消息结构的任何改变被传播到该对应设备。
16.根据权利要求15的设备,其中控制消息被传播到该对应设备。
17.根据权利要求10到16的任一项权利要求所述的设备,其中消息仅响应于一个其他消息。
18.根据权利要求10到17的任一项权利要求所述的设备,其中如果第二消息已响应于第一消息,则第一消息不能响应于第二消息。
19.一种用于处理一个或多个数据处理任务集的计算机程序产品,所述计算机程序产品包括在计算机可读存储介质上存储的计算机程序指令,当所述计算机程序指令被装载到计算机中并运行时,其使得计算机执行步骤接收多于一条消息;基于每一消息的定时而定义消息结构;以该定义的结构显示该消息;确定第一消息和第二消息的用户选择,其中在该消息结构中,第二消息不直接跟在第一消息之后;改变该消息结构,使得第二消息直接跟在第一消息之后;和以该改变的消息结构而重新显示该消息。
全文摘要
本发明涉及一种用于即时消息收发的方法、设备和计算机程序产品,该方法包括从一个或多个即时消息收发应用程序接收多于一条用户消息;基于每一消息的创建时间而定义用户消息结构;以包括顺序和层级的所定义的结构显示该消息;确定第一消息和第二消息的用户选择,其中在该消息结构中,第二消息不直接跟在第一消息之后;改变该消息结构,使得第二消息直接跟在第一消息之后并移动到相对于该第一消息所选择的层级;和以该改变的消息结构而重新显示该消息。
文档编号G06Q10/00GK1716919SQ20051005266
公开日2006年1月4日 申请日期2005年3月3日 优先权日2004年7月1日
发明者约瑟夫·K·查科, 戴维·L·格尔德, 阿拉斯代尔·诺丁汉 申请人:国际商业机器公司
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1