draft gio socket connector

This commit is contained in:
yggverse 2024-08-16 10:00:23 +03:00
parent 0ce0c6776a
commit de312cdcb0
2 changed files with 70 additions and 2 deletions

View File

@ -48,8 +48,66 @@ Page::Page()
Page::~Page() = default; Page::~Page() = default;
// Actions // Public actions
void Page::update() void Page::update()
{ {
// navbar->get_request_value() @TODO // Route by request protocol
if ("file" == navbar->get_request_scheme())
{
// @TODO
}
else if ("gemini" == navbar->get_request_scheme())
{
connect(
navbar->get_request_host(),
navbar->get_request_port().empty() ? 1965 : stoi(
navbar->get_request_port()
)
);
}
else
{
// @TODO
}
} }
// Private helpers
void Page::connect(
const std::string & host,
int port
) {
try
{
socket_client = Gio::SocketClient::create();
socket_client->connect_to_host_async(
host,
port,
[this](const Glib::RefPtr<Gio::AsyncResult> & result)
{
try
{
auto socket = socket_client->connect_finish(
result
);
// @TODO read/write data
socket->close();
}
catch (const Glib::Error & exception)
{
// @TODO exception.what();
}
}
);
}
catch (const std::exception & exception)
{
// @TODO exception.what();
}
}

View File

@ -6,6 +6,10 @@
#include <gtkmm/box.h> #include <gtkmm/box.h>
#include <sigc++/functors/mem_fun.h> #include <sigc++/functors/mem_fun.h>
#include <giomm/asyncresult.h>
#include <giomm/socketconnection.h>
#include <giomm/socketclient.h>
namespace app::browser::main::tab namespace app::browser::main::tab
{ {
namespace page namespace page
@ -19,10 +23,16 @@ namespace app::browser::main::tab
private: private:
Glib::RefPtr<Gio::SimpleActionGroup> action_group; Glib::RefPtr<Gio::SimpleActionGroup> action_group;
Glib::RefPtr<Gio::SocketClient> socket_client;
page::Navbar * navbar; page::Navbar * navbar;
page::Content * content; page::Content * content;
void connect(
const std::string & host,
int port
);
public: public:
Page(); Page();