如何 return Response.ok 套接字数据?
How to return Response.ok with socket data?
我可以连接我的渡槽以关闭网络套接字(侦听器并获取数据)问题是我不能 return new Response.ok。它显示空...
我正在使用 Aqueduct 3.0。大多数文档看起来像片段。我很难使用飞镖套筒。但现在我可以从套接字获取文本,但无法从我的渡槽网络通过互联网发送数据 api。
class LoginController extends Controller {
String _xCustomerToken;
String _xCustomerName;
var list = [];
@override
Future handle(Request request) async {
String reply;
Socket.connect('192.168.1.22’, 1024).then((socket) async {
socket.listen((data) async {
reply = await new String.fromCharCodes(data).trim();
print("reply: $reply");
var list = reply.split(":_:");
print(list);
_xCustomerToken = list[2];
_xCustomerName = list[3];
// CAN PRINT THE SOCKET DATA
// EXAMPLE: ”Customer Token: 998877, CustomerName: NIYAZI TOROS”
print(
"Customer Token: $_xCustomerToken, CustomerName: $_xCustomerName");
await new Future.delayed(new Duration(seconds: 2));
}, onDone: () {
print("Done");
});
socket.write('Q101:_:49785:_:x\r\n');
});
// CANT RETURN THE SOCKET DATA
return new Response.ok(
// EXAMPLE: "Customer Token: null, CustomerName: null”
"Customer Token: $_xCustomerToken, CustomerName: $_xCustomerName");
}
}
更新:
我把 return 语句放在 await for (listen) 里面,现在我输入 http://192.168.1.22:8888/login 我得到了正确的信息。
class LoginController extends Controller {
String _xCustomerToken;
String _xCustomerName;
String _xResult;
var list = [];
@override
Future<RequestOrResponse> handle(Request request) async {
String reply;
var socket = await Socket.connect('192.168.1.22', 1024);
socket.write('Q101:_:49785:_:x\r\n');
await for (var data in socket) {
reply = await new String.fromCharCodes(data).trim();
var list = reply.split(":_:");
_xCustomerToken = list[2];
_xCustomerName = list[3];
_xResult = "$_xCustomerToken:_:$_xCustomerName";
print("$_xResult");
return new Response.ok("$_xResult");
}
return new Response.ok("No data");
}
}
.listen()
不会等待完成执行其余代码,然后您会在下面用空值点击 return new Response.ok("Customer Token: $_xCustomerToken, CustomerName: $_xCustomerName");
。您可以尝试使用 await 代替:
class LoginController extends Controller {
String _xCustomerToken;
String _xCustomerName;
var list = [];
@override
Future handle(Request request) async {
String reply;
var socket = await Socket.connect('192.168.1.22’, 1024);
socket.write('Q101:_:49785:_:x\r\n');
await for (var data in socket) {
reply = await new String.fromCharCodes(data).trim();
print("reply: $reply");
var list = reply.split(":_:");
print(list);
_xCustomerToken = list[2];
_xCustomerName = list[3];
// CAN PRINT THE SOCKET DATA
// EXAMPLE: ”Customer Token: 998877, CustomerName: NIYAZI TOROS”
print("Customer Token: $_xCustomerToken, CustomerName: $_xCustomerName");
await new Future.delayed(new Duration(seconds: 2));
}
return new Response.ok("Customer Token: $_xCustomerToken, CustomerName: $_xCustomerName");
}
}
我可以连接我的渡槽以关闭网络套接字(侦听器并获取数据)问题是我不能 return new Response.ok。它显示空...
我正在使用 Aqueduct 3.0。大多数文档看起来像片段。我很难使用飞镖套筒。但现在我可以从套接字获取文本,但无法从我的渡槽网络通过互联网发送数据 api。
class LoginController extends Controller {
String _xCustomerToken;
String _xCustomerName;
var list = [];
@override
Future handle(Request request) async {
String reply;
Socket.connect('192.168.1.22’, 1024).then((socket) async {
socket.listen((data) async {
reply = await new String.fromCharCodes(data).trim();
print("reply: $reply");
var list = reply.split(":_:");
print(list);
_xCustomerToken = list[2];
_xCustomerName = list[3];
// CAN PRINT THE SOCKET DATA
// EXAMPLE: ”Customer Token: 998877, CustomerName: NIYAZI TOROS”
print(
"Customer Token: $_xCustomerToken, CustomerName: $_xCustomerName");
await new Future.delayed(new Duration(seconds: 2));
}, onDone: () {
print("Done");
});
socket.write('Q101:_:49785:_:x\r\n');
});
// CANT RETURN THE SOCKET DATA
return new Response.ok(
// EXAMPLE: "Customer Token: null, CustomerName: null”
"Customer Token: $_xCustomerToken, CustomerName: $_xCustomerName");
}
}
更新: 我把 return 语句放在 await for (listen) 里面,现在我输入 http://192.168.1.22:8888/login 我得到了正确的信息。
class LoginController extends Controller {
String _xCustomerToken;
String _xCustomerName;
String _xResult;
var list = [];
@override
Future<RequestOrResponse> handle(Request request) async {
String reply;
var socket = await Socket.connect('192.168.1.22', 1024);
socket.write('Q101:_:49785:_:x\r\n');
await for (var data in socket) {
reply = await new String.fromCharCodes(data).trim();
var list = reply.split(":_:");
_xCustomerToken = list[2];
_xCustomerName = list[3];
_xResult = "$_xCustomerToken:_:$_xCustomerName";
print("$_xResult");
return new Response.ok("$_xResult");
}
return new Response.ok("No data");
}
}
.listen()
不会等待完成执行其余代码,然后您会在下面用空值点击 return new Response.ok("Customer Token: $_xCustomerToken, CustomerName: $_xCustomerName");
。您可以尝试使用 await 代替:
class LoginController extends Controller {
String _xCustomerToken;
String _xCustomerName;
var list = [];
@override
Future handle(Request request) async {
String reply;
var socket = await Socket.connect('192.168.1.22’, 1024);
socket.write('Q101:_:49785:_:x\r\n');
await for (var data in socket) {
reply = await new String.fromCharCodes(data).trim();
print("reply: $reply");
var list = reply.split(":_:");
print(list);
_xCustomerToken = list[2];
_xCustomerName = list[3];
// CAN PRINT THE SOCKET DATA
// EXAMPLE: ”Customer Token: 998877, CustomerName: NIYAZI TOROS”
print("Customer Token: $_xCustomerToken, CustomerName: $_xCustomerName");
await new Future.delayed(new Duration(seconds: 2));
}
return new Response.ok("Customer Token: $_xCustomerToken, CustomerName: $_xCustomerName");
}
}