コード例 #1
0
ファイル: AutoAttendantForm.cs プロジェクト: oldfox94/itapi3
        private void OnCallState(object sender, TapiCallStateEventArgs e)
        {
            TCall thisCall = e.Call;

            if (thisCall == activeCall)
            {
                switch (thisCall.CallState)
                {
                case CALL_STATE.CS_CONNECTED:
                    HandleCall();
                    break;

                case CALL_STATE.CS_DISCONNECTED:
                    DisconnectCall();
                    break;

                case CALL_STATE.CS_OFFERING:
                    AnswerCall();
                    break;

                default:
                    break;
                }
            }
        }
コード例 #2
0
        public String insert(TCall p, String userId)
        {
            String re  = "";
            String sql = "";

            p.active = "1";
            //p.ssdata_id = "";
            int chk = 0;

            chkNull(p);

            sql = "Insert Into " + tcall.table + " set " +
                  " " + tcall.active + "='1' " +
                  "," + tcall.date_create + "= now() " +
                  "," + tcall.user_create + "='" + userId.Replace("'", "''") + "' " +
                  "," + tcall.prefix + "='" + p.prefix.Replace("'", "''") + "' " +
                  "," + tcall.code + "='" + p.code.Replace("'", "''") + "' " +
                  "," + tcall.status_call + "='0' " +
                  "," + tcall.queue_id + "='" + p.queue_id.Replace("'", "''") + "' " +
                  "," + tcall.queue + "='" + p.queue.Replace("'", "''") + "' " +
                  "";
            try
            {
                re = conn.ExecuteNonQuery(conn.conn, sql);
            }
            catch (Exception ex)
            {
                sql = ex.Message + " " + ex.InnerException;
            }

            return(re);
        }
コード例 #3
0
ファイル: AutoAttendantForm.cs プロジェクト: oldfox94/itapi3
 private void DisconnectCall()
 {
     SetStatusMessage("Waiting for a call...");
     if (activeCall != null)
     {
         activeCall.Dispose();
         activeCall = null;
     }
 }
コード例 #4
0
ファイル: mf2040.cs プロジェクト: uvigii/cls
        private void OnDisconnectClicked(object sender, EventArgs e)
        {
            TCall call = (TCall)lbCalls.SelectedItem;

            try
            {
                call.Disconnect(DISCONNECT_CODE.DC_NORMAL);
            }
            catch (Exception ex)
            {
                MessageBox.Show(ex.ToString());
            }
        }
コード例 #5
0
ファイル: mf2040.cs プロジェクト: uvigii/cls
        private void OnAnswerClicked(object sender, EventArgs e)
        {
            TCall call = (TCall)lbCalls.SelectedItem;

            try
            {
                call.SelectDefaultTerminals();
                call.Answer();
            }
            catch (Exception ex)
            {
                MessageBox.Show(ex.ToString());
            }
        }
コード例 #6
0
ファイル: OutgoingForm.cs プロジェクト: oldfox94/itapi3
        private void OnCallStateChanged(object sender, TapiCallStateEventArgs e)
        {
            TCall thisCall = e.Call;

            if (thisCall == currCall)
            {
                toolStripStatusLabel1.Text = "Call " + currCall.ToString();
                if (e.State == CALL_STATE.CS_DISCONNECTED)
                {
                    currCall = null;
                    thisCall.Address.Close();
                }
                CheckControls();
            }
        }
コード例 #7
0
ファイル: AutoAttendantForm.cs プロジェクト: oldfox94/itapi3
        private void OnNewCall(object sender, TapiCallNotificationEventArgs e)
        {
            TCall thisCall = e.Call;

            if (thisCall.Privilege == CALL_PRIVILEGE.CP_OWNER)
            {
                if (activeCall != null)
                {
                    thisCall.Disconnect(DISCONNECT_CODE.DC_REJECTED);
                }
                else
                {
                    activeCall = thisCall;
                }
            }
        }
コード例 #8
0
ファイル: mf2040.cs プロジェクト: uvigii/cls
        void OnSelectedCallChange(object sender, EventArgs e)
        {
            TCall call = (TCall)lbCalls.SelectedItem;

            if (call != null)
            {
                if (call.Privilege == CALL_PRIVILEGE.CP_OWNER)
                {
                    btnAnswer.Enabled     = call.CallState == CALL_STATE.CS_OFFERING;
                    btnDisconnect.Enabled = true;
                    return;
                }
            }

            btnAnswer.Enabled     = false;
            btnDisconnect.Enabled = false;
        }
