⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 main.cxx

📁 pwlib源码库
💻 CXX
字号:
/* * main.cxx * * PWLib application source file for XMPPTest * * Main program entry point. * * Copyright 2004 Reitek S.p.A. * * $Log: main.cxx,v $ * Revision 1.2  2004/05/09 07:23:49  rjongbloed * More work on XMPP, thanks Federico Pinna and Reitek S.p.A. * * Revision 1.1  2004/04/26 01:51:58  rjongbloed * More implementation of XMPP, thanks a lot to Federico Pinna & Reitek S.p.A. * * */#include "main.h"#if !P_EXPAT#error Must have XML support for this application#endif///////////////////////////////////////////////////////////////////////////////#include "ConnectDialog.h"class ConnectDialog : public _ConnectDialog{public:  ConnectDialog(wxWindow *parent)    : _ConnectDialog(parent) { }  void      SetJID(const PString& jid);  void      SetPwd(const PString& pwd);  void      SetRememberPwd(bool b = true);  XMPP::JID GetJID() const;  PString   GetPwd() const;  bool      GetRememberPwd() const;};void ConnectDialog::SetJID(const PString& jid){ if (m_JID) m_JID->SetValue((const char *)jid); }void ConnectDialog::SetPwd(const PString& pwd){ if (m_Pwd) m_Pwd->SetValue((const char *)pwd); }void ConnectDialog::SetRememberPwd(bool b){ if (m_RememberPwd) m_RememberPwd->SetValue(b); }XMPP::JID ConnectDialog::GetJID() const{ return m_JID != NULL ?  XMPP::JID(PString((const char *)m_JID->GetValue())) : PString::Empty(); }PString ConnectDialog::GetPwd() const{ return m_Pwd != NULL ? (const char *)m_Pwd->GetValue() : PString::Empty(); }bool ConnectDialog::GetRememberPwd() const{ return m_RememberPwd != NULL ? m_RememberPwd->GetValue() : false; }////////////////////////////////////////////////////////////////////////////////*BEGIN_EVENT_TABLE(XMPPFrame, wxFrame)  EVT_SIZE(XMPPFrame::OnSize)  EVT_MENU(XMPPFrame::MENU_FILE_CONNECT, XMPPFrame::OnConnect)  EVT_MENU(XMPPFrame::MENU_FILE_DISCONNECT, XMPPFrame::OnDisconnect)  EVT_MENU(XMPPFrame::MENU_FILE_QUIT, XMPPFrame::OnQuit)END_EVENT_TABLE()*/XMPPFrame::XMPPFrame()  : MainFrame(NULL),    m_Roster(new XMPP::Roster), m_Client(NULL){  m_Roster->RosterChangedHandlers().Add(new PCREATE_SMART_NOTIFIER(OnRosterChanged));  Show(TRUE);}XMPPFrame::~XMPPFrame(){}void XMPPFrame::OnConnect(wxCommandEvent& WXUNUSED(event)){  ConnectDialog * dlg = new ConnectDialog(this);  if (m_Client != NULL) {    dlg->SetJID(m_Client->GetJID());    // and the password...  }  if (dlg->ShowModal() == wxID_CANCEL)    return;  XMPP::JID jid = dlg->GetJID();  PString pwd = dlg->GetPwd();  dlg->Destroy();       if (m_Client != NULL) {    m_Client->Stop();    if (!m_Client->IsTerminated())      m_Client->WaitForTermination();    delete m_Client;  }  m_Client = new XMPP::C2S::StreamHandler(jid, pwd);  m_Client->SessionEstablishedHandlers().Add(new PCREATE_SMART_NOTIFIER(OnSessionEstablished));  m_Client->SessionReleasedHandlers().Add(new PCREATE_SMART_NOTIFIER(OnSessionReleased));  m_Client->MessageHandlers().Add(new PCREATE_SMART_NOTIFIER(OnMessage));  SetStatusText("Connecting...", 0);  m_Client->Start();}void XMPPFrame::OnDisconnect(wxCommandEvent& WXUNUSED(event)){  if (m_Client == NULL)    return;    m_Client->Stop();  if (!m_Client->IsTerminated())    m_Client->WaitForTermination();  delete m_Client;  m_Client = NULL;}void XMPPFrame::OnQuit(wxCommandEvent& event){  OnDisconnect(event);  Close(TRUE);}void XMPPFrame::OnSessionEstablished(XMPP::C2S::StreamHandler& client, INT){  SetStatusText("Connected", 0);  m_Roster->Attach(m_Client);}void XMPPFrame::OnSessionReleased(XMPP::C2S::StreamHandler& client, INT){  SetStatusText("Disconnected", 0);  m_Roster->Detach();}void XMPPFrame::OnMessage(XMPP::Message& msg, INT){  // If it's valid and it's not in-band data  if (msg.GetElement("data") == NULL) {    wxMessageDialog dialog(this, (const char *)msg.GetBody(), (const char *)msg.GetFrom(), wxOK);    dialog.ShowModal();  }}void XMPPFrame::OnRosterChanged(XMPP::Roster&, INT){  // rebuild the tree  m_RosterTree->DeleteAllItems();  wxTreeItemId rootID = m_RosterTree->AddRoot(_T("root"));  PDictionary<PString, POrdinalKey> groups;  const XMPP::Roster::ItemList& l = m_Roster->GetItems();    for (PINDEX i = 0, imax = l.GetSize() ; i < imax ; i++) {    const XMPP::Roster::Item& item = l[i];    const PStringSet& s = item.GetGroups();    for (PINDEX j = 0, jmax = s.GetSize() ; j < jmax ; j++) {      const PString& key = s.GetKeyAt(j);      wxTreeItemId g_id;      if (!groups.Contains(key)) {        g_id = m_RosterTree->AppendItem(rootID, (const char *)key);        groups.SetAt(key, new POrdinalKey(g_id));      }      g_id = (PINDEX)groups[key];      wxTreeItemId i_id = m_RosterTree->AppendItem(g_id, (const char *)item.GetName());      m_RosterTree->Expand(g_id);      const XMPP::Roster::Item::PresenceInfo& pres = item.GetPresence();      for (PINDEX k = 0, kmax = pres.GetSize() ; k < kmax ; k++) {        PString res = pres.GetKeyAt(k);        if (pres[res].GetType() == XMPP::Presence::Available) {          PString show;          pres[res].GetShow(&show);          res += " - " + show;          m_RosterTree->AppendItem(i_id, (const char *)res);        }      }      m_RosterTree->Expand(i_id);    }  }}///////////////////////////////////////////////////////////////////////////////IMPLEMENT_APP(XMPPTest)XMPPTest::XMPPTest()  : PProcess("Reitek S.p.A.", "XMPPTest", 1, 0, AlphaCode, 1){}bool XMPPTest::OnInit(){#if PTRACING  PTrace::Initialise(10, "jabber.log", PTrace::Blocks | PTrace::DateAndTime | PTrace::Thread | PTrace::FileAndLine);#endif  // Create the main frame window  SetTopWindow(new XMPPFrame());  return true;}// End of File ///////////////////////////////////////////////////////////////

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -