@@ -77,15 +77,19 @@ public void send(PluginCall call) {
7777 call .reject ("Not connected to any server" );
7878 return ;
7979 }
80-
8180 // Run write operation on a background thread and synchronize on writer
8281 getBridge ().getExecutor ().execute (() -> {
8382 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 ) {
8589 // 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 ();
8993 }
9094 JSObject ret = new JSObject ();
9195 ret .put ("success" , true );
@@ -130,15 +134,17 @@ public void receive(PluginCall call) {
130134
131135 @ PluginMethod
132136 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+ });
142148 }
143149
144150 /**
@@ -151,6 +157,7 @@ private void closeResources() {
151157 reader = null ;
152158 }
153159 if (writer != null ) {
160+ writer .flush ();
154161 writer .close ();
155162 writer = null ;
156163 }
0 commit comments