threading something something threading

This commit is contained in:
hexlocation 2025-02-11 21:29:42 +00:00
parent b9b1b50599
commit 996bc38052
6 changed files with 60 additions and 11 deletions

View file

@ -1,9 +1,10 @@
#include "App.h"
#include "gui/MainWindow.h"
#include <cstdio>
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;
}

View file

@ -1,7 +1,6 @@
#ifndef APP_H
#define APP_H
#include <Message.h>
#include <Window.h>
#include <gloox/connectionlistener.h>
#include <gloox/presencehandler.h>

View file

@ -20,10 +20,9 @@
#include <TextControl.h>
#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;

View file

@ -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;

View file

@ -6,11 +6,19 @@
#include <Window.h>
#include <StringView.h>
#include "../App.h"
#include <cstdio>
#include <format>
#include <gloox/gloox.h>
#include <gloox/jid.h>
#include <gloox/client.h>
#include <iostream>
#include <ostream>
#include <thread>
// 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";
};

View file

@ -2,15 +2,27 @@
#define MIDDLEMAN_H
#include <Window.h>
#include "../App.h"
#include <gloox/connectionlistener.h>
#include <gloox/gloox.h>
#include <gloox/presence.h>
#include <gloox/presencehandler.h>
#include <gloox/client.h>
#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