コード例 #1
0
        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);
        }
コード例 #2
0
        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;
            }
        }
コード例 #3
0
 public static void NotifyCallFinished()
 {
     Interlocked.Decrement(ref _runningCalls);
     MainThread.BeginInvokeOnMainThread(() => CallFinished?.Invoke(null, _runningCalls));
 }