public SmcErr SwitchChannelRelation(string channelLabel, string cameraNo)
{
SmcErr err = new CgwError();
NLogEx.LoggerEx logEx = new NLogEx.LoggerEx(log);
logEx.Info("SwitchChannelRelation start.");
try
{
bool successed = this.monitorChannelRelationDicLocker.TryEnterReadLock(CgwConst.ENTER_LOCK_WAIT_TIME);
// 申请互斥
if (successed)
{
try
{
if (!this.monitorChannelRelationDic.ContainsKey(channelLabel))
{
// 错误码 日志
logEx.Error("SwitchChannelRelation can't find channelLabel:{0}", channelLabel);
err.SetErrorNo(CgwError.ERR_CGW_CHANNEL_NOT_FIND_CHANNELNO);
return err;
}
// 如果通道没有入会,不允许关联摄像头
if (string.IsNullOrEmpty(this.monitorChannelRelationDic[channelLabel].ConfAccessCode))
{
// 错误码 日志
logEx.Error("SwitchChannelRelation channelNo:{0} confAccessCode is null", channelLabel);
err.SetErrorNo(CgwError.ERR_CGW_CHANNEL_NOT_IN_CONF);
return err;
}
}
finally
{
// 释放互斥量
this.monitorChannelRelationDicLocker.ExitReadLock();
}
}
else
{
// 日志
logEx.Error("SwitchChannelRelation: Enter Write Lock Failed.WaitingReadCount:{0};WaitingWriteCount:{1}.", this.monitorChannelRelationDicLocker.WaitingReadCount, this.monitorChannelRelationDicLocker.WaitingWriteCount);
err.SetErrorNo(CgwError.ERR_CGW_CHANNEL_GET_LOCK_FAIL);
}
// 调用内部接口,切换通道视频
err = this.SwitchChannelVideo(channelLabel, cameraNo);
if (!err.IsSuccess())
{
// 日志
this.PrintLog();
logEx.Error("SwitchChannelRelation SwitchChannelVideo channelNo:{0} cameraNo:{1} failed", channelLabel, cameraNo);
return err;
}
}
catch (Exception ex)
{
// 日志
logEx.Error(ex, "SwitchChannelRelation: Enter Write Lock Exception.");
err.SetErrorNo(CgwError.ERR_CGW_CHANNEL_SERVICE_ADNORMAL);
}
// I帧重传
this.MakeIFrame(channelLabel);
this.PrintLog();
// 成功日志
logEx.Info("SwitchChannelRelation successfully,channelLabel:{0},cameraNo:{1}", channelLabel, cameraNo);
return err;
}