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); }
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) { } }