Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Socket got disconnected after a few second #12

Open
chounry opened this issue Jun 24, 2020 · 3 comments
Open

Socket got disconnected after a few second #12

chounry opened this issue Jun 24, 2020 · 3 comments

Comments

@chounry
Copy link

chounry commented Jun 24, 2020

I am be able to publish and retrieve data of a channel. But the connection always got disconnected after a few seconds from where i call `Socket.connection.

E/flutter (16915): [ERROR:flutter/lib/ui/ui_dart_state.cc(157)] Unhandled Exception: FormatException: Unexpected end of input (at character 1)
E/flutter (16915): 
E/flutter (16915): ^
E/flutter (16915): 
E/flutter (16915): #0      _ChunkedJsonParser.fail (dart:convert-patch/convert_patch.dart:1394:5)
E/flutter (16915): # 1      _ChunkedJsonParser.close (dart:convert-patch/convert_patch.dart:512:7)
E/flutter (16915): # 2      _parseJson (dart:convert-patch/convert_patch.dart:32:10)
E/flutter (16915): # 3      JsonDecoder.convert (dart:convert/json.dart:505:36)
E/flutter (16915): # 4      JsonCodec.decode (dart:convert/json.dart:153:41)
E/flutter (16915): # 5      jsonDecode (dart:convert/json.dart:96:10)
E/flutter (16915): # 6      Socket.handleMessage (package:socketcluster_client/src/socket.dart:135:17)
E/flutter (16915): # 7      _rootRunUnary (dart:async/zone.dart:1192:38)
E/flutter (16915): # 8      _CustomZone.runUnary (dart:async/zone.dart:1085:19)
E/flutter (16915): # 9      _CustomZone.runUnaryGuarded (dart:async/zone.dart:987:7)
E/flutter (16915): # 10     _BufferingStreamSubscription._sendData (dart:async/stream_impl.dart:339:11)
E/flutter (16915): # 11     _BufferingStreamSubscription._add (dart:async/stream_impl.dart:266:7)
E/flutter (16915): # 12     _SyncStreamControllerDispatch._sendData (dart:async/stream_controller.dart:779:19)
E/flutter (16915): # 13     _StreamController._add (dart:async/stream_controller.dart:655:7)
E/flutter (16915): #14     _StreamController.add (dart:async/stream_controller.dart:597:5)
E/flutter (16915): #15     new _WebSocketImpl._fromSocket.<anonymous closure> (dart:_http/websocket_impl.dart:1146:21)
E/flutter (16915): #16     _rootRunUnary (dart:async/zone.dart:1192:38)
E/flutter (16915): #17     _CustomZone.runUnary (dart:async/zone.dart:1085:19)
E/flutter (16915): #18     _CustomZone.runUnaryGuarded (dart:async/zone.dart:987:7)
E/flutter (16915): #19     _BufferingStreamSubscription._sendData (dart:async/stream_impl.dart:339:11)
E/flutter (16915): #20     _BufferingStreamSubscription._add (dart:async/stream_impl.dart:266:7)
E/flutter (16915): #21     _SinkTransformerStreamSubscription._add (dart:async/stream_transformers.dart:70:11)
E/flutter (16915): #22     _EventSinkWrapper.add (dart:async/stream_transformers.dart:17:11)
E/flutter (16915): #23     _WebSocketProtocolTransformer._messageFrameEnd (dart:_http/websocket_impl.dart:338:22)
E/flutter (16915): #24     _WebSocketProtocolTransformer._startPayload (dart:_http/websocket_impl.dart:322:9)
E/flutter (16915): #25     _WebSocketProtocolTransformer._lengthDone (dart:_http/websocket_impl.dart:294:7)
E/flutter (16915): #26     _WebSocketProtocolTransformer.add (dart:_http/websocket_impl.dart:197:13)
E/flutter (16915): #27     _SinkTransformerStreamSubscription._handleData (dart:async/stream_transformers.dart:122:24)
E/flutter (16915): #28     _rootRunUnary (dart:async/zone.dart:1192:38)
E/flutter (16915): #29     _CustomZone.runUnary (dart:async/zone.dart:1085:19)
E/flutter (16915): #30     _CustomZone.runUnaryGuarded (dart:async/zone.dart:987:7)
E/flutter (16915): #31     _BufferingStreamSubscription._sendData (dart:async/stream_impl.dart:339:11)
E/flutter (16915): #32     _BufferingStreamSubscription._add (dart:async/stream_impl.dart:266:7)
E/flutter (16915): #33     _SyncStreamControllerDispatch._sendData (dart:async/stream_controller.dart:779:19)
E/flutter (16915): #34     _StreamController._add (dart:async/stream_controller.dart:655:7)
E/flutter (16915): #35     _StreamController.add (dart:async/stream_controller.dart:597:5)
E/flutter (16915): #36     _Socket._onData (dart:io-patch/socket_patch.dart:1982:41)
E/flutter (16915): #37     _rootRunUnary (dart:async/zone.dart:1196:13)
E/flutter (16915): #38     _CustomZone.runUnary (dart:async/zone.dart:1085:19)
E/flutter (16915): #39     _CustomZone.runUnaryGuarded (dart:async/zone.dart:987:7)
E/flutter (16915): #40     _BufferingStreamSubscription._sendData (dart:async/stream_impl.dart:339:11)
E/flutter (16915): #41     _BufferingStreamSubscription._add (dart:async/stream_impl.dart:266:7)
E/flutter (16915): #42     _SyncStreamControllerDispatch._sendData (dart:async/stream_controller.dart:779:19)
E/flutter (16915): #43     _StreamController._add (dart:async/stream_controller.dart:655:7)
E/flutter (16915): #44     _StreamController.add (dart:async/stream_controller.dart:597:5)
E/flutter (16915): #45     new _RawSocket.<anonymous closure> (dart:io-patch/socket_patch.dart:1527:33)
E/flutter (16915): #46     _NativeSocket.issueReadEvent.issue (dart:io-patch/socket_patch.dart:1019:14)
E/flutter (16915): #47     _microtaskLoop (dart:async/schedule_microtask.dart:43:21)
E/flutter (16915): #48     _startMicrotaskLoop (dart:async/schedule_microtask.dart:52:5)

I/flutter (16915): onDisconnected: socket Instance of 'Socket'

Then the server cannot retrieve data anymore.

@chounry chounry changed the title Unhandled Exception: FormatException: Unexpected end of input (at character 1) Socket got disconnected after a few second Jun 25, 2020
@chounry
Copy link
Author

chounry commented Jun 25, 2020

I just found out. It was because of the client module does not ping back to the server. I had to modified the package.

@egiadtya
Copy link

@chounry I got same issue, any workaround you did to fix this?

@chounry
Copy link
Author

chounry commented Sep 15, 2021

Hi, @egiadtya
Yes, I cloned the package and modified this function:

void handleMessage([dynamic messageEvent]) {
String? message;
if (globalSocketPlatform is IoSocketPlatform) {
message = messageEvent;
} else {
message = messageEvent.data;
}
if (message == "#1") {
sendOrAdd('#2');
} else {
// print('Message received: $message');
var map = jsonDecode(message!);
var data = map['data'];
int? rid = map['rid'];
int? cid = map['cid'];
String? event = map['event'];
// print('Event: $event, rid: $rid, cid: $cid, data: $data');
switch (Parser.parse(data, rid, cid, event)) {
case ParseResult.ISAUTHENTICATED:
// print('IS authenticated got called');
id = data['id'] as String?;
bool? auth = data['isAuthenticated'] as bool?;
if (listener != null) {
listener!.onAuthentication(this, auth);
}
subscribeChannels();
break;
case ParseResult.PUBLISH:
handlePublish(data['channel'] as String?, data['data']);
// print('Publish got called');
break;
case ParseResult.REMOVETOKEN:
authToken = null;
// print('Removetoken got called');
break;
case ParseResult.SETTOKEN:
if (listener != null) {
listener!.onSetAuthToken(data['token'] as String?, this);
}
// print('Set token got called');
break;
case ParseResult.EVENT:
if (hasEventAck(event)) {
handleEmitAck(event, data, ack(cid));
} else {
handleEmit(event, data);
}
break;
case ParseResult.ACKRECEIVE:
// print('Ack receive got called');
if (_acks.containsKey(rid)) {
var mapObj = _acks[rid!];
_acks.remove(rid);
if (mapObj != null) {
AckCall fn = mapObj[1];
if (fn != null) {
fn(mapObj[0] as String, map['error'], map['data']);
} else {
// print('Ack function is null');
}
}
}
break;
default:
throw new RangeError('Unknown ParseResult');
}
}
}

From this :

if (message == "#1") {
  sendOrAdd('#2');
} else {
   ....
}

To this:

if (message == "#1") {
    sendOrAdd('#2');
} else if(message.isNotEmpty){
   ...
}else {
   sendOrAdd('');
}

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
None yet
Projects
None yet
Development

No branches or pull requests

2 participants