From e91a3a40afdcad8cb8f70d6e5af46dfbedc6a312 Mon Sep 17 00:00:00 2001 From: WoNiu Date: Fri, 5 Apr 2024 18:10:38 +0800 Subject: [PATCH] =?UTF-8?q?Revert=20"=E5=88=A0=E9=99=A4=E4=B8=BB=E6=8E=A7?= =?UTF-8?q?=20=E4=BB=A3=E7=A0=81"?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit This reverts commit 0f139adcdd7ecf8b5fde7515759020e6f6b39661. --- lib/windows/socket_tool.dart | 37 +++++++++++++ lib/windows/synchronization_web_tool.dart | 33 +++++++++++- lib/windows/web_grid_view.dart | 64 +++++++++++++++++++++-- 3 files changed, 128 insertions(+), 6 deletions(-) diff --git a/lib/windows/socket_tool.dart b/lib/windows/socket_tool.dart index 11f606d..84165fb 100644 --- a/lib/windows/socket_tool.dart +++ b/lib/windows/socket_tool.dart @@ -78,11 +78,48 @@ class Socket { if (data['op'] == 11){ } + // 服务器 已连接的ip + if (data['Arr'] != null){ + List arr = data['Arr']; + List ips = []; + arr.forEach((clientMap) { + String ip = clientMap['Client']; + ips.add(ip); + }); + childrenIp = ips; + } }); } + /// 发送消息 + sendClickMessage(Map data){ + Map messageMap = { + "op": 2, + "click": data + }; + socket?.send(dataMake(messageMap), InternetAddress(url), port); + } + + /// 发送获取从机 消息 + sendGetChilds(){ + Map messageMap = { + "op": 3, + }; + socket?.send(dataMake(messageMap), InternetAddress(url), port); + } + + + /// 发送输入喜消息 + sendInpuMessage(int num){ + Map messageMap = { + "op": 2, + "input": num + }; + socket?.send(dataMake(messageMap), InternetAddress(url), port); + } + /// 心跳 heartbeat(){ Timer timer = Timer(const Duration(seconds: 10), () async { diff --git a/lib/windows/synchronization_web_tool.dart b/lib/windows/synchronization_web_tool.dart index 7f0b670..5c3aeea 100644 --- a/lib/windows/synchronization_web_tool.dart +++ b/lib/windows/synchronization_web_tool.dart @@ -18,6 +18,10 @@ class SynchronizationWebTool{ return _instance!; } + bool webSync = false; + + /// 主控 + late WebviewController mainController; /// 受控 List _childControllers = []; @@ -29,11 +33,38 @@ class SynchronizationWebTool{ // controller.addScriptToExecuteOnDocumentCreated(WindowsJs.onloadZoom(90)); } - _childControllers = childControllers; + mainController = childControllers.first; + _childControllers = childControllers.sublist(1,10); // 滚动监听 // mainController.addScriptToExecuteOnDocumentCreated(WindowsJs.scrollEventJs); + mainController.webMessage.listen((event) { + print('mainController listen --'); + + if (event['scroll'] != null ) { + print(event); + } + + if (!webSync) return; + + if (event['click'] != null) { + Map click = event['click']; + int x = click['x'] as int; + int y = click['y'] as int; + + clickSynchronization(x, y); + SocketUtils.getInstance().sendClickMessage(click); + } + + if (event['scroll'] != null ) { + print(event); + int y = event['y'] as int; + scrollSynchronization(y); + } + + }); + } List get childController{ diff --git a/lib/windows/web_grid_view.dart b/lib/windows/web_grid_view.dart index ee85b6d..0e3a44e 100644 --- a/lib/windows/web_grid_view.dart +++ b/lib/windows/web_grid_view.dart @@ -1,6 +1,8 @@ import 'package:flutter/material.dart'; +import 'package:web_synchronization_tool/windows/number_tool.dart'; import 'package:web_synchronization_tool/windows/socket_tool.dart'; import 'package:web_synchronization_tool/windows/synchronization_web_tool.dart'; +import 'package:web_synchronization_tool/windows/windowsJs.dart'; import 'package:webview_windows/webview_windows.dart'; class WebGridController { @@ -116,6 +118,8 @@ class _ShowWebWidgetState extends State { /// 网址 TextEditingController urlController = TextEditingController(); + /// 总金额 + TextEditingController numController = TextEditingController(); /// 服务器ip TextEditingController ipController = TextEditingController(); @@ -148,11 +152,27 @@ class _ShowWebWidgetState extends State { if (widget.main == false) return input(); return Row( children: [ - // TextButton( - // onPressed: () { - // widget.controller.openDevTools(); - // }, - // child: const Text('开发者')), + TextButton( + onPressed: () { + widget.controller.openDevTools(); + }, + child: const Text('开发者')), + inputNumber(), + Row( + children: [ + const Text('同步'), + Switch( + value: SynchronizationWebTool.getInstance().webSync, + onChanged: (value) { + setState(() { + SynchronizationWebTool.getInstance().webSync = value; + if (value){ // 打开同步获取 从机 + SocketUtils.getInstance().sendGetChilds(); + } + }); + }) + ], + ), input(), ipSet() ], @@ -188,6 +208,40 @@ class _ShowWebWidgetState extends State { ); } + /// 输入总金额 + inputNumber(){ + return Row( + children: [ + SizedBox(width: 100, child: TextField(style: const TextStyle(fontSize: 14),controller: numController,)), + TextButton( + onPressed: () { + try{ + int num = int.parse(numController.text); + + int chidNum = SocketUtils.getInstance().childrenIp.length + 1; + + if (num <= chidNum * 10){ + numController.text = '金额不能小于${chidNum*10}'; + return; + } + + int maxNum = num ~/ chidNum; + SocketUtils.getInstance().sendInpuMessage(maxNum); + + // 本地处理 + List nums = NumberTool().randomNum(maxNum); + widget.controller.executeScript(WindowsJs.inputJs(nums.first)); + nums.removeAt(0); + SynchronizationWebTool.getInstance().input(nums); + }catch(e){ + numController.text = '请输入数字'; + } + }, + child: const Text('填入总金额')), + ], + ); + } + }