Skip to content

Commit e337188

Browse files
committed
Refactor SocketPlugin.java
1 parent acfa06d commit e337188

File tree

1 file changed

+41
-26
lines changed

1 file changed

+41
-26
lines changed

android/app/src/main/java/betaflight/configurator/plugin/SocketPlugin.java

Lines changed: 41 additions & 26 deletions
Original file line numberDiff line numberDiff line change
@@ -43,22 +43,25 @@ public void connect(PluginCall call) {
4343
return;
4444
}
4545

46-
try {
47-
socket = new Socket(ip, port);
48-
socket.setSoTimeout(30_000); // 30s timeout
49-
reader = new BufferedReader(new InputStreamReader(socket.getInputStream()));
50-
writer = new BufferedWriter(new OutputStreamWriter(socket.getOutputStream()));
51-
isConnected = true;
52-
JSObject ret = new JSObject();
53-
ret.put("success", true);
54-
call.resolve(ret);
55-
} catch (Exception e) {
56-
closeResources();
57-
call.reject("Connection failed: " + e.getMessage());
58-
}
46+
// Run network operations on a background thread
47+
getBridge().getExecutor().execute(() -> {
48+
try {
49+
socket = new Socket(ip, port);
50+
socket.setSoTimeout(30_000); // 30s timeout
51+
reader = new BufferedReader(new InputStreamReader(socket.getInputStream()));
52+
writer = new BufferedWriter(new OutputStreamWriter(socket.getOutputStream()));
53+
isConnected = true;
54+
JSObject ret = new JSObject();
55+
ret.put("success", true);
56+
call.resolve(ret);
57+
} catch (Exception e) {
58+
closeResources();
59+
call.reject("Connection failed: " + e.getMessage());
60+
}
61+
});
5962
}
6063

61-
@PluginMethod
64+
@PluginMethod
6265
public void send(PluginCall call) {
6366
String data = call.getString("data");
6467

@@ -69,26 +72,38 @@ public void send(PluginCall call) {
6972
}
7073

7174
// Check connection state
72-
if (socket == null || socket.isClosed() || !isConnected) {
75+
if (socket == null || socket.isClosed() || !isConnected || reader == null || writer == null) {
7376
call.reject("Not connected to any server");
7477
return;
7578
}
7679

77-
try {
78-
writer.write(data);
79-
writer.flush();
80-
JSObject ret = new JSObject();
81-
ret.put("success", true);
82-
call.resolve(ret);
83-
} catch (Exception e) {
84-
closeResources();
85-
isConnected = false;
86-
call.reject("Send failed: " + e.getMessage());
87-
}
80+
// Run write operation on a background thread and synchronize on writer
81+
getBridge().getExecutor().execute(() -> {
82+
try {
83+
synchronized (writer) {
84+
// Append newline for framing; adjust as needed for your protocol
85+
writer.write(data);
86+
writer.newLine();
87+
writer.flush();
88+
}
89+
JSObject ret = new JSObject();
90+
ret.put("success", true);
91+
call.resolve(ret);
92+
} catch (Exception e) {
93+
closeResources();
94+
isConnected = false;
95+
call.reject("Send failed: " + e.getMessage());
96+
}
97+
});
8898
}
8999

90100
@PluginMethod
91101
public void receive(PluginCall call) {
102+
// Check connection state
103+
if (socket == null || socket.isClosed() || !isConnected || reader == null) {
104+
call.reject("Not connected to any server");
105+
return;
106+
}
92107
try {
93108
String data = reader.readLine();
94109
JSObject ret = new JSObject();

0 commit comments

Comments
 (0)