summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authornoname <[email protected]>2025-03-07 18:02:34 +1100
committernoname <[email protected]>2025-03-07 18:02:34 +1100
commit7bec8a8f9bd8b0e0fa9a9997b48463765dc79a47 (patch)
tree57e123460803ccdfd2b9f03933077b815ebfc29b
parent3bee9424f314814e38149a2f98c1ff010797be9e (diff)
improve error handling
-rw-r--r--lib/sway/ipc.vala81
-rw-r--r--lib/sway/node.vala3
-rw-r--r--lib/sway/sway.vala6
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);
}
}