Skip to content

Commit

Permalink
no message
Browse files Browse the repository at this point in the history
  • Loading branch information
truongsinh committed Jun 3, 2019
1 parent 74e4cf3 commit 1b94b67
Show file tree
Hide file tree
Showing 4 changed files with 34 additions and 19 deletions.
19 changes: 9 additions & 10 deletions lib/src/websocket_browser.dart
Original file line number Diff line number Diff line change
Expand Up @@ -10,18 +10,16 @@ class WebSocket implements stub.WebSocket {
html.WebSocket _socket;
final StreamController _streamConsumer = StreamController();

WebSocket._(this._socket) {
_streamConsumer.stream.listen((data) {
_send(data);
}, onError: (error) {
_send(error.toString());
},);
WebSocket._(this._socket) : done = _socket.onClose.first {
_streamConsumer.stream.listen(
(data) => _send(data),
onError: (error) => _send(error.toString()),
);
_socket.onClose.listen((html.CloseEvent event) {
closeCode = event.code;
closeReason = event.reason;
_streamController.close();
});

_socket.onError.listen((html.Event error) {
_streamController.addError(error);
});
Expand Down Expand Up @@ -67,19 +65,20 @@ class WebSocket implements stub.WebSocket {
void add(/*String|List<int>*/ data) => _streamConsumer.add(data);

@override
Future addStream(Stream stream) =>_streamConsumer.addStream(stream);
Future addStream(Stream stream) => _streamConsumer.addStream(stream);

@override
void addUtf8Text(List<int> bytes) => _streamConsumer.add(utf8.decode(bytes));

@override
Future close([int code, String reason]) {
_streamConsumer.close();
if (code != null) {
_socket.close(code, reason);
} else {
_socket.close();
}
return _socket.onClose.first;
return done;
}

@override
Expand All @@ -98,7 +97,7 @@ class WebSocket implements stub.WebSocket {
int get readyState => _socket.readyState;

@override
Future get done => _socket.onClose.first;
final Future done;

StreamController<dynamic /*String|List<int>*/ > _streamController =
StreamController.broadcast();
Expand Down
2 changes: 1 addition & 1 deletion pubspec.yaml
Original file line number Diff line number Diff line change
@@ -1,6 +1,6 @@
name: websocket
description: Universal package for websocket, compatible with web, flutter, and vm.
version: 0.0.4
version: 0.0.5
author: TruongSinh Tran-Nguyen <[email protected]>
homepage: https://github.com/truongsinh/dart-websocket

Expand Down
26 changes: 19 additions & 7 deletions test/websocket_test.dart
Original file line number Diff line number Diff line change
Expand Up @@ -11,7 +11,8 @@ void main() {
test('open connection', () async {
final socket = await WebSocket.connect(url);
expect(socket.readyState, 1);
socket.close();
await socket.close();
await socket.done;
});
test('close connection from client side', () async {
final socket = await WebSocket.connect(url);
Expand All @@ -21,6 +22,7 @@ void main() {
await expectLater(socket.stream, emitsDone);
expect(socket.closeCode, 3001);
expect(socket.closeReason, 'reason 3001');
await socket.done;
});
test('close connection from server side', () async {
final socket = await WebSocket.connect(url);
Expand All @@ -33,14 +35,24 @@ void main() {
await expectLater(socket.stream, emitsDone);
expect(socket.closeCode, 3002);
expect(socket.closeReason, 'reason 3002');
await socket.done;
});
test('open connection with protocol', () async {
final socket =
await WebSocket.connect(url, protocols: ['weird-protocol']);
final socket = await WebSocket.connect(url,
protocols: ['weird-protocol', 'another-protocol']);
expect(socket.readyState, 1);
expect(socket.protocol, 'weird-protocol');
if (socket.extensions is String) {
// in browser
expect(
socket.extensions, 'permessage-deflate; client_max_window_bits=15');
} else {
expect(socket.extensions, null);
}
socket.close();
}, skip: true);
test('error connection', () {}, skip: true);
await socket.done;
});
// test('error connection', () {}, skip: true);
});

group('instance method', () {
Expand Down Expand Up @@ -99,11 +111,11 @@ void main() {
await expect(() => stream2.stream.pipe(socket), throwsA(isStateError));
});
test('cannot send more data after addStream', () async {
socket.addStream(stream1.stream);
stream1.stream.pipe(socket);
await expect(() => socket.add('a'), throwsA(isStateError));
await expect(() => socket.addUtf8Text([0, 1]), throwsA(isStateError));
await expect(() => socket.close(), throwsA(isStateError));
}, skip: true);
});
test('broadcast stream', () async {
stream1
..stream.pipe(socket)
Expand Down
6 changes: 5 additions & 1 deletion tools/server.dart
Original file line number Diff line number Diff line change
Expand Up @@ -4,7 +4,11 @@ import 'dart:io';
const PORT = 5600;
void main() async {
HttpServer server = await HttpServer.bind('localhost', PORT);
server.transform(WebSocketTransformer()).listen((WebSocket client) {
server.transform(
WebSocketTransformer(protocolSelector: (List<String> protocols) {
print('Requested protocols: $protocols');
return protocols?.elementAt(0) ?? '';
})).listen((WebSocket client) {
print('a client just connected');
client.listen((data) {
try {
Expand Down

0 comments on commit 1b94b67

Please sign in to comment.