Exemplo n.º 1
0
        protected void OnCallChanged(SkypeCall call, SkypeCallState state)
        {
            if (_prevCall != null)
            {
                if (call.CallId.Equals(_prevCall.CallId) && state == _prevCallState)
                {
                    return;
                }
            }

            _prevCall      = call;
            _prevCallState = state;
            CallChanged?.Invoke(this, call, state);
        }
Exemplo n.º 2
0
        protected virtual void ParseCall(string call)
        {
            try
            {
                var doc = new XmlDocument();
                doc.LoadXml(call);

                var nodes = doc.GetElementsByTagName("partlist");
                if (nodes.Count > 0)
                {
                    var rootNote = nodes[0];
                    var type     = rootNote.Attributes["type"].Value;
                    var callId   = rootNote.Attributes["callId"].Value;

                    var users = new List <SkypeUser>();

                    foreach (XmlNode partNode in rootNote.ChildNodes)
                    {
                        if ("part".Equals(partNode.Name))
                        {
                            var skypeId = partNode.Attributes["identity"].Value;
                            var user    = new SkypeUser()
                            {
                                SkypeId = skypeId
                            };

                            foreach (XmlNode nameNode in partNode.ChildNodes)
                            {
                                if ("name".Equals(nameNode.Name))
                                {
                                    user.DisplayName = nameNode.InnerText;
                                    break;
                                }
                            }

                            users.Add(user);
                        }
                    }

                    var skypeCall = new SkypeCall()
                    {
                        CallId = callId,
                        From   = users.Count > 0 ? users[0] : null,
                        To     = users.Count > 1 ? users[1] : null
                    };

                    SkypeCallState state = SkypeCallState.Unknown;
                    if ("started".Equals(type))
                    {
                        state = SkypeCallState.Started;
                    }
                    else if ("missed".Equals(type))
                    {
                        state = SkypeCallState.Missed;
                    }
                    else if ("ended".Equals(type))
                    {
                        state = SkypeCallState.Finished;
                    }

                    if (state != SkypeCallState.Started || IsNewCall(callId))
                    {
                        OnCallChanged(skypeCall, state);
                    }
                }
            }
            catch (Exception ex)
            {
                log.Error($"Error parsing call: {call}", ex);
            }
        }
        protected override void ParseCall(string call)
        {
            log.Debug($"Parse call: {call}");
            try {
                var obj = JObject.Parse(call);

                SkypeCallState state  = SkypeCallState.Unknown;
                string         callId = null;
                SkypeUser      from   = null;
                SkypeUser      to     = null;

                JObject current = obj.GetValue("current") as JObject;
                if (current != null)
                {
                    var idObj = obj.GetValue("ids") as JObject;
                    callId = idObj.GetValue("callId").ToString();

                    var stateInt = current.GetValue("state").Value <int>();
                    if (stateInt == 3)
                    {
                        state = SkypeCallState.Started;
                    }
                }
                else
                {
                    state  = SkypeCallState.Finished;
                    callId = obj.GetValue("callId").ToString();

                    var fromObj = obj.GetValue("originatorParticipant") as JObject;
                    if (fromObj != null)
                    {
                        from = new SkypeUser()
                        {
                            SkypeId     = fromObj.GetValue("id").ToString(),
                            DisplayName = fromObj.GetValue("displayName").ToString()
                        };
                    }

                    var toObj = obj.GetValue("targetParticipant") as JObject;
                    if (toObj != null)
                    {
                        to = new SkypeUser()
                        {
                            SkypeId     = toObj.GetValue("id").ToString(),
                            DisplayName = toObj.GetValue("displayName").ToString()
                        };
                    }
                }

                var skypeCall = new SkypeCall()
                {
                    CallId = callId,
                    From   = from,
                    To     = to
                };

                if (state != SkypeCallState.Started || IsNewCall(callId))
                {
                    OnCallChanged(skypeCall, state);
                }
            }
            catch (Exception ex) {
            }
        }