protected virtual void PortOnPortEndCall(object sender, CallEventArgs e) { var call = CurrentCalls.FirstOrDefault(x => x.RecieverNumber == e.number || x.SenderNumber == e.number); if (call == null) { return; } var port1 = CallingPorts.FirstOrDefault(x => x.Number == call.SenderNumber); if (port1 == null) { return; } var port2 = CallingPorts.FirstOrDefault(x => x.Number == call.RecieverNumber); if (port2 == null) { return; } call.Finish(); ServerFinishedCall?.Invoke(this, new ConnectionEventArgs(port1, port2, string.Format($"Call finished. Duration: {call.Duration:hh\\:mm\\:ss}"))); CallingPorts.Remove(port1); CallingPorts.Remove(port2); EnabledPorts.Add(port1); EnabledPorts.Add(port2); CurrentCalls.Remove(call); StorageCalls.Add(call); CallFinished?.Invoke(call, EventArgs.Empty); }
public override void OnCallStateChanged([GeneratedEnum] CallState state, string phoneNumber) { base.OnCallStateChanged(state, phoneNumber); switch (state) { case CallState.Idle: if (IsNewCall) { CallFinished?.Invoke(GetCallLogs( )); } IsNewCall = false; break; case CallState.Ringing: IsNewCall = true; break; case CallState.Offhook: IsNewCall = true; break; default: break; } }
public static void NotifyCallFinished() { Interlocked.Decrement(ref _runningCalls); MainThread.BeginInvokeOnMainThread(() => CallFinished?.Invoke(null, _runningCalls)); }