- 浏览: 749961 次
- 性别:
- 来自: 北京
文章分类
最新评论
-
u011487470:
感觉就是知识采集一样,博主能不能整理一下
基于Web的IM简介 -
whxtbest:
whxtbest 写道2里面:如果T本身就是重复的话 比如 ...
关于后缀树的一些理解 -
whxtbest:
2里面:如果T本身就是重复的话 比如S是aaab,T是aa ...
关于后缀树的一些理解 -
刘亮love小雪:
谢谢啦
Java 2D高级绘图 -
bluky999:
收集的资料挺多的 哈哈
基于Web的IM简介
1。启动客户端界面程序InstantMessagingGUI,通过配置文件初始化SIP协议栈,界面以及好友列表;
2。初始化IM消息监听器ListenerInstantMessaging和用户代理IMUserAgent,ListenerInstantMessaging负责界面事件的处理,IMUserAgent实现接口SipListener;
3。IMUserAgent初始化IMAckProcessing,IMRegisterProcessing,IMByeProcessing,IMSubscribeProcessing,IMNotifyProcessing,IMInfoProcessing,IMMessageProcessing,IMPublishProcessing以及PresenceManager
用户代理IMUserAgent调用SipFactory来创建HeaderFactory,AddressFactory,
MessageFactory,SipStack;
4。SipStack创建ListeningPoint和SipProvider;
5。当点击注册按钮时,调用ListenerInstantMessaging的signMenuMouseClicked(MouseEvent mouseEvent)方法,该方法调用IMRegisterProcessing和IMPublishProcessing来进行处理登陆,imRegisterProcessing.signIn(localSipURL.trim())负责处理登陆,imRegisterProcessing.signOut(localSipURL.trim())负责处理离线退出。主要实现方法如下:
Request request=messageFactory.createRequest(requestURI,"REGISTER",
callIdHeader,cseqHeader,fromHeader,toHeader,viaList,maxForwardsHeader);
ClientTransaction clientTransaction=sipProvider.getNewClientTransaction(request);
clientTransaction.sendRequest();
如果用户选择离线,则imPublishProcessing.sendPublish(localSipURL.trim(),"offline")来发布离线消息。
6。IMUserAgent的方法processRequest(RequestEvent requestEvent)处理所有要发送的请求,主要实现如下:
if (request.getMethod().equals(Request.ACK)) {
imAckProcessing.processAck(requestCloned, serverTransaction);
}
else if (request.getMethod().equals(Request.BYE)) {
imByeProcessing.processBye(requestCloned,serverTransaction);
}
else if (request.getMethod().equals("MESSAGE")) {
imMessageProcessing.processMessage(requestCloned,
serverTransaction);
}
else if (request.getMethod().equals("INFO")) {
imInfoProcessing.processInfo(requestCloned,serverTransaction);
}
else if (request.getMethod().equals("SUBSCRIBE")) {
imSubscribeProcessing.processSubscribe
(requestCloned,serverTransaction);
}
else if (request.getMethod().equals("NOTIFY")) {
imNotifyProcessing.processNotify(requestCloned,serverTransaction);
}
方法processResponse(ResponseEvent responseEvent)处理所有收到的响应,主要实现如下:
if ( response.getStatusCode()==Response.OK ||
response.getStatusCode()==202 ){
if (cseqHeader.getMethod().equals("REGISTER") ) {
imRegisterProcessing.processOK(responseCloned,clientTransaction);
}
if (cseqHeader.getMethod().equals("MESSAGE") ) {
imMessageProcessing.processOK(responseCloned,clientTransaction);
}
if (cseqHeader.getMethod().equals("BYE") ) {
imByeProcessing.processOK(responseCloned,clientTransaction);
}
if (cseqHeader.getMethod().equals("SUBSCRIBE") ) {
imSubscribeProcessing.processOK(responseCloned,clientTransaction);
}
//Henrik Leion added NOTIFY processing
if (cseqHeader.getMethod().equals("NOTIFY") ) {
imNotifyProcessing.processOk(responseCloned,clientTransaction);
}
7。当用户注册登陆成功后,调用方法imRegisterProcessing.processOK(responseCloned,clientTransaction)来更新。更新界面显示,更新状态并且通知好友,订阅所有好友的状态,通知订阅的好友,重新打开正在进行的所有Chat sessions。好友的状态由PresenceManager来进行管理。
8。当用户状态改变时,通过如下方法:
IMNotifyProcessing imNotifyProcessing=imUA.getIMNotifyProcessing();
imNotifyProcessing.sendNotifyToAllSubscribers("open",localStatus);
来通知订阅者
9。当要进行聊天时,实例化RemoteSipURLFrame,在RemoteSipURLFrame里输入要聊天的对方URL,点确定后,产生ChatSessionManager来对会话进行管理。ChatSession负责会话,ChatFrame是会话框,按发送按钮时,会调用ChatSession的方法chatSession.sendIMActionPerformed(ActionEvent evt);来发送消息,然后sendIMActionPerformed(ActionEvent evt)方法会调用IMMessageProcessing的imMessageProcessing.sendMessage(localSipURL,remoteSipURL,text,this);来发送消息。发送的时候,IMUserAgent的processRequest会调用IMMessageProcessing的processMessage(Request request,ServerTransaction serverTransaction)对远端发送的请求进行处理,processResponse方法会调用IMMessageProcessing的processOK(Response responseCloned,ClientTransaction clientTransaction)来对远端的响应进行处理。远端的消息请求处理完毕后,会更新本地ChatFrame的内容并且发送ok回响给对方。客户收到ok回响后,表示对方已经收到,那么就把本地type的消息内容删除,更新ChatFrame的内容
2。初始化IM消息监听器ListenerInstantMessaging和用户代理IMUserAgent,ListenerInstantMessaging负责界面事件的处理,IMUserAgent实现接口SipListener;
3。IMUserAgent初始化IMAckProcessing,IMRegisterProcessing,IMByeProcessing,IMSubscribeProcessing,IMNotifyProcessing,IMInfoProcessing,IMMessageProcessing,IMPublishProcessing以及PresenceManager
用户代理IMUserAgent调用SipFactory来创建HeaderFactory,AddressFactory,
MessageFactory,SipStack;
4。SipStack创建ListeningPoint和SipProvider;
5。当点击注册按钮时,调用ListenerInstantMessaging的signMenuMouseClicked(MouseEvent mouseEvent)方法,该方法调用IMRegisterProcessing和IMPublishProcessing来进行处理登陆,imRegisterProcessing.signIn(localSipURL.trim())负责处理登陆,imRegisterProcessing.signOut(localSipURL.trim())负责处理离线退出。主要实现方法如下:
Request request=messageFactory.createRequest(requestURI,"REGISTER",
callIdHeader,cseqHeader,fromHeader,toHeader,viaList,maxForwardsHeader);
ClientTransaction clientTransaction=sipProvider.getNewClientTransaction(request);
clientTransaction.sendRequest();
如果用户选择离线,则imPublishProcessing.sendPublish(localSipURL.trim(),"offline")来发布离线消息。
6。IMUserAgent的方法processRequest(RequestEvent requestEvent)处理所有要发送的请求,主要实现如下:
if (request.getMethod().equals(Request.ACK)) {
imAckProcessing.processAck(requestCloned, serverTransaction);
}
else if (request.getMethod().equals(Request.BYE)) {
imByeProcessing.processBye(requestCloned,serverTransaction);
}
else if (request.getMethod().equals("MESSAGE")) {
imMessageProcessing.processMessage(requestCloned,
serverTransaction);
}
else if (request.getMethod().equals("INFO")) {
imInfoProcessing.processInfo(requestCloned,serverTransaction);
}
else if (request.getMethod().equals("SUBSCRIBE")) {
imSubscribeProcessing.processSubscribe
(requestCloned,serverTransaction);
}
else if (request.getMethod().equals("NOTIFY")) {
imNotifyProcessing.processNotify(requestCloned,serverTransaction);
}
方法processResponse(ResponseEvent responseEvent)处理所有收到的响应,主要实现如下:
if ( response.getStatusCode()==Response.OK ||
response.getStatusCode()==202 ){
if (cseqHeader.getMethod().equals("REGISTER") ) {
imRegisterProcessing.processOK(responseCloned,clientTransaction);
}
if (cseqHeader.getMethod().equals("MESSAGE") ) {
imMessageProcessing.processOK(responseCloned,clientTransaction);
}
if (cseqHeader.getMethod().equals("BYE") ) {
imByeProcessing.processOK(responseCloned,clientTransaction);
}
if (cseqHeader.getMethod().equals("SUBSCRIBE") ) {
imSubscribeProcessing.processOK(responseCloned,clientTransaction);
}
//Henrik Leion added NOTIFY processing
if (cseqHeader.getMethod().equals("NOTIFY") ) {
imNotifyProcessing.processOk(responseCloned,clientTransaction);
}
7。当用户注册登陆成功后,调用方法imRegisterProcessing.processOK(responseCloned,clientTransaction)来更新。更新界面显示,更新状态并且通知好友,订阅所有好友的状态,通知订阅的好友,重新打开正在进行的所有Chat sessions。好友的状态由PresenceManager来进行管理。
8。当用户状态改变时,通过如下方法:
IMNotifyProcessing imNotifyProcessing=imUA.getIMNotifyProcessing();
imNotifyProcessing.sendNotifyToAllSubscribers("open",localStatus);
来通知订阅者
9。当要进行聊天时,实例化RemoteSipURLFrame,在RemoteSipURLFrame里输入要聊天的对方URL,点确定后,产生ChatSessionManager来对会话进行管理。ChatSession负责会话,ChatFrame是会话框,按发送按钮时,会调用ChatSession的方法chatSession.sendIMActionPerformed(ActionEvent evt);来发送消息,然后sendIMActionPerformed(ActionEvent evt)方法会调用IMMessageProcessing的imMessageProcessing.sendMessage(localSipURL,remoteSipURL,text,this);来发送消息。发送的时候,IMUserAgent的processRequest会调用IMMessageProcessing的processMessage(Request request,ServerTransaction serverTransaction)对远端发送的请求进行处理,processResponse方法会调用IMMessageProcessing的processOK(Response responseCloned,ClientTransaction clientTransaction)来对远端的响应进行处理。远端的消息请求处理完毕后,会更新本地ChatFrame的内容并且发送ok回响给对方。客户收到ok回响后,表示对方已经收到,那么就把本地type的消息内容删除,更新ChatFrame的内容
发表评论
-
【转】SIP对Instant Message的支持——MESSAGE方法
2008-05-26 14:44 4473Instant Message是指用户间实时的短消息通信,这些 ... -
[转]RFC3428 IM(即时消息)
2008-05-26 14:41 2191即时消息(IM)指的是近似实时的消息交互。即时消息通常很短,虽 ... -
dialog, transaction, session之我见
2008-05-06 11:12 4514SIP中3个很重要的概念,就是dialog, session和 ... -
SIP应答头
2008-04-07 14:20 24011xx = 通知性应答 100 正在尝试 180 正在拨打 ... -
SIP Servlet知识点总结【更新】
2008-04-02 18:33 28561) sip.xml处理http请求的web应用里的概念一样: ... -
【转】Ethereal简介
2008-04-02 13:39 1511Ethereal是一个开放源码 ... -
启动sailfin时问题:CLI156 Could not start the domal的解决办法
2008-04-01 16:21 1920Default server domain can be cr ... -
Sailfin自带的例子CallSetup的实现过程
2008-03-21 18:22 19711. 首先,UAC(可以是X-lite等)向Registrar ... -
Eclipse环境下开发基于Sailfin的Sip Servlet应用
2008-03-21 18:01 7227SailFin项目由爱立信公司开发,它基于具有健壮性和可扩展性 ... -
SIP: From ,Contact, Via 和 Record-Route/Route head
2008-03-21 15:37 11887From: 如果一个SIP消息中没有Contact或者Reco ... -
SIP电话设计思路
2008-03-19 10:06 16031. caller调用方法Call creat ... -
sailfin安装方法
2008-03-10 18:06 1908https://sailfin.dev.java.net/do ... -
SIP协议简介
2008-02-20 04:25 2543SIP( Session Initiation Proto ... -
Jain Sip知识点总结
2008-02-20 03:36 17131)register的时候from头和to头一样 2)requ ... -
Jain-Sip API
2008-02-20 02:17 2836http://snad.ncsl.nist.gov/proj/ ... -
[更新]SIP Communicator功能总结
2008-02-01 01:05 17991) contact list的meta data可以重名名, ... -
sip-communicator
2008-01-31 01:11 1571http://www.sip-communicator.org ... -
How to configure Eclipse to compile and debug SIP
2008-01-30 00:42 1416http://www.sip-communicator.org ...
相关推荐
《Cadence系统级封装设计 Allegro Sip APD设计指南》是针对电子设计自动化(EDA)领域的专业文献,主要聚焦于使用Cadence公司的Allegro软件进行系统级封装(System-in-Package,SiP)的设计流程和技术。SiP技术允许...
### SIP芯片封装设计知识点 #### 一、SIP(System in Package)技术概述 SIP是一种先进的封装技术,它能够将多个不同的芯片或组件集成在一个封装内,形成一个多功能的系统级封装产品。这种技术主要应用于移动通信、...
**SIP 服务器概要设计** 本文档详细阐述了《企业即时通讯系统》中的SipServer的概要设计,旨在为开发团队提供清晰的指导,确保SipServer满足项目需求和性能目标。SipServer是即时通讯系统的核心组件,负责处理SIP...
《芯片SIP封装与工程设计》是一本深入探讨系统级封装(System-in-Package, SIP)技术的专业书籍,尤其在2020年10月17日的这个章节例子中,作者为我们揭示了SIP封装在现代集成电路设计中的重要性及其实现方法。SIP...
system in a package(SIP)需要设计SIP封装的同学可以拿走借鉴
### SIP设计概述与关键技术 #### 一、SIP设计概览 SIP(System in Package)设计是指将多个不同功能的集成电路(ICs)及无源元件整合到一个封装内的技术,这种高度集成的设计方法能够有效减少系统的体积,提高整体...
SIP的设计理念遵循互联网一贯的原则——简洁、开放、兼容以及可扩展。相较于H.323,SIP在复杂度、可扩展性、资源利用与管理、多服务支持、互操作性以及无线领域应用等方面表现更优。 实现SIP协议的方式多种多样,...
SIMPLE(SIP for Instant Messaging and Presence Leveraging Extensions)是SIP的一个子集,专为即时消息(IM)和Presence功能设计。它将SIP协议扩展到支持文本聊天、文件传输以及状态信息的交换。通过SIMPLE,...
SIP作为一种基于文本的协议,其设计初衷是为了在用户之间发起交互式的多媒体会话,包括但不限于音频、视频等。随着时间的发展,SIP的应用范围不断拓展,涵盖了在线显示、即时消息(IM)等多种场景。SIP的灵活性使得它...
### IC SIP封装设计及其仿真技术详解 #### 一、IC封装设计概述 IC封装设计是集成电路制造中的一个重要环节,它不仅决定了芯片的功能实现方式,还直接影响到芯片在实际应用中的性能表现。随着电子产品向高性能、高...
2. **创建SIP会话**:通过SIP堆栈创建`javax.sip.SipContext`对象,它代表了SIP会话。会话中包含了用户的认证信息和通信设置。 3. **创建SIP URI**:使用`javax.sip.address.SipURI`表示用户身份。通常格式为`sip:...
迷你SIP服务器(miniSipServer)是一款专为Windows操作系统设计的免费SIP服务器软件,主要功能是提供语音-over-IP(VoIP)服务。在本文中,我们将深入探讨SIP协议、miniSipServer的特点及其在实际应用中的重要性。 ...
深入解释了当今人们谈论最多的关于SIP协议是什么以及起草它的标准的原因,评价了SIP究竟能够做什么以及传递什么,评估了SIP同其他标准和系统的兼容度,设计了新的支持SIP的业务。SIP是能够在3G系统中传输IP多媒体...
两者都是为Web浏览器设计的SIP库,但可能存在性能、API设计、文档质量、社区支持等方面的差异。选择其中一个通常取决于具体项目的需求,例如,开发者可能更倾向于具有更好文档或更活跃社区的库。 在压缩包文件名称...
SIP Inspector 是一个用来模拟不同的SIP消息和通讯情景的工具,可用来创建 SIP 信令、定制 SIP 消息以及兼容输入和输出的消息包,该工具还可以直接从 pcap 文件中播放 RTP 流。
这个"how_to_write_sip.rar"压缩包包含了一份关于如何编写SIP代码以及相关的设计文档,旨在帮助读者理解SIP协议的工作原理,并提供实际编码的指导。 在设计文档中,你可以期待找到以下关键知识点: 1. **SIP协议...
SIP协议遵循客户端-服务器模型,由用户代理(UA)发送请求到SIP服务器,服务器负责处理请求并转发响应,最终建立、修改或结束通信会话。 SIP协议的主要组件包括: 1. 用户代理(UA):分为用户代理客户端(UAC)和...
在IT行业中,SIP(Session Initiation Protocol)是一种用于控制多媒体通信会话(如语音和视频通话)的应用层协议。这个“SIP呼叫_linux_sip_”的主题涉及到使用C语言在Linux操作系统上实现SIP呼叫的功能。以下是...