diff options
author | noname <[email protected]> | 2025-03-07 18:02:34 +1100 |
---|---|---|
committer | noname <[email protected]> | 2025-03-07 18:02:34 +1100 |
commit | 7bec8a8f9bd8b0e0fa9a9997b48463765dc79a47 (patch) | |
tree | 57e123460803ccdfd2b9f03933077b815ebfc29b /lib | |
parent | 3bee9424f314814e38149a2f98c1ff010797be9e (diff) |
improve error handling
Diffstat (limited to 'lib')
-rw-r--r-- | lib/sway/ipc.vala | 81 | ||||
-rw-r--r-- | lib/sway/node.vala | 3 | ||||
-rw-r--r-- | lib/sway/sway.vala | 6 |
3 files changed, 54 insertions, 36 deletions
diff --git a/lib/sway/ipc.vala b/lib/sway/ipc.vala index d0c219d..cbd9a5f 100644 --- a/lib/sway/ipc.vala +++ b/lib/sway/ipc.vala @@ -19,17 +19,11 @@ private class Ipc : Object { } } - internal SocketConnection? connection() { - try { - SocketConnection socket = new SocketClient().connect(new UnixSocketAddress(SWAYSOCK), null); - return socket; - } catch (Error err) { - critical(err.message); - return null; - } + internal SocketConnection connection() throws Error { + return new SocketClient().connect(new UnixSocketAddress(SWAYSOCK), null); } - internal void send(OutputStream stream, PayloadType type, string payload) { + internal void send(OutputStream stream, PayloadType type, string payload) throws Error { Array<uint8> message = new Array<uint8> (); uint8[] magic_str = IPC_MAGIC.data; @@ -46,7 +40,8 @@ private class Ipc : Object { } internal IpcReponse? receive(InputStream stream) { - var header = stream.read_bytes(14); + try { + var header = stream.read_bytes(14); uint8 data[14] = header.get_data(); if (data == null) { return null; @@ -60,11 +55,15 @@ private class Ipc : Object { result += '\0'; return {pl_type, (string)result}; - + } catch (Error err) { + critical("could not receive message: %s", err.message); + return null; + } } internal async IpcReponse? receive_async(InputStream stream) { - var header = yield stream.read_bytes_async(14, Priority.DEFAULT, null); + try { + var header = yield stream.read_bytes_async(14, Priority.DEFAULT, null); uint8 data[14] = header.get_data(); if (data == null) { return null; @@ -78,32 +77,54 @@ private class Ipc : Object { result += '\0'; return {pl_type, (string)result}; + } catch (Error err) { + critical("could not receive message: %s", err.message); + return null; + } } public string message(PayloadType type, string payload) { - SocketConnection conn = connection(); - if (conn == null) { - return ""; + try { + SocketConnection conn = connection(); + if (conn == null) { + return ""; + } + + send(conn.output_stream, type, payload); + var result = receive(conn.input_stream); + conn.close(null); + + if (result == null) { + return ""; + } + + return result.payload; + } catch (Error err) { + critical("message failed: %s", err.message); + return ""; } - - send(conn.output_stream, type, payload); - var result = receive(conn.input_stream); - conn.close(null); - - return result.payload; } public async string message_async(PayloadType type, string payload) { - SocketConnection conn = connection(); - if (conn == null) { - return ""; + try { + SocketConnection conn = connection(); + if (conn == null) { + return ""; + } + + send(conn.output_stream, type, payload); + var result = yield receive_async(conn.input_stream); + conn.close(null); + + if (result == null) { + return ""; + } + + return result.payload; + } catch (Error err) { + critical("message failed: %s", err.message); + return ""; } - - send(conn.output_stream, type, payload); - var result = yield receive_async(conn.input_stream); - conn.close(null); - - return result.payload; } } } diff --git a/lib/sway/node.vala b/lib/sway/node.vala index 4f6990b..13fbcd1 100644 --- a/lib/sway/node.vala +++ b/lib/sway/node.vala @@ -63,10 +63,7 @@ public class Node : Object { var node = new Node(); node.node_type = NodeType.ROOT; return node; - break; - } - return null; } internal static async void sync_tree() { diff --git a/lib/sway/sway.vala b/lib/sway/sway.vala index 8f7e6ba..8fdbb17 100644 --- a/lib/sway/sway.vala +++ b/lib/sway/sway.vala @@ -20,7 +20,7 @@ public class Sway : Object { _instance = s; return s; } catch (Error err) { - critical(err.message); + critical("could not initialize: %s", err.message); return null; } @@ -164,7 +164,7 @@ public class Sway : Object { } } - private async void subscribe() { + private async void subscribe() throws Error { if (subscribe_socket != null) { return; } @@ -173,7 +173,7 @@ public class Sway : Object { ipc.send(subscribe_socket.output_stream, PayloadType.MESSAGE_SUBSCRIBE, "[ \"workspace\", \"window\" ]"); while (true) { var result = yield ipc.receive_async(subscribe_socket.input_stream); - handle_event(result); + yield handle_event(result); } } |