diff --git a/cyberwow/lib/logic/interface/rpc/rpc.dart b/cyberwow/lib/logic/interface/rpc/rpc.dart new file mode 100644 index 0000000..741417d --- /dev/null +++ b/cyberwow/lib/logic/interface/rpc/rpc.dart @@ -0,0 +1,79 @@ +/* + +Copyright 2019 fuwa + +This file is part of CyberWOW. + +CyberWOW is free software: you can redistribute it and/or modify +it under the terms of the GNU General Public License as published by +the Free Software Foundation, either version 3 of the License, or +(at your option) any later version. + +CyberWOW is distributed in the hope that it will be useful, +but WITHOUT ANY WARRANTY; without even the implied warranty of +MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +GNU General Public License for more details. + +You should have received a copy of the GNU General Public License +along with CyberWOW. If not, see . + +*/ + +import 'dart:async'; +import 'dart:convert'; + +import 'package:http/http.dart' as http; +import 'package:flutter/foundation.dart'; + +import '../../../config.dart' as config; +import '../../../helper.dart'; +import '../../../logging.dart'; + +Future rpcHTTP(final String method) async { + final url = 'http://${config.host}:${config.c.port}/json_rpc'; + + final body = json.encode + ( + { + 'jsonrpc': '2.0', + 'method': method, + } + ); + + try { + final response = await http.post + ( url, + body: body + ); + return response; + } + catch (e) { + log.warning(e); + return null; + } +} + +dynamic jsonDecode(final String responseBody) => json.decode(responseBody); + +Future rpc(final String method, {final String field}) async { + final response = await rpcHTTP(method); + + if (response == null) return null; + + if (response.statusCode != 200) { + return null; + } else { + final _body = await compute(jsonDecode, response.body); + final _result = _body['result']; + if (_result == null) return null; + + final _field = field == null ? _result : _result[field]; + + return _field; + } +} + +Future rpcString(final String method, {final String field}) async { + final _field = await rpc(method, field: field); + return pretty(_field); +} diff --git a/cyberwow/lib/logic/interface/rpc/rpc2.dart b/cyberwow/lib/logic/interface/rpc/rpc2.dart new file mode 100644 index 0000000..58c28d4 --- /dev/null +++ b/cyberwow/lib/logic/interface/rpc/rpc2.dart @@ -0,0 +1,64 @@ +/* + +Copyright 2019 fuwa + +This file is part of CyberWOW. + +CyberWOW is free software: you can redistribute it and/or modify +it under the terms of the GNU General Public License as published by +the Free Software Foundation, either version 3 of the License, or +(at your option) any later version. + +CyberWOW is distributed in the hope that it will be useful, +but WITHOUT ANY WARRANTY; without even the implied warranty of +MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +GNU General Public License for more details. + +You should have received a copy of the GNU General Public License +along with CyberWOW. If not, see . + +*/ + +import 'dart:async'; +import 'dart:convert'; +import 'dart:math'; + +import 'package:http/http.dart' as http; +import 'package:flutter/foundation.dart'; +import 'package:intl/intl.dart'; + +import '../../../config.dart' as config; +import '../../../helper.dart'; +import '../../../logging.dart'; + +Future rpc2(final String method) async { + final url = 'http://${config.host}:${config.c.port}/${method}'; + + try { + final response = await http.post + ( url, + ); + return response; + } + catch (e) { + log.warning(e); + return null; + } +} + +dynamic jsonDecode(final String responseBody) => json.decode(responseBody); + +Future rpc2String(final String method, {final String field}) async { + final response = await rpc2(method); + + if (response == null) return ''; + + if (response.statusCode != 200) { + return ''; + } else { + final _body = await compute(jsonDecode, response.body); + final _field = field == null ? _body: _body[field]; + + return pretty(_field); + } +} diff --git a/cyberwow/lib/logic/sensor/rpc/rpc.dart b/cyberwow/lib/logic/sensor/rpc/rpc.dart index 40f721a..c806768 100644 --- a/cyberwow/lib/logic/sensor/rpc/rpc.dart +++ b/cyberwow/lib/logic/sensor/rpc/rpc.dart @@ -23,65 +23,10 @@ import 'dart:async'; import 'dart:convert'; import 'package:http/http.dart' as http; -import 'package:flutter/foundation.dart'; -import '../../../config.dart' as config; import '../../../helper.dart'; import '../../../logging.dart'; - -int rpcID = 0; - -Future rpcHTTP(final String method) async { - final url = 'http://${config.host}:${config.c.port}/json_rpc'; - - rpcID += 1; - - final body = json.encode - ( - { - 'jsonrpc': '2.0', - 'id': rpcID.toString(), - 'method': method, - } - ); - - try { - final response = await http.post - ( url, - body: body - ); - return response; - } - catch (e) { - log.warning(e); - return null; - } -} - -dynamic jsonDecode(final String responseBody) => json.decode(responseBody); - -Future rpc(final String method, {final String field}) async { - final response = await rpcHTTP(method); - - if (response == null) return null; - - if (response.statusCode != 200) { - return null; - } else { - final _body = await compute(jsonDecode, response.body); - final _result = _body['result']; - if (_result == null) return null; - - final _field = field == null ? _result : _result[field]; - - return _field; - } -} - -Future rpcString(final String method, {final String field}) async { - final _field = await rpc(method, field: field); - return pretty(_field); -} +import '../../interface/rpc/rpc.dart'; Future syncInfo() => rpc('sync_info'); Future syncInfoString() => rpcString('sync_info'); diff --git a/cyberwow/lib/logic/sensor/rpc/rpc2.dart b/cyberwow/lib/logic/sensor/rpc/rpc2.dart index ee920d4..59cfd23 100644 --- a/cyberwow/lib/logic/sensor/rpc/rpc2.dart +++ b/cyberwow/lib/logic/sensor/rpc/rpc2.dart @@ -25,45 +25,12 @@ import 'dart:math'; import 'package:http/http.dart' as http; import 'package:flutter/foundation.dart'; -import 'package:intl/intl.dart'; -import '../../../config.dart' as config; import '../../../helper.dart'; import '../../../logging.dart'; +import '../../interface/rpc/rpc2.dart' as rpc2; -Future rpc2(final String method) async { - final url = 'http://${config.host}:${config.c.port}/${method}'; - - try { - final response = await http.post - ( url, - ); - return response; - } - catch (e) { - log.warning(e); - return null; - } -} - -dynamic jsonDecode(final String responseBody) => json.decode(responseBody); - -Future rpc2String(final String method, {final String field}) async { - final response = await rpc2(method); - - if (response == null) return ''; - - if (response.statusCode != 200) { - return ''; - } else { - final _body = await compute(jsonDecode, response.body); - final _field = field == null ? _body: _body[field]; - - return pretty(_field); - } -} - -Future getTransactionPool() async => rpc2('get_transaction_pool'); +Future getTransactionPool() async => rpc2.rpc2('get_transaction_pool'); Future>> getTransactionPoolSimple() async { final response = await getTransactionPool();