Example #1
0
        void Respond(agsXMPP.protocol.client.Message msg)
        {
            QBCommandsHandler qbCH = null;
            bool responded = false;
            string toJid = msg.From.Bare + "/" + msg.From.Resource;
            string command = msg.Body.Trim();

            try
            {
                ThreadPool.QueueUserWorkItem(Waiter, Thread.CurrentThread);
                switch (command)
                {
                    case "/Status":
                        Send(toJid, "<Status>Alive</Status>");
                        responded = true;
                        break;
                    case "/ConnectorVersion":
                        //temporally hard coded
                        Send(toJid, "<ConnectorVersion>" + 0.1 + "</ConnectorVersion>");
                        responded = true;
                        break;
                    case "/Shutdown":
                        Send(toJid, "<Status>ShuttingDown</Status>");
                        responded = true;
                        break;
                    case "/SyncDone":
                        //temp solution
                        if (m_syncHandler != null)
                            m_syncHandler.SyncDone();
                        Send(toJid, "<Status>Alive</Status>");
                        responded = true;
                        break;
                    default:
                        if (command.StartsWith("/QB/"))
                        {
                            //To debug the timeout
                            //Thread.Sleep(m_timeout*2);

                            qbCH = new QBCommandsHandler();
                            if (qbCH.ConnectToQB())
                            {
                                QBSession(toJid, command, qbCH);
                                qbCH.DisconnectFromQB();
                            }
                            else
                                Send(toJid, "<QuickbooksError>Failed to begin QuickBook session!</QuickbooksError>");
                            responded = true;
                        }
                        break;
                }
                //abort from inside will only raise an exception
                //Thread.CurrentThread.Abort();
            }
            catch (ThreadAbortException ex)
            {
                LogHelper.Error(ex);
                if (responded == false) //For thread is aborted from outside, e.Message.Equals("Timeout!") will not return true
                    Send(toJid, "<QuickbooksError>Timeout!</QuickbooksError>");
            }
            finally
            {
                if (qbCH != null)
                {
                    if (qbCH.Ticket != null)
                        qbCH.DisconnectFromQB();
                }
                //Thread.CurrentThread.Abort();
            }
        }