presence information mode的一些理解

本文介绍了在线状态信息(presence information)的模型,包括Presentity、PresenceServer和Watcher三个关键角色的作用及交互过程。Presentity负责发布状态信息,PresenceServer进行接收、存储与分发,而Watcher则请求并更新状态。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

      presence information,一些很重要的部分是状态信息,如online ,busy,away,offline等等。在学习这部分的时候,如果先对presence information mode有所了解,那么会对以后深入研究这部分内容有很大的帮助。

     这个模型定义了三个角色:Presentity, Presence Server, Watcher.

      Presentity:是发布presence information的user agent ,通常是一个client. 这里要注意的是,根据我的理解,在同一台机用同种client登同一账号,或者是不同机上用同种client相同账号,这两种情况算两个presentity.  

       Presence Server:用于接收,存储,分发presence information的agent,通常是有此功能的服务器担任,如OCP。

       Watcher:向presence Server请求某账号的presence information的agent.

       

       presentity改变状态,会发一个带有相关presence information的publish请求给presence server;presense server 会把改变的状态值代替原先相应值,并根据该账号的观察者信息,构造一个携带有最新presence information的notify请求给每一个授权的watcher;watcher收到并提取相关的presence information值来取代原先的值,从而正确显示该presentity的状态。

 

 

PS:在此,要强调一点的是,对于presence information,一般是以xml形式出现,每个prsentity只对应一个tuple,tuple的id值是唯一的。如果同机或者是不同机上登录同一账号,那么该账号的xml中应该有相应多个tuple值;person节点中的值,对应最晚登入的那个prensentity.

tFblResult ApplFblBmIsValidBlock(tFblBmHdrTargetHandle targetHandle, const V_MEMRAM1 tBlockDescriptor V_MEMRAM2 V_MEMRAM3 * pLogicalBlock) { tFblResult result; # if defined( FBL_ENABLE_PRESENCE_PATTERN ) || defined( FBLBM_ENABLE_STANDALONE_MODE ) vuint8 device; # endif /* FBL_ENABLE_PRESENCE_PATTERN || FBLBM_ENABLE_STANDALONE_MODE */ # if !defined( FBL_ENABLE_PRESENCE_PATTERN ) vuint8 validityFlags[kEepSizeValidityFlags]; vuint8 validityMask; vuint8 byteIdx; # endif /* !FBL_ENABLE_PRESENCE_PATTERN */ # if (!defined( FBLBM_ENABLE_STANDALONE_MODE ) || defined( FBL_ENABLE_PRESENCE_PATTERN )) # if defined( V_ENABLE_USE_DUMMY_STATEMENT ) (void)targetHandle; # endif /* V_ENABLE_USE_DUMMY_STATEMENT */ # endif /* ( !FBLBM_ENABLE_STANDALONE_MODE || FBL_ENABLE_PRESENCE_PATTERN ) */ result = kFblFailed; # if defined( FBLBM_ENABLE_STANDALONE_MODE ) && !defined( FBL_ENABLE_PRESENCE_PATTERN) # error "If presence pattern is disabled special handling must be configured for the FBL because \ validity flags are not available for the FBL." /* Perform presence pattern check only for FBL, use NV validity flags for other blocks */ if (targetHandle == FBLBMHDR_TARGET_FBL) # endif /* FBLBM_ENABLE_STANDALONE_MODE && !FBL_ENABLE_PRESENCE_PATTERN */ # if defined( FBL_ENABLE_PRESENCE_PATTERN ) || defined( FBLBM_ENABLE_STANDALONE_MODE ) { /* Check the presence pattern value */ if (kFblOk == FblMemGetDeviceByRange(pLogicalBlock->blockStartAddress, pLogicalBlock->blockLength, &device)) { # if defined( kMioDeviceProtected ) /* Do not check the presence pattern for RAM */ if (device != kMioDeviceProtected) # endif /* kMioDeviceProtected */ { result = FblNvPatternGetByBlockDescriptor(pLogicalBlock, kFblNvPatternId_BlockValidity ); } } } # endif /* FBL_ENABLE_PRESENCE_PATTERN || FBLBM_ENABLE_STANDALONE_MODE */ # if !defined( FBL_ENABLE_PRESENCE_PATTERN ) # if defined( FBLBM_ENABLE_STANDALONE_MODE ) /* Check NV validity flags if block other than FBL is checked */ else # endif /* FBLBM_ENABLE_STANDALONE_MODE */ { /* Calculate index and mask for validity bit of logical block */ byteIdx = (pLogicalBlock->blockNr >> 0x03u); validityMask = (vuint8)(0x01u << (pLogicalBlock->blockNr & 0x07u)); /* Read validity information from non-volatile memory */ if (ApplFblNvReadValidityFlags(validityFlags) == kFblOk) { if ((validityFlags[byteIdx] & validityMask) == 0u) { /* Block is valid */ result = kFblOk; } } } # endif /* !FBL_ENABLE_PRESENCE_PATTERN */ return result; } #endif /* FBLBM_AP_CALLOUT_IS_VALIDBLOCK */代码解释
03-08
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值