有熟悉ReSIProcate代码的么?有个问题想讨论一下,还有个附加广告敬请关注

soliddream66 2009-10-20 06:39:35
好啊,有人么?我想讨论下为什么ReSIProcate的ResponseContext里面TransactionMap会细分为

TransactionMap mCandidateTransactionMap; //Targets with status Candidate.
TransactionMap mActiveTransactionMap; //Targets with status Trying, Proceeding, or WaitingToCancel.
TransactionMap mTerminatedTransactionMap; //Targets with status Terminated.

我以为这是因为二次细分的缘故
初步细分
candidate
active
terminated

再次细分为
typedef enum
{
Candidate, //Transaction has not started
Started, //Transaction has started, no final responses
Cancelled, //Transaction has been cancelled, but no final response yet
Terminated, //Transaction has received a final response
NonExistent //The state of transactions that do not exist
} Status;

不知道我理解的对不对?

ps.
有学习ReSIProcate代码的朋友欢迎加入Q群85502569,有阵子没人加入了,看来广告不打不行啊,呵呵~
...全文
93 3 打赏 收藏 转发到动态 举报
写回复
用AI写文章
3 条回复
切换为时间正序
请发表友善的回复…
发表回复
ProgrammerNO1 2009-10-23
  • 打赏
  • 举报
回复
好贴,,支持
soliddream66 2009-10-21
  • 打赏
  • 举报
回复
我又把ResponseContext类看了几遍

这次我有了新的感觉,或许是因为process的需要,把TransactionMap按处理角度区分为三类

这样的话要处理某一类的话,同等对待,而不需要循环所有的TransactionMap,判断status,然后使用不同的处理

之所以关注这个类,是因为我想另外添加一个以Dialog会index的Context,提供如下接口:
一、add
二、remove
三、search
四、updateState
五、clear
或许按照我的需求,由于不需要像ResponseContext那样process,或许更为方便的做法是集中定义一个DialogContext,按照有限状态机(http://blog.csdn.net/vargas/archive/2006/12/17/1447054.aspx)变更状态?



yanghehong 2009-10-21
  • 打赏
  • 举报
回复
[Quote=引用楼主 soliddream66 的回复:]
好啊,有人么?我想讨论下为什么ReSIProcate的ResponseContext里面TransactionMap会细分为

      TransactionMap mCandidateTransactionMap; //Targets with status Candidate.
      TransactionMap mActiveTransactionMap; //Targets with status Trying, Proceeding, or WaitingToCancel.
      TransactionMap mTerminatedTransactionMap; //Targets with status Terminated.

我以为这是因为二次细分的缘故
初步细分
candidate
active
terminated

再次细分为
typedef enum
      {
        Candidate, //Transaction has not started
        Started, //Transaction has started, no final responses
        Cancelled, //Transaction has been cancelled, but no final response yet
        Terminated, //Transaction has received a final response
        NonExistent //The state of transactions that do not exist
      } Status;

不知道我理解的对不对?

ps.
有学习ReSIProcate代码的朋友欢迎加入Q群85502569,有阵子没人加入了,看来广告不打不行啊,呵呵~

[/Quote]

分为三种,可能它认为有3个queue就正好。

你要理解为2分也是可以的。层次化的状态机也是各种系统中常见的设计。但这里似乎体现得也不明显。
下载了一份代码瞧了一眼。
typedef enum
{
Candidate, //Transaction has not started
Started, //Transaction has started, no final responses
Cancelled, //Transaction has been cancelled, but no final response yet
Terminated, //Transaction has received a final response
NonExistent //The state of transactions that do not exist
} Status;


这里5个状态,实际上NonExistent并没有使用。也就剩下四个

Candidate 和 mCandidateTransactionMap对应。

Started,Cancelled 和mActiveTransactionMap对应;

Terminated 和 mTerminatedTransactionMap 对应。


基本上接近一一对应了。我的感觉,它这里Cancelled 还有点多余。没时间细看,不好怎么说。


- 千里孤行

1,394

社区成员

发帖
与我相关
我的任务
社区描述
VOIP相关技术探讨专区
社区管理员
  • VOIP技术探讨社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