打开NgnSipService.mm文件中有_mSipCallback变量,用来回调事件状态传值。
我们知道idoubs中原来并没有类似于“对方是否在线” “对方是否挂断电话” 但是实际项目中是有这些需求的。
所以,我们自行加入一些变量,用来判断对方的状态!
1.首先我们在定义_NgnSipCallback中来定义几个私有变量:
private:
NgnSipService* mSipService;
NgnBaseService<INgnConfigurationService>* mConfigurationService;
//以下为自己加上的变量
long timeStart; //记录整个开始拨打的时间
long timeEnd; //记录整个结束时间
bool isInComing = false; //判断是否是来电
long inCallTimeStart = 0; //记录接听通话开始的时间
long inCallTimeEnd = 0; //记录接听结束通话的时间
还要给事件添加几个状态:
//枚举
typedef enum NgnInviteEventTypes_othere {
OTHER_DEFAULT, // 对方默认状态
OTHER_ANSWER_NOT, //对方未接听状态
OTHER_ANSWER_OR_REJECT,//对方接听或拒绝状态
OTHER_REJECT //对方拒绝状态
}
NgnInviteEventTypes_other;
//增加属性
@property (nonatomic,assign) NgnInviteEventTypes_other otherInCallstate;
@property (nonatomic,assign) bool otherNotAnswer;
@property (nonatomic,assign) bool otherIsOnLine;
2.找到事件连接状态: tsip_event_code_dialog_connected
再找到 Audio/Video/MSRP(Chat, FileTransfer) 表明是通话的事件
接下来加上代码:
else if (((ngnSipSession = [NgnAVSession getSessionWithId: _sessionId]) != nil) || ((ngnSipSession = [NgnMsrpSession getSessionWithId: _sessionId]) != nil)){
eargs = [[NgnInviteEventArgs alloc]
initWithSessionId: _sessionId
andEvenType:INVITE_EVENT_CONNECTED
andMediaType:((NgnInviteSession*)ngnSipSession).mediaType
andSipPhrase:phrase];
[ngnSipSession setConnectionState:CONN_STATE_CONNECTED];
[((NgnInviteSession*)ngnSipSession) setState:INVITE_STATE_INCALL];
// --------- 拨打电话给对方做判断
if (!isInComing) {
NSLog(@"拨出");
bool otherIsOnLine =