Basic command handling (without arguments)
This commit is contained in:
parent
8b2d2bcd50
commit
da4f881cc9
4 changed files with 80 additions and 3 deletions
21
include/kiwmi/commands.h
Normal file
21
include/kiwmi/commands.h
Normal file
|
@ -0,0 +1,21 @@
|
||||||
|
/* Copyright (c), Charlotte Meyer <dev@buffet.sh>
|
||||||
|
*
|
||||||
|
* This Source Code Form is subject to the terms of the Mozilla Public
|
||||||
|
* License, v. 2.0. If a copy of the MPL was not distributed with this file,
|
||||||
|
* You can obtain one at https://mozilla.org/MPL/2.0/.
|
||||||
|
*/
|
||||||
|
|
||||||
|
#ifndef KIWMI_COMMANDS_H
|
||||||
|
#define KIWMI_COMMANDS_H
|
||||||
|
|
||||||
|
#include <stdbool.h>
|
||||||
|
#include <stdio.h>
|
||||||
|
|
||||||
|
#include "kiwmi/server.h"
|
||||||
|
|
||||||
|
bool handle_client_command(
|
||||||
|
char *command,
|
||||||
|
FILE *client,
|
||||||
|
struct kiwmi_server *server);
|
||||||
|
|
||||||
|
#endif /* KIWMI_COMMANDS_H */
|
50
kiwmi/commands.c
Normal file
50
kiwmi/commands.c
Normal file
|
@ -0,0 +1,50 @@
|
||||||
|
/* Copyright (c), Charlotte Meyer <dev@buffet.sh>
|
||||||
|
*
|
||||||
|
* This Source Code Form is subject to the terms of the Mozilla Public
|
||||||
|
* License, v. 2.0. If a copy of the MPL was not distributed with this file,
|
||||||
|
* You can obtain one at https://mozilla.org/MPL/2.0/.
|
||||||
|
*/
|
||||||
|
|
||||||
|
#include "kiwmi/commands.h"
|
||||||
|
|
||||||
|
#include <string.h>
|
||||||
|
|
||||||
|
static bool
|
||||||
|
cmd_quit(
|
||||||
|
FILE *UNUSED(client),
|
||||||
|
const char **UNUSED(args),
|
||||||
|
struct kiwmi_server *server)
|
||||||
|
{
|
||||||
|
wl_display_terminate(server->wl_display);
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
|
||||||
|
typedef bool (
|
||||||
|
*cmd_handler)(FILE *client, const char **args, struct kiwmi_server *server);
|
||||||
|
|
||||||
|
static const struct {
|
||||||
|
const char *name;
|
||||||
|
cmd_handler handler;
|
||||||
|
} commands[] = {
|
||||||
|
{"quit", cmd_quit},
|
||||||
|
};
|
||||||
|
|
||||||
|
bool
|
||||||
|
handle_client_command(char *command, FILE *client, struct kiwmi_server *server)
|
||||||
|
{
|
||||||
|
#define SIZE(arr) (sizeof((arr)) / sizeof(*(arr)))
|
||||||
|
|
||||||
|
const char *name = strtok(command, " \t\r");
|
||||||
|
|
||||||
|
for (size_t i = 0; i < SIZE(commands); ++i) {
|
||||||
|
if (strcmp(name, commands[i].name) == 0) {
|
||||||
|
return commands[i].handler(client, NULL, server);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
fprintf(client, "Unknown command: %s\n", name);
|
||||||
|
|
||||||
|
return false;
|
||||||
|
|
||||||
|
#undef SIZE
|
||||||
|
}
|
|
@ -20,6 +20,7 @@
|
||||||
|
|
||||||
#include <wlr/util/log.h>
|
#include <wlr/util/log.h>
|
||||||
|
|
||||||
|
#include "kiwmi/commands.h"
|
||||||
#include "kiwmi/server.h"
|
#include "kiwmi/server.h"
|
||||||
|
|
||||||
static void
|
static void
|
||||||
|
@ -40,10 +41,12 @@ display_destroy_notify(struct wl_listener *listener, void *UNUSED(data))
|
||||||
}
|
}
|
||||||
|
|
||||||
static int
|
static int
|
||||||
ipc_connection(int fd, uint32_t mask, void *UNUSED(data))
|
ipc_connection(int fd, uint32_t mask, void *data)
|
||||||
{
|
{
|
||||||
wlr_log(WLR_DEBUG, "Received an IPC event");
|
wlr_log(WLR_DEBUG, "Received an IPC event");
|
||||||
|
|
||||||
|
struct kiwmi_server *server = data;
|
||||||
|
|
||||||
if (!(mask & WL_EVENT_READABLE)) {
|
if (!(mask & WL_EVENT_READABLE)) {
|
||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
|
@ -85,8 +88,10 @@ ipc_connection(int fd, uint32_t mask, void *UNUSED(data))
|
||||||
|
|
||||||
msg[msg_len] = '\0';
|
msg[msg_len] = '\0';
|
||||||
|
|
||||||
for (const char *cmd = strtok(msg, "\n"); cmd; cmd = strtok(NULL, "\n")) {
|
for (char *cmd = strtok(msg, "\n"); cmd; cmd = strtok(NULL, "\n")) {
|
||||||
// TODO: handle client command
|
if (!handle_client_command(cmd, client_file, server)) {
|
||||||
|
break;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
fclose(client_file);
|
fclose(client_file);
|
||||||
|
|
|
@ -1,5 +1,6 @@
|
||||||
kiwmi_sources = files(
|
kiwmi_sources = files(
|
||||||
'main.c',
|
'main.c',
|
||||||
|
'commands.c',
|
||||||
'frontend.c',
|
'frontend.c',
|
||||||
'server.c',
|
'server.c',
|
||||||
'desktop/desktop.c',
|
'desktop/desktop.c',
|
||||||
|
|
Loading…
Reference in a new issue