/// <summary> /// 根据uuid,更新列表中对应Dialog的DialogState。如果为Hangup、Destroy,则从列表中移除 /// </summary> private void UpdateDialog(string uuid, ChannelEvent state) { DialogInfo info = GetDialogByUuid(uuid); if (info == null) { Log.Error(string.Format("UpdateDialog__info == null. uuid: {0}, state: {1}", uuid, state)); return; } info.DialogState = state; if (info.IsDialogHanguped) { Log.Debug(string.Format("UpdateDialog__info.IsDialogHanguped, goona remove. uuid: {0}", uuid)); try { RemoveDialog(uuid); } catch (Exception e) { Log.Warn(string.Format("UpdateDialog__info.IsDialogHanguped, failed to remove. uuid: {0}", uuid)); } } else { Log.Debug(string.Format("UpdateDialog__!info.IsDialogHanguped. uuid: {0}", uuid)); } }
/// <summary> /// 如果不是Hangup、Destroy的Dialog,则将其添加至列表。 /// </summary> public void AddDialog(DialogInfo dialog) { if (dialog.IsDialogHanguped) { Log.Error(string.Format("AddDialog__dialog.IsDialogHanguped, which shouldn't be happening. " + "gonna try remove anyway. dialog: {0}. RETURN", dialog)); RemoveDialog(dialog.ChannelUuid); return; } _uuidToDialog.Add(dialog.ChannelUuid, dialog); Log.Debug(string.Format("AddDialog, overAll dict added. " + "dialog: {0}, curCount: {1}", dialog, _uuidToDialog.Count)); if (dialog.ALegDialog) { if (!_dictCallerInfo.ContainsKey(dialog.From) || _dictCallerInfo[dialog.From] == null) { _dictCallerInfo[dialog.From] = new List <string>(); } _dictCallerInfo[dialog.From].Add(dialog.ChannelUuid); Log.Debug(string.Format("AddDialog, caller dict added. " + "caller: {0}, dialog: {1}, callerCnt: {2}", dialog.From, dialog, _dictCallerInfo.Count)); } else { if (!_dictCalleeInfo.ContainsKey(dialog.To) || _dictCalleeInfo[dialog.To] == null) { _dictCalleeInfo[dialog.To] = new List <string>(); } _dictCalleeInfo[dialog.To].Add(dialog.ChannelUuid); Log.Debug(string.Format("AddDialog, callee dict added. " + "callee: {0}, dialog: {1}, calleeCnt: {2}", dialog.To, dialog.ChannelUuid, _dictCalleeInfo.Count)); } }
/// <summary> /// 如果列表中存在与新Dialog的uuid相同的Dialog,则更新之。否则添加至列表 /// </summary> /// <param name="dialog">新收到的Dialog</param> public void HandleDialogUpdate(DialogInfo dialog) { lock (LockObject) { DialogInfo info = GetDialogByUuid(dialog.ChannelUuid); if (info == null) { if (dialog.DialogState == ChannelEvent.CHANNEL_DESTROY) { Log.Debug("HandleDialogUpdate, got destroy event, and no dialogInfo exist. RETURN"); return; } Log.Debug("HandleDialogUpdate__info == null, gonna add dialog"); AddDialog(dialog); } else { Log.Debug("HandleDialogUpdate__info != null, gonna update dialog"); UpdateDialog(dialog.ChannelUuid, dialog.DialogState); } } }
public void RemoveDialog(string uuid) { if (!_uuidToDialog.ContainsKey(uuid)) { Log.Error(string.Format("RemoveDialog__!uuidToDialog.ContainsKey(uuid), which shouldn't be happening." + "uuid: {0}. RETURN", uuid)); return; } DialogInfo info = _uuidToDialog[uuid]; _uuidToDialog.Remove(uuid); Log.Debug(string.Format("RemoveDialog, overAll dialog removed. " + "dialog: {0}, cnt: {1}", info, _uuidToDialog.Count)); if (info.ALegDialog) { if (_dictCallerInfo.ContainsKey(info.From) && _dictCallerInfo[info.From] != null) { Log.Debug(string.Format("RemoveDialog, caller dict removed. " + "caller: {0}, dialog: {1}, callerCnt: {2}", info.From, _dictCallerInfo[info.From], _dictCallerInfo.Count)); _dictCallerInfo[info.From].Remove(uuid); } } else { if (_dictCalleeInfo.ContainsKey(info.To) && _dictCalleeInfo[info.To] != null) { Log.Debug(string.Format("RemoveDialog, callee dict removed. " + "callee: {0}, dialog: {1}, calleCnt: {2}", info.To, _dictCalleeInfo[info.To], _dictCalleeInfo.Count)); _dictCalleeInfo[info.To].Remove(uuid); } } }