/*
 * Copyright (c) 2014, 2015, 2016, 2023 Jonas 'Sortie' Termansen.
 *
 * Permission to use, copy, modify, and distribute this software for any
 * purpose with or without fee is hereby granted, provided that the above
 * copyright notice and this permission notice appear in all copies.
 *
 * THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES
 * WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF
 * MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR
 * ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES
 * WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN
 * ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF
 * OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE.
 *
 * connection.h
 * Display server main loop.
 */

#ifndef SERVER_H
#define SERVER_H

#include <stdbool.h>
#include <stddef.h>

struct connection;
struct display;
struct pollfd;

struct server
{
	struct display* display;
	const char* server_path;
	int server_fd;
	int tty_fd;
	int mouse_fd;
	struct connection** connections;
	size_t connections_used;
	size_t connections_length;
	struct pollfd* pfds;
	size_t pfds_count;
};

void server_initialize(struct server* server, struct display* display,
                       const char* tty, const char* mouse, const char* socket);
bool server_accept(struct server* server);
size_t server_pfds_count(const struct server* server);
void server_poll(struct server* server);
void server_mainloop(struct server* server);

#endif
