@@ -77,15 +77,19 @@ public void send(PluginCall call) {
77
77
call .reject ("Not connected to any server" );
78
78
return ;
79
79
}
80
-
81
80
// Run write operation on a background thread and synchronize on writer
82
81
getBridge ().getExecutor ().execute (() -> {
83
82
try {
84
- synchronized (writer ) {
83
+ BufferedWriter localWriter = writer ; // capture after re-check
84
+ if (localWriter == null ) {
85
+ call .reject ("Connection lost" );
86
+ return ;
87
+ }
88
+ synchronized (localWriter ) {
85
89
// Append newline for framing; adjust as needed for your protocol
86
- writer .write (data );
87
- writer .newLine ();
88
- writer .flush ();
90
+ localWriter .write (data );
91
+ localWriter .newLine ();
92
+ localWriter .flush ();
89
93
}
90
94
JSObject ret = new JSObject ();
91
95
ret .put ("success" , true );
@@ -130,15 +134,17 @@ public void receive(PluginCall call) {
130
134
131
135
@ PluginMethod
132
136
public void disconnect (PluginCall call ) {
133
- try {
134
- closeResources ();
135
- isConnected = false ;
136
- JSObject ret = new JSObject ();
137
- ret .put ("success" , true );
138
- call .resolve (ret );
139
- } catch (Exception e ) {
140
- call .reject ("Disconnect failed: " + e .getMessage ());
141
- }
137
+ getBridge ().getExecutor ().execute (() -> {
138
+ try {
139
+ closeResources ();
140
+ isConnected = false ;
141
+ JSObject ret = new JSObject ();
142
+ ret .put ("success" , true );
143
+ call .resolve (ret );
144
+ } catch (Exception e ) {
145
+ call .reject ("Disconnect failed: " + e .getMessage ());
146
+ }
147
+ });
142
148
}
143
149
144
150
/**
@@ -151,6 +157,7 @@ private void closeResources() {
151
157
reader = null ;
152
158
}
153
159
if (writer != null ) {
160
+ writer .flush ();
154
161
writer .close ();
155
162
writer = null ;
156
163
}
0 commit comments