コード例 #9
0
        private void button1_Click(object sender, EventArgs e)
        {
            try
            {
                selectedAddress.Open(TAPIMEDIATYPES.AUDIO);
            }
            catch (TapiException ex)
            {
                MessageBox.Show(ex.Message);
            }

            currCall = selectedAddress.CreateCall(textBox1.Text, LINEADDRESSTYPES.PhoneNumber, TAPIMEDIATYPES.AUDIO);
            if (currCall != null)
            {
                try
                {
                    currCall.Connect(false);
                }
                catch (TapiException ex)
                {
                    MessageBox.Show(ex.Message);
                }

                // This must be done AFTER call is connected.  Otherwise it will not
                // associate the terminal.  This is a requirement of TAPI3 itself.
                try
                {
                    playbackTerminal = currCall.RequestTerminal(
                        TTerminal.FilePlaybackTerminal,
                        TAPIMEDIATYPES.AUDIO, JulMar.Tapi3.TERMINAL_DIRECTION.TD_CAPTURE);
                    if (playbackTerminal != null)
                    {
                        playbackTerminal.MediaPlayList = new string[] { MESSAGE_PROMPT };
                        currCall.SelectTerminalOnCall(playbackTerminal);
                    }
                    else
                    {
                        MessageBox.Show("Failed to retrieve playback terminal.");
                    }
                }
                catch (TapiException ex)
                {
                    MessageBox.Show(ex.Message);
                }
            }
        }
コード例 #10
0
        private void chkNull(TCall p)
        {
            long chk = 0;

            p.date_modi   = p.date_modi == null ? "" : p.date_modi;
            p.date_cancel = p.date_cancel == null ? "" : p.date_cancel;
            p.user_create = p.user_create == null ? "" : p.user_create;
            p.user_modi   = p.user_modi == null ? "" : p.user_modi;
            p.user_cancel = p.user_cancel == null ? "" : p.user_cancel;

            p.prefix      = p.prefix == null ? "" : p.prefix;
            p.code        = p.code == null ? "" : p.code;
            p.status_call = p.status_call == null ? "" : p.status_call;

            p.queue_id = long.TryParse(p.queue_id, out chk) ? chk.ToString() : "0";
            p.queue    = long.TryParse(p.queue, out chk) ? chk.ToString() : "0";
        }
コード例 #11
0
        private static void InitiateCall(string phoneNumber)
        {
            string lineToUse = Configuration.Container.lineToUse;

            log.Info(String.Format("Creating call via line '{0}'.", lineToUse));
            TAddress line = tapi.Addresses.SingleOrDefault(a => a.AddressName == lineToUse);

            // Always assumes 0 prefix is needed to dial out.
            TCall call = line.CreateCall("0" + phoneNumber, LINEADDRESSTYPES.PhoneNumber, TAPIMEDIATYPES.AUDIO);

            try {
                call.Connect(false);
            }
            catch (TapiException ex) {
                log.Error("TapiException: ", ex);
                return;
            }

            log.Info(String.Format("Calling '{0}'...", phoneNumber));
        }
コード例 #12
0
        private void initConfig()
        {
            tcall             = new TCall();
            tcall.call_id     = "call_id";
            tcall.queue_id    = "queue_id";
            tcall.queue       = "queue";
            tcall.prefix      = "prefix";
            tcall.code        = "code";
            tcall.status_call = "status_call";

            tcall.date_create = "date_create";
            tcall.date_modi   = "date_modi";
            tcall.date_cancel = "date_cancel";
            tcall.user_create = "user_create";
            tcall.user_modi   = "user_modi";
            tcall.user_cancel = "user_cancel";

            tcall.table   = "t_call";
            tcall.pkField = "call_id";
        }
コード例 #13
0
ファイル: OutgoingForm.cs プロジェクト: oldfox94/itapi3
        private void OnNewCall(object sender, TapiCallNotificationEventArgs e)
        {
            TCall newCall = e.Call;

            // If we are the owner of the call..
            if (newCall.Privilege == CALL_PRIVILEGE.CP_OWNER)
            {
                if (currCall != newCall)
                {
                    try
                    {
                        newCall.Disconnect(DISCONNECT_CODE.DC_REJECTED);
                    }
                    catch (TapiException ex)
                    {
                        toolStripStatusLabel1.Text = ex.Message;
                    }
                }
                else
                {
                    toolStripStatusLabel1.Text = "Call " + newCall.ToString();
                }
            }
        }
