From 996bc38052cf205bcfc9eb3a23f9caed68dfcb7f Mon Sep 17 00:00:00 2001 From: hex Date: Tue, 11 Feb 2025 21:29:42 +0000 Subject: [PATCH] threading something something threading --- src/App.cpp | 4 +++- src/App.h | 1 - src/gui/MainWindow.cpp | 5 ++--- src/gui/MainWindow.h | 2 +- src/gui/Middleman.cpp | 41 +++++++++++++++++++++++++++++++++++++++-- src/gui/Middleman.h | 18 +++++++++++++++--- 6 files changed, 60 insertions(+), 11 deletions(-) diff --git a/src/App.cpp b/src/App.cpp index 985a68f..7748706 100644 --- a/src/App.cpp +++ b/src/App.cpp @@ -1,9 +1,10 @@ #include "App.h" #include "gui/MainWindow.h" +#include App::App(void) : BApplication(kSignature) { - MainWindow *mainWindow = new MainWindow(this); + MainWindow *mainWindow = new MainWindow(); mainWindow->Show(); } @@ -15,3 +16,4 @@ int main(void) delete app; return 0; } + diff --git a/src/App.h b/src/App.h index b8ec9ae..27d67ba 100644 --- a/src/App.h +++ b/src/App.h @@ -1,7 +1,6 @@ #ifndef APP_H #define APP_H -#include #include #include #include diff --git a/src/gui/MainWindow.cpp b/src/gui/MainWindow.cpp index 3d6b3ad..acc431a 100644 --- a/src/gui/MainWindow.cpp +++ b/src/gui/MainWindow.cpp @@ -20,10 +20,9 @@ #include #include "Middleman.h" -MainWindow::MainWindow(App *app) +MainWindow::MainWindow() : BWindow(BRect(100, 100, 500, 400), "Renga", B_TITLED_WINDOW, B_QUIT_ON_WINDOW_CLOSE) { - Application = app; // parent layout (defines the entire window layout) BGroupLayout *pGroup = new BGroupLayout(B_HORIZONTAL); SetLayout(pGroup); @@ -76,7 +75,7 @@ void MainWindow::MessageReceived(BMessage *msg) Hide(); - Middleman *middleman = new Middleman(JidInputBox->Text(), PwInputBox->Text(), Application); + Middleman *middleman = new Middleman(JidInputBox->Text(), PwInputBox->Text()); middleman->Show(); break; diff --git a/src/gui/MainWindow.h b/src/gui/MainWindow.h index 4b24ccf..87e5ab0 100644 --- a/src/gui/MainWindow.h +++ b/src/gui/MainWindow.h @@ -14,7 +14,7 @@ const uint32 msgConnectButtonClicked = 'mCBC'; class MainWindow : public BWindow { public: - MainWindow(App *app); + MainWindow(); virtual void MessageReceived(BMessage *msg); private: App *Application; diff --git a/src/gui/Middleman.cpp b/src/gui/Middleman.cpp index fd1029e..6acb73b 100644 --- a/src/gui/Middleman.cpp +++ b/src/gui/Middleman.cpp @@ -6,11 +6,19 @@ #include #include #include "../App.h" +#include #include +#include +#include +#include +#include +#include +#include // Connection middleman window. // This window, when called, automatically sets up a connection to the XMPP server. -Middleman::Middleman(const char* jid, const char* password, App *app) + +Middleman::Middleman(const char* _jid, const char* password) : BWindow(BRect(200,200,600,400), TITLE, B_TITLED_WINDOW, B_NOT_MINIMIZABLE | B_QUIT_ON_WINDOW_CLOSE) { BGroupLayout *group = new BGroupLayout(B_VERTICAL); @@ -19,5 +27,34 @@ Middleman::Middleman(const char* jid, const char* password, App *app) group->View()->AdoptSystemColors(); group->AddView(new BStringView("label", "Placeholder label (connecting...)")); - group->AddView(new BStringView("label", std::format("JID: {}\nPassword: {}", jid, password).c_str())); + group->AddView(new BStringView("label", std::format("JID: {}\nPassword: {}", _jid, password).c_str())); + + auto lambda = [](Middleman *mm, const char *_jid, const char *password) { + gloox::JID jid(std::format("{}/{}", _jid, appName)); + mm->client = new gloox::Client(jid, password); + mm->client->registerConnectionListener(mm); + mm->client->registerPresenceHandler(mm); + mm->client->connect(true); + }; + + std::thread tobj(lambda, this, _jid, password); + tobj.detach(); } + +void Middleman::onDisconnect(gloox::ConnectionError err) +{ + std::cout << "err: " << err << std::endl; +}; +void Middleman::handlePresence(const gloox::Presence &presence) +{ + std::cout << "meow 1"; +}; +bool Middleman::onTLSConnect(const gloox::CertInfo &info) +{ + std::cout << "meow 1"; + return true; +}; +void Middleman::onConnect() +{ + std::cout << "meow 333"; +}; diff --git a/src/gui/Middleman.h b/src/gui/Middleman.h index c4d11ac..5c64dad 100644 --- a/src/gui/Middleman.h +++ b/src/gui/Middleman.h @@ -2,15 +2,27 @@ #define MIDDLEMAN_H #include -#include "../App.h" +#include +#include +#include +#include +#include #define TITLE "Connecting..." // Middleman is the "middle" window that sets up the XMPP connection and manages all windows that require one. +// Windows are designed to be opened up in a "flow" +// Main (login) window -> Middleman <-> Contacts List <-> Chatbox // TODO: add client class to mm class for windows to send message -class Middleman : public BWindow { +class Middleman : public BWindow, gloox::PresenceHandler, gloox::ConnectionListener { public: - Middleman(const char* jid, const char* password, App *app); + Middleman(const char* jid, const char* password); + virtual void handlePresence(const gloox::Presence &presence); + virtual bool onTLSConnect(const gloox::CertInfo &info); + virtual void onConnect(); + virtual void onDisconnect(gloox::ConnectionError err); + private: + gloox::Client *client; }; #endif