summaryrefslogtreecommitdiff
path: root/mpdws.h
diff options
context:
space:
mode:
Diffstat (limited to 'mpdws.h')
-rw-r--r--mpdws.h51
1 files changed, 51 insertions, 0 deletions
diff --git a/mpdws.h b/mpdws.h
new file mode 100644
index 0000000..7802d0c
--- /dev/null
+++ b/mpdws.h
@@ -0,0 +1,51 @@
+#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 */