コード例 #14
0
ファイル: OutgoingForm.cs プロジェクト: oldfox94/itapi3
        private void OnDial(object sender, EventArgs e)
        {
            TAddress         addr     = (TAddress)cbAddress.SelectedItem;
            LINEADDRESSTYPES addrType = (LINEADDRESSTYPES)cbDestinationType.SelectedItem;

            TAPIMEDIATYPES mediaType = TAPIMEDIATYPES.AUDIO;

            if (addr.QueryMediaType(TAPIMEDIATYPES.VIDEO))
            {
                mediaType |= TAPIMEDIATYPES.VIDEO;
            }

            try
            {
                addr.Open(mediaType);
            }
            catch (TapiException ex)
            {
                // Invalid media mode? Try just datamodem for unimodem.
                if (ex.ErrorCode == unchecked ((int)0x80040004))
                {
                    try
                    {
                        addr.Open(TAPIMEDIATYPES.DATAMODEM);
                    }
                    catch
                    {
                        toolStripStatusLabel1.Text = ex.Message;
                    }
                }
                else
                {
                    toolStripStatusLabel1.Text = ex.Message;
                }
            }

            // Create a call -- this should always succeed
            currCall = addr.CreateCall(textDestination.Text, addrType, mediaType);
            if (currCall != null)
            {
                // Get the playback terminal from the call
                try
                {
                    playbackTerminal = currCall.RequestTerminal(
                        TTerminal.FilePlaybackTerminal,
                        TAPIMEDIATYPES.AUDIO, TERMINAL_DIRECTION.TD_CAPTURE);
                    if (playbackTerminal != null)
                    {
                        playbackTerminal.MediaPlayList = new string[] { PLAY_FILENAME };
                        //string[] names = playbackTerminal.MediaPlayList;
                        //playbackTerminal.Name;
                        //currCall.SelectTerminalOnCall(playbackTerminal);
                    }
                    else
                    {
                        MessageBox.Show("Failed to retrieve playback terminal.");
                    }
                }
                catch (TapiException ex)
                {
                    MessageBox.Show(ex.Message);
                }


                //// If the address supports media streams, then select terminals on it.
                //if (addr.SupportsMediaStreams)
                //{
                //    // This walks through the streams of the call and selects the default terminal
                //    // for each one.
                //    currCall.SelectDefaultTerminals();
                //}

                try
                {
                    // Connect the call
                    currCall.Connect(false);
                    toolStripStatusLabel1.Text = "Placing call...";
                }
                catch (TapiException ex)
                {
                    toolStripStatusLabel1.Text = ex.Message;
                }
            }
        }
コード例 #15
0
        static void Main(string[] args)
        {
            TTapi tapi = new JulMar.Tapi3.TTapi();
            TCall call = null; TAddress modemAddr = null;

            Console.WriteLine("{0} found", tapi.Initialize());

            tapi.TE_CALLNOTIFICATION += delegate(object sender, TapiCallNotificationEventArgs e)
            {
                Console.WriteLine("New call {0} detected from {1}", e.Call.ToString(), e.Event);
            };
            tapi.TE_CALLSTATE += delegate(object sender, TapiCallStateEventArgs e)
            {
                Console.WriteLine("{0}:{4} has changed state to {1} due to {2} - current={3}:{5}", e.Call, e.State, e.Cause, e.Call == call, e.Call.GetHashCode(), (call != null) ? call.GetHashCode() : 0);

                if (e.State == CALL_STATE.CS_INPROGRESS && e.Call == call)
                {
                    Console.WriteLine("Dropping call");
                    e.Call.Disconnect(DISCONNECT_CODE.DC_NORMAL);
                }
            };

            foreach (TPhone phone in tapi.Phones)
            {
                using (phone)
                {
                    phone.Open(PHONE_PRIVILEGE.PP_MONITOR);
                    Console.WriteLine("{0}\nTotal buttons: {1}", phone.Display, phone.get_PhoneCapability(PHONECAPS_LONG.PCL_NUMBUTTONLAMPS));
                }
            }

            foreach (TAddress addr in tapi.Addresses)
            {
                if (String.Compare(addr.ServiceProviderName, "unimdm.tsp", true) == 0 && addr.QueryMediaType(TAPIMEDIATYPES.AUDIO))
                {
                    modemAddr = addr;
                }
            }

            if (modemAddr != null)
            {
                Console.WriteLine("{0} = {1} ({3}) [{2}]", modemAddr.AddressName, modemAddr.State, modemAddr.ServiceProviderName, modemAddr.DialableAddress);
                modemAddr.Monitor(TAPIMEDIATYPES.AUDIO);

                ConsoleKey ki = ConsoleKey.A;
                while (ki != ConsoleKey.Q)
                {
                    // Flip the auto-destroy flag
                    if (ki == ConsoleKey.D)
                    {
                        tapi.AutoDestroyCalls = !tapi.AutoDestroyCalls;
                        Console.WriteLine("Set AutoDestroy to {0}", tapi.AutoDestroyCalls);
                    }

                    // List existing calls
                    if (ki == ConsoleKey.L)
                    {
                        foreach (TCall _call in modemAddr.Calls)
                        {
                            Console.WriteLine("Existing call found: {0}:{1}", _call, _call.GetHashCode());
                            _call.Dispose(); // Go ahead and dump it
                        }
                    }

                    // Create a new call
                    else
                    {
                        call = modemAddr.CreateCall("5551213", LINEADDRESSTYPES.PhoneNumber, TAPIMEDIATYPES.DATAMODEM);
                        Console.WriteLine("Created new call {0}:{1}", call, call.GetHashCode());
                        try
                        {
                            // This will fail if existing call interface is still around (i.e. not disposed)
                            call.Connect(false);
                        }
                        catch (TapiException ex)
                        {
                            Console.WriteLine(ex.Message);
                        }
                    }
                    Console.WriteLine("Press a key to try another call.. Q to quit");
                    ki = Console.ReadKey().Key;
                }
            }

            tapi.Shutdown();

            // Call should be disposed here.. state will be CS_UNKNOWN
            if (call != null)
            {
                Console.WriteLine("{0} {1}", call, call.CallState);
            }
        }