コード例 #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();
            }
        }
コード例 #2
0
 private void QBSession(String toJid, string command, QBCommandsHandler qbCH)
 {
     if (qbCH.Ticket == null)
     {
         Send(toJid, "<QuickbooksError>Null m_ticket Error!</QuickbooksError>");
         return;
     }
     switch (command)
     {
         case "/QB/Status":
             //Send(toJid, "<QBStatus>Alive</QBStatus>");
             Send(toJid, qbCH.QBStatus());
             break;
         case "/QB/QBXMLVersionsForSession":
             Send(toJid, qbCH.QBXMLVersion());
             break;
         case "/QB/CompanyFileName":
             //Send(toJid, "<Status>Alive</Status>");
             Send(toJid, qbCH.QBCompanyFileName());
             break;
         default:
             if (command.StartsWith("/QB/ProcessRequest"))
                 //Send(toJid, "<Status>Alive</Status>");
                 Send(toJid, qbCH.QBProcessRequest(command.Replace("/QB/ProcessRequest", "")));
             /*
              * the validation would be responsed through Http
         else if (command.StartsWith("/QB/CompanyMarkerValidation"))
             //Send(toJid, "<Status>Alive</Status>");
             qbCH.QBProcessPlainXML("CompanyMarkerValidation", command.Replace("/QB/CompanyMarkerValidation", ""));
         else if (command.StartsWith("/QB/SyncMarkerValidation"))
             //Send(toJid, "<Status>Alive</Status>");
             qbCH.QBProcessPlainXML("CompanyMarkerValidation", command.Replace("/QB/SyncMarkerValidation", ""));
              */
             //else if (command.StartsWith("/QB/SyncDone"))
                 //Send(toJid, "<Status>Alive</Status>");
                 //qbCH.QBProcessPlainXML("SyncDone", command.Replace("/QB/SyncDone", ""));
                 //wake up the timer of synchandler
                 //m_syncHandler.SyncDone();
                 //without receiving any response, the xmpp connection won't get poped from the queue
                 //Send(toJid, qbCH.QBStatus());
             break;
     }
 }