@@ -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