52 lines
1.5 KiB
C
52 lines
1.5 KiB
C
#ifndef MPD_WS_H
|
|
#define MPD_WS_H
|
|
|
|
#include <libwebsockets.h>
|
|
#include <mpd/client.h>
|
|
|
|
/* Configuration constants */
|
|
#define MPD_HOST "localhost"
|
|
#define MPD_PORT 6600
|
|
#define WEBSOCKET_PORT 8765
|
|
#define MAX_MESSAGE_SIZE 1024
|
|
#define RECONNECT_INTERVAL_SEC 5
|
|
#define SELECT_TIMEOUT_SEC 1
|
|
|
|
/* Client session structure */
|
|
struct client_session {
|
|
struct lws *wsi;
|
|
struct client_session *next;
|
|
};
|
|
|
|
/* Global state structure */
|
|
struct mpd_ws_server {
|
|
struct lws_context *ws_context;
|
|
struct mpd_connection *mpd_conn;
|
|
struct client_session *clients;
|
|
char current_song[MAX_MESSAGE_SIZE];
|
|
char previous_song[MAX_MESSAGE_SIZE];
|
|
volatile int running;
|
|
int mpd_idle_active;
|
|
};
|
|
|
|
/* Function declarations */
|
|
int mpd_ws_init(struct mpd_ws_server *server);
|
|
void mpd_ws_run(struct mpd_ws_server *server);
|
|
void mpd_ws_cleanup(struct mpd_ws_server *server);
|
|
void mpd_ws_stop(struct mpd_ws_server *server);
|
|
|
|
/* MPD functions */
|
|
int mpd_ws_connect(struct mpd_ws_server *server);
|
|
void mpd_ws_disconnect(struct mpd_ws_server *server);
|
|
int mpd_ws_is_connected(struct mpd_ws_server *server);
|
|
void mpd_ws_update_song(struct mpd_ws_server *server);
|
|
int mpd_ws_start_idle(struct mpd_ws_server *server);
|
|
void mpd_ws_process_idle(struct mpd_ws_server *server);
|
|
|
|
/* Client management */
|
|
void client_add(struct mpd_ws_server *server, struct lws *wsi);
|
|
void client_remove(struct mpd_ws_server *server, struct lws *wsi);
|
|
void client_broadcast(struct mpd_ws_server *server, const char *message);
|
|
|
|
#endif /* MPD_WS_H */
|