Ejemplo n.º 1
0
        /// <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));
            }
        }
Ejemplo n.º 2
0
        /// <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));
            }
        }
Ejemplo n.º 3
0
 /// <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);
         }
     }
 }
Ejemplo n.º 4
0
        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);
                }
            }
        }