1
Fork 0
mirror of https://github.com/RGBCube/serenity synced 2025-07-27 22:27:35 +00:00

LibCore+Userland: Convert TCPServer to use the Serenity Stream API

This is intended as a real-usecase test of the Serenity Stream API, and
seemed like a good candidate due to its low amount of users.
This commit is contained in:
sin-ack 2021-09-12 11:55:40 +00:00 committed by Ali Mohammad Pur
parent 2341b0159a
commit dfdb52efa7
11 changed files with 263 additions and 124 deletions

View file

@ -10,38 +10,35 @@
#include <AK/StringView.h>
#include <AK/Types.h>
#include <LibCore/Notifier.h>
#include <LibCore/TCPSocket.h>
#include <LibCore/Stream.h>
#include "Command.h"
#include "Parser.h"
class Client : public RefCounted<Client> {
public:
static NonnullRefPtr<Client> create(int id, RefPtr<Core::TCPSocket> socket, int ptm_fd)
{
return adopt_ref(*new Client(id, move(socket), ptm_fd));
}
static ErrorOr<NonnullRefPtr<Client>> create(int id, Core::Stream::TCPSocket socket, int ptm_fd);
Function<void()> on_exit;
protected:
Client(int id, RefPtr<Core::TCPSocket> socket, int ptm_fd);
private:
Client(int id, Core::Stream::TCPSocket socket, int ptm_fd);
ErrorOr<void> drain_socket();
ErrorOr<void> drain_pty();
ErrorOr<void> handle_command(Command const& command);
ErrorOr<void> send_data(StringView str);
ErrorOr<void> send_command(Command command);
ErrorOr<void> send_commands(Vector<Command> commands);
void drain_socket();
void drain_pty();
void handle_data(StringView);
void handle_command(const Command& command);
void handle_error();
void send_data(StringView str);
void send_command(Command command);
void send_commands(Vector<Command> commands);
void quit();
private:
// client id
int m_id { 0 };
// client resources
RefPtr<Core::TCPSocket> m_socket;
Core::Stream::TCPSocket m_socket;
Parser m_parser;
// pty resources
int m_ptm_fd { -1 };