2
0
mirror of https://github.com/esiur/esiur-dart.git synced 2025-09-14 04:23:17 +00:00
This commit is contained in:
2022-02-12 15:37:45 +03:00
parent 25260c6155
commit d41911b1ab
9 changed files with 280 additions and 77 deletions

View File

@@ -22,10 +22,8 @@ SOFTWARE.
*/
import 'dart:io';
//import 'package:web_socket_channel/io.dart' as WS;
import 'package:web_socket_channel/io.dart';
//import 'package:web_socket_channel/html.dart';
import 'package:web_socket_channel/web_socket_channel.dart';
import '../../Core/ErrorType.dart';
import '../../Core/ExceptionCode.dart';
@@ -40,8 +38,7 @@ import 'IPEndPoint.dart';
import '../../Core/AsyncReply.dart';
class WSocket extends ISocket {
WebSocket? _sock;
IOWebSocketChannel? _channel;
WebSocketChannel? _channel;
NetworkBuffer receiveNetworkBuffer = new NetworkBuffer();
@@ -58,16 +55,19 @@ class WSocket extends ISocket {
began = true;
if (_sock != null) {
var s = _sock as Socket;
_localEP = IPEndPoint(s.address.rawAddress, s.port);
_remoteEP = IPEndPoint(s.remoteAddress.rawAddress, s.remotePort);
if (_channel != null) {
_localEP = IPEndPoint([0, 0, 0, 0], 0);
_remoteEP = IPEndPoint([0, 0, 0, 0], 0);
_channel?.stream
.listen(_dataHandler, onError: errorHandler, onDone: doneHandler);
}
return true;
}
void dataHandler(List<int> data) {
void _dataHandler(data) {
try {
//List<int> data
if (_state == SocketState.Closed || _state == SocketState.Terminated)
return;
@@ -85,6 +85,7 @@ class WSocket extends ISocket {
void errorHandler(error, StackTrace trace) {
print(error);
close();
}
void doneHandler() {
@@ -98,19 +99,15 @@ class WSocket extends ISocket {
try {
_state = SocketState.Connecting;
WebSocket.connect("${secure ? 'wss' : 'ws'}://${hostname}:${port}'")
.then((s) {
_sock = s;
_state = SocketState.Established;
_channel = IOWebSocketChannel(s);
begin();
receiver?.networkConnect(this);
rt.trigger(true);
}).catchError((ex) {
close();
rt.triggerError(AsyncException(ErrorType.Management,
ExceptionCode.HostNotReachable.index, ex.toString()));
});
_channel = WebSocketChannel.connect(
Uri.parse("${secure ? 'wss' : 'ws'}://${hostname}:${port}"),
); //binaryType: BinaryType.list);
_state = SocketState.Established;
begin();
receiver?.networkConnect(this);
rt.trigger(true);
} catch (ex) {
rt.triggerError(AsyncException(ErrorType.Management,
ExceptionCode.HostNotReachable.index, ex.toString()));
@@ -132,22 +129,19 @@ class WSocket extends ISocket {
if (state != SocketState.Closed && state != SocketState.Terminated)
_state = SocketState.Closed;
_sock?.close();
_channel?.sink.close();
receiver?.networkClose(this);
//emitArgs("close", []);
}
void send(DC message, [int? offset, int? size]) {
if (state == SocketState.Established) {
if (offset != null && size == null) {
_channel?.sink
.add(message.clip(offset, message.length - offset).toList());
.add(message.clip(offset, message.length - offset).toArray());
} else if (offset != null && size != null) {
_channel?.sink.add(message.clip(offset, size).toList());
_channel?.sink.add(message.clip(offset, size).toArray());
} else {
_channel?.sink.add(message.toList());
_channel?.sink.add(message.toArray());
}
}
}