private void MainThread_OnCallStatus(BriaAPI.CallStatusEventArgs args) { Boolean[] lineInUse = new Boolean[6]; List <BriaAPI.Call> callList = args.CallList; foreach (BriaAPI.Call call in callList) { Boolean existingCall = false; PhoneLine phoneLine = null; // Check if the call was previously in the list for (int i = 0; i < 6; i++) { phoneLine = phoneLines[i]; if ((phoneLine != null) && (phoneLine.Id == call.CallId)) { phoneLine.RemoteParties.Clear(); lineInUse[i] = true; existingCall = true; break; } } // If the call is not already existing, we have to add as new call if (!existingCall) { PhoneLine newPhoneLine = new PhoneLine(call.CallId); phoneLine = newPhoneLine; // Find empty slot to put it in for (int i = 0; i < 6; i++) { if (phoneLines[i] == null) { phoneLines[i] = phoneLine; lineInUse[i] = true; break; } } } // And fill in the information phoneLine.HoldState = call.HoldState; foreach (BriaAPI.CallParticipant participant in call.ParticipantList) { RemoteParty remoteParty = new RemoteParty(); remoteParty.Number = participant.Number; remoteParty.DisplayName = participant.DisplayName; remoteParty.TimeInitiated = participant.TimeInitiated; remoteParty.State = participant.CallState; phoneLine.RemoteParties.Add(remoteParty); if ((phoneLine.RemoteParties.Count == 1) && (remoteParty.State == BriaAPI.CallStates.Ringing)) { phoneLine.IsRinging = true; } else { phoneLine.IsRinging = false; } } } // Finally clear out any phoneLine that is no longer active for (int i = 0; i < 6; i++) { if (lineInUse[i] == false) { phoneLines[i] = null; } } UpdateCallStates(); }
private void OnCallStatus(object sender, BriaAPI.CallStatusEventArgs args) { this.BeginInvoke(onCallStatusDelegate, new Object[] { args }); }