public void MyAppNewCallEventHandler(Object sender, CTapi.AppNewCallEventArgs e) { mDeviceState.Lines[0].Calls[0].Name = "Call #" + e.call.CallID.ToString(); m_ActiveCall = e.call; }
public void MyCallStateEventHandler(Object sender, CTapi.CallStateEventArgs e) { IList<DevicePropertyChange> deviceChanges = new List<DevicePropertyChange>(); IList<LinePropertyChange> lineChanges = new List<LinePropertyChange>(); IList<CallPropertyChange> callChanges = new List<CallPropertyChange>(); Activity activity; Activity oldActivity; Tone tone; Tone oldTone; switch (e.CallState) { case CTapi.LineCallState.LINECALLSTATE_CONNECTED: activity = mDeviceState.Lines[0].Calls[0].Activity; oldActivity = activity; oldTone = mDeviceState.Lines[0].Calls[0].Tone; if (activity == Activity.Ringing || activity == Activity.Dialing) { activity = Activity.Connected; mDeviceState.Lines[0].Calls[0].Activity = activity; mDeviceState.Lines[0].Calls[0].Tone = Tone.Call; tone = mDeviceState.Lines[0].Calls[0].Tone; if ( tone != oldTone ) callChanges.Add( new CallPropertyChange( mDeviceState.Lines[0].Calls[0], PROPERTY_CALL_TONE, oldTone.ToString(), tone.ToString() ) ); } callChanges.Add(new CallPropertyChange(mDeviceState.Lines[0].Calls[0], PROPERTY_CALL_ACTIVITY, oldActivity.ToString(), activity.ToString())); mDeviceState.Lines[0].Calls[0].Duration = "0"; break; case CTapi.LineCallState.LINECALLSTATE_DISCONNECTED: oldActivity = mDeviceState.Lines[0].Calls[0].Activity; mDeviceState.Lines[0].Calls[0].Activity = Activity.IdleDisconnected; mDeviceState.Lines[0].Calls[0].Tone = Tone.None; oldTone = mDeviceState.Lines[0].Calls[0].Tone; tone = mDeviceState.Lines[0].Calls[0].Tone; callChanges.Add(new CallPropertyChange(mDeviceState.Lines[0].Calls[0], PROPERTY_CALL_ACTIVITY, oldActivity.ToString(), "IdleDisconnected")); if (tone != oldTone) callChanges.Add(new CallPropertyChange(mDeviceState.Lines[0].Calls[0], PROPERTY_CALL_TONE, oldTone.ToString(), tone.ToString())); break; case CTapi.LineCallState.LINECALLSTATE_ONHOLD: oldActivity = mDeviceState.Lines[0].Calls[0].Activity; mDeviceState.Lines[0].Calls[0].Activity = Activity.Held; callChanges.Add(new CallPropertyChange(mDeviceState.Lines[0].Calls[0], PROPERTY_CALL_ACTIVITY, oldActivity.ToString(), "Held")); break; case CTapi.LineCallState.LINECALLSTATE_IDLE: oldActivity = mDeviceState.Lines[0].Calls[0].Activity; oldTone = mDeviceState.Lines[0].Calls[0].Tone; mDeviceState.Lines[0].Calls[0].Activity = Activity.IdleDisconnected; mDeviceState.Lines[0].Calls[0].Tone = Tone.None; tone = mDeviceState.Lines[0].Calls[0].Tone; callChanges.Add(new CallPropertyChange(mDeviceState.Lines[0].Calls[0], PROPERTY_CALL_ACTIVITY, oldActivity.ToString(), "IdleDisconnected")); if (tone != oldTone) callChanges.Add(new CallPropertyChange(mDeviceState.Lines[0].Calls[0], PROPERTY_CALL_TONE, oldTone.ToString(), tone.ToString())); break; case CTapi.LineCallState.LINECALLSTATE_PROCEEDING: CCall call = e.call; oldActivity = mDeviceState.Lines[0].Calls[0].Activity; mDeviceState.Lines[0].Calls[0].Activity = Activity.Dialing; mDeviceState.Lines[0].Calls[0].Tone = Tone.Dial; mDeviceState.Lines[0].Calls[0].Type = CallType.Outbound; mDeviceState.Lines[0].LastCalledNumber = call.CalledID.ToString(); callChanges.Add(new CallPropertyChange(mDeviceState.Lines[0].Calls[0], PROPERTY_CALL_ACTIVITY, "IdleDisconnected", "Dialing")); callChanges.Add(new CallPropertyChange(mDeviceState.Lines[0].Calls[0], PROPERTY_CALL_TYPE, "IdleDisconnected", "Outbound")); lineChanges.Add(new LinePropertyChange(mDeviceState.Lines[0], PROPERTY_LINE_LASTCALLEDNUMBER, "", call.CalledID.ToString() )); break; case CTapi.LineCallState.LINECALLSTATE_OFFERING: mDeviceState.Lines[0].Calls[0].Activity = Activity.Ringing; mDeviceState.Lines[0].Calls[0].Tone = Tone.None; mDeviceState.Lines[0].Calls[0].Type = CallType.Inbound; callChanges.Add(new CallPropertyChange(mDeviceState.Lines[0].Calls[0], PROPERTY_CALL_ACTIVITY, "IdleDisconnected", "Ringing")); callChanges.Add(new CallPropertyChange(mDeviceState.Lines[0].Calls[0], PROPERTY_CALL_TYPE, "IdleDisconnected", "Inbound")); break; case CTapi.LineCallState.LINECALLSTATE_ACCEPTED: if (mDeviceState.Lines[0].Calls[0].Activity != Activity.Ringing) { oldActivity = mDeviceState.Lines[0].Calls[0].Activity; mDeviceState.Lines[0].Calls[0].Activity = Activity.Ringing; callChanges.Add(new CallPropertyChange(mDeviceState.Lines[0].Calls[0], PROPERTY_CALL_ACTIVITY, oldActivity.ToString(), "Ringing")); } break; case CTapi.LineCallState.LINECALLSTATE_DIALING: oldActivity = mDeviceState.Lines[0].Calls[0].Activity; oldTone = mDeviceState.Lines[0].Calls[0].Tone; mDeviceState.Lines[0].Calls[0].Tone = Tone.Dial; tone = mDeviceState.Lines[0].Calls[0].Tone; mDeviceState.Lines[0].Calls[0].Activity = Activity.Dialing; callChanges.Add(new CallPropertyChange(mDeviceState.Lines[0].Calls[0], PROPERTY_CALL_ACTIVITY, oldActivity.ToString(), "Dialing")); if ( tone != oldTone ) callChanges.Add(new CallPropertyChange(mDeviceState.Lines[0].Calls[0], PROPERTY_CALL_TONE, oldTone.ToString(), tone.ToString())); break; case CTapi.LineCallState.LINECALLSTATE_RINGBACK: oldActivity = mDeviceState.Lines[0].Calls[0].Activity; mDeviceState.Lines[0].Calls[0].Activity = Activity.Ringing; callChanges.Add(new CallPropertyChange(mDeviceState.Lines[0].Calls[0], PROPERTY_CALL_ACTIVITY, oldActivity.ToString(), "Ringing")); break; case CTapi.LineCallState.LINECALLSTATE_BUSY: oldTone = mDeviceState.Lines[0].Calls[0].Tone; mDeviceState.Lines[0].Calls[0].Tone = Tone.Busy; tone = mDeviceState.Lines[0].Calls[0].Tone; if ( tone != oldTone ) callChanges.Add(new CallPropertyChange(mDeviceState.Lines[0].Calls[0], PROPERTY_CALL_TONE, oldTone.ToString(), tone.ToString() )); break; case CTapi.LineCallState.LINECALLSTATE_SPECIALINFO: break; } if (deviceChanges.Count > 0 || lineChanges.Count > 0 || callChanges.Count > 0) StateManager.Instance().DeviceUpdated(this, deviceChanges, lineChanges, callChanges); }
public override void Run() { // TAPI2_ADDITIONS for (int i = 0; i < MAXASYNCCALLS; i++) { ma_hCalls[i] = IntPtr.Zero; } // TAPI2_ADDITIONS. // provide default initialization for Tapi members m_friendlyAppName = "CTapi"; //m_AppHandle = this.Handle; m_AppHandle = System.IntPtr.Zero; m_TapiVersion = 0x00020000; m_CTapi = new CTapi(m_friendlyAppName, m_TapiVersion, m_AppHandle, CTapi.LineInitializeExOptions.LINEINITIALIZEEXOPTION_USEEVENT); m_CTapi.AppNewCall += new CTapi.AppNewCallEventHandler(this.MyAppNewCallEventHandler); m_CTapi.CallStateEvent += new CTapi.CallStateEventHandler(this.MyCallStateEventHandler); m_CTapi.LineReplyEvent += new CTapi.LineReplyEventHandler(this.MyLineReplyEventHandler); m_CTapi.LineCallInfoEvent += new CTapi.LineCallInfoEventHandler(this.MyLineCallInfoEventHandler); m_CTapi.LineAddressStateEvent += new CTapi.LineAddressStateEventHandler(this.MyLineAddressStateEventHandler); m_CTapi.LineDevStateEvent += new CTapi.LineDevStateEventHandler(this.MyLineDevStateEventHandler); m_CTapi.LineCloseEvent += new CTapi.LineCloseEventHandler(this.MyLineCloseEventHandler); string sLineFilter; sLineFilter = GetConfigurationValue( "Provider" ); if (sLineFilter == null) throw new DeviceNotRespondingException("Unable to identify TAPI provider - check config file?", new ApplicationException()); m_CLine = m_CTapi.GetLineByFilter(sLineFilter, false, CTapi.LineCallPrivilege.LINECALLPRIVILEGE_OWNER | CTapi.LineCallPrivilege.LINECALLPRIVILEGE_MONITOR); if (m_CLine == null) { throw new DeviceNotRespondingException("Unable to identify TAPI line for provider #" + sLineFilter, new ApplicationException()); } while (true) { Thread.Sleep(500); } }
public void MyLineReplyEventHandler(Object sender, CTapi.LineReplyEventArgs e) { }
public void MyLineDevStateEventHandler(Object sender, CTapi.LineDevStateEventArgs e) { }
public void MyLineCloseEventHandler(Object sender, CTapi.LineCloseEventArgs e) { IList<DevicePropertyChange> deviceChanges = new List<DevicePropertyChange>(); IList<LinePropertyChange> lineChanges = new List<LinePropertyChange>(); IList<CallPropertyChange> callChanges = new List<CallPropertyChange>(); mDeviceState.Lines[0].RegistrationState = RegistrationState.Offline; lineChanges.Add(new LinePropertyChange(mDeviceState.Lines[0], PROPERTY_LINE_REGISTRATIONSTATE, "Online", "Offline")); if (deviceChanges.Count > 0 || lineChanges.Count > 0 || callChanges.Count > 0) StateManager.Instance().DeviceUpdated(this, deviceChanges, lineChanges, callChanges); }
public void MyLineCallInfoEventHandler(Object sender, CTapi.LineCallInfoEventArgs e) { IList<DevicePropertyChange> deviceChanges = new List<DevicePropertyChange>(); IList<LinePropertyChange> lineChanges = new List<LinePropertyChange>(); IList<CallPropertyChange> callChanges = new List<CallPropertyChange>(); if (m_ActiveCall != null ) { if (((uint)e.LineCallInfoState & (uint)CTapi.LineCallInfoState.LINECALLINFOSTATE_CALLERID) > 1) { m_ActiveCall.GetCallInfo(); if (mDeviceState.Lines[0].Calls[0].Type == CallType.Inbound ) { string oldCallerId = mDeviceState.Lines[0].LastCallerNumber; string newCallerId = m_ActiveCall.CallerID.ToString(); if (oldCallerId != newCallerId) { lineChanges.Add(new LinePropertyChange(mDeviceState.Lines[0], PROPERTY_LINE_LASTCALLERNUMBER, oldCallerId, newCallerId)); StateManager.Instance().DeviceUpdated(this, deviceChanges, lineChanges, callChanges); } mDeviceState.Lines[0].LastCallerNumber = newCallerId; } } } if( deviceChanges.Count > 0 || lineChanges.Count > 0 || callChanges.Count > 0 ) StateManager.Instance().DeviceUpdated( this, deviceChanges, lineChanges, callChanges ); }