| OLD | NEW |
| 1 // Copyright (c) 2015, the Dartino project authors. Please see the AUTHORS file | 1 // Copyright (c) 2015, the Dartino project authors. Please see the AUTHORS file |
| 2 // for details. All rights reserved. Use of this source code is governed by a | 2 // for details. All rights reserved. Use of this source code is governed by a |
| 3 // BSD-style license that can be found in the LICENSE.md file. | 3 // BSD-style license that can be found in the LICENSE.md file. |
| 4 | 4 |
| 5 library fletch_agent.client; | 5 library dartino_agent.client; |
| 6 | 6 |
| 7 import 'dart:io'; | 7 import 'dart:io'; |
| 8 import 'dart:typed_data'; | 8 import 'dart:typed_data'; |
| 9 | 9 |
| 10 import '../lib/messages.dart'; | 10 import '../lib/messages.dart'; |
| 11 import '../lib/agent_connection.dart'; | 11 import '../lib/agent_connection.dart'; |
| 12 | 12 |
| 13 void printUsage() { | 13 void printUsage() { |
| 14 print(''' | 14 print(''' |
| 15 Usage: | 15 Usage: |
| 16 The Fletch agent command line client supports the following flags: | 16 The Dartino agent command line client supports the following flags: |
| 17 | 17 |
| 18 --port: the port on which to connect, default: 12121 | 18 --port: the port on which to connect, default: 12121 |
| 19 --host: the ip address on which to connect, default: 127.0.0.1 | 19 --host: the ip address on which to connect, default: 127.0.0.1 |
| 20 --cmd: the command to send to the Fletch agent, default: 0 (START_VM) | 20 --cmd: the command to send to the Dartino agent, default: 0 (START_VM) |
| 21 --pid: the pid of the vm to stop, only used when --cmd=1 (STOP_VM) | 21 --pid: the pid of the vm to stop, only used when --cmd=1 (STOP_VM) |
| 22 --signal: which signal to send to the vm. Requires the --pid option to | 22 --signal: which signal to send to the vm. Requires the --pid option to |
| 23 be specified | 23 be specified |
| 24 --pkg: path to the package file to be used with --cmd=3 (UPGRADE_PKG) | 24 --pkg: path to the package file to be used with --cmd=3 (UPGRADE_PKG) |
| 25 | 25 |
| 26 Example: Get the version of the agent running on 192.168.1.1: | 26 Example: Get the version of the agent running on 192.168.1.1: |
| 27 dart client.dart --cmd=4 --host=192.168.1.1.'''); | 27 dart client.dart --cmd=4 --host=192.168.1.1.'''); |
| 28 exit(1); | 28 exit(1); |
| 29 } | 29 } |
| 30 | 30 |
| 31 /// Small dart program to issue commands to the fletch agent. | 31 /// Small dart program to issue commands to the dartino agent. |
| 32 void main(List<String> arguments) async { | 32 void main(List<String> arguments) async { |
| 33 // Startup the agent listening on specified port. | 33 // Startup the agent listening on specified port. |
| 34 int port = 12121; | 34 int port = 12121; |
| 35 String host = '127.0.0.1'; | 35 String host = '127.0.0.1'; |
| 36 int cmd = RequestHeader.START_VM; | 36 int cmd = RequestHeader.START_VM; |
| 37 int id = 1; // The default id used. | 37 int id = 1; // The default id used. |
| 38 int pid; | 38 int pid; |
| 39 int signal; | 39 int signal; |
| 40 Socket socket; | 40 Socket socket; |
| 41 String packageFile; | 41 String packageFile; |
| (...skipping 54 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 96 if (parts.length != 2) { | 96 if (parts.length != 2) { |
| 97 printUsage(); | 97 printUsage(); |
| 98 } | 98 } |
| 99 packageFile = parts[1]; | 99 packageFile = parts[1]; |
| 100 } | 100 } |
| 101 } | 101 } |
| 102 | 102 |
| 103 try { | 103 try { |
| 104 socket = await Socket.connect(host, port); | 104 socket = await Socket.connect(host, port); |
| 105 } on SocketException catch (error) { | 105 } on SocketException catch (error) { |
| 106 print('Could not connect to Fletch Agent on \'$host:$port\'. ' | 106 print('Could not connect to Dartino Agent on \'$host:$port\'. ' |
| 107 'Received error: $error'); | 107 'Received error: $error'); |
| 108 printUsage(); | 108 printUsage(); |
| 109 } | 109 } |
| 110 | 110 |
| 111 var connection = new AgentConnection(socket); | 111 var connection = new AgentConnection(socket); |
| 112 switch (cmd) { | 112 switch (cmd) { |
| 113 case RequestHeader.START_VM: | 113 case RequestHeader.START_VM: |
| 114 VmData vmData = await connection.startVm(); | 114 VmData vmData = await connection.startVm(); |
| 115 print('Started VM: id=${vmData.id}, port=${vmData.port}'); | 115 print('Started VM: id=${vmData.id}, port=${vmData.port}'); |
| 116 break; | 116 break; |
| 117 case RequestHeader.STOP_VM: | 117 case RequestHeader.STOP_VM: |
| 118 if (pid == null) { | 118 if (pid == null) { |
| 119 print('Please specify which pid to stop with --pid=<pid>'); | 119 print('Please specify which pid to stop with --pid=<pid>'); |
| 120 exit(1); | 120 exit(1); |
| 121 } | 121 } |
| 122 await connection.stopVm(pid); | 122 await connection.stopVm(pid); |
| 123 print('Stopped VM: id=$pid'); | 123 print('Stopped VM: id=$pid'); |
| 124 break; | 124 break; |
| 125 case RequestHeader.LIST_VMS: | 125 case RequestHeader.LIST_VMS: |
| 126 await connection.listVms(); | 126 await connection.listVms(); |
| 127 break; | 127 break; |
| 128 case RequestHeader.UPGRADE_AGENT: | 128 case RequestHeader.UPGRADE_AGENT: |
| 129 if (packageFile == null) { | 129 if (packageFile == null) { |
| 130 print('Please specify the path to the package with --pkg=<path>'); | 130 print('Please specify the path to the package with --pkg=<path>'); |
| 131 exit(1); | 131 exit(1); |
| 132 } | 132 } |
| 133 Uri packageUri = new Uri.file(packageFile); | 133 Uri packageUri = new Uri.file(packageFile); |
| 134 List<String> nameParts = packageUri.pathSegments.last.split('_'); | 134 List<String> nameParts = packageUri.pathSegments.last.split('_'); |
| 135 if (nameParts.length != 3 || nameParts[0] != 'fletch-agent') { | 135 if (nameParts.length != 3 || nameParts[0] != 'dartino-agent') { |
| 136 print('A fletch-agent package must have a name of the form\n' | 136 print('A dartino-agent package must have a name of the form\n' |
| 137 ' fletch-agent_<version>_<platform>'); | 137 ' dartino-agent_<version>_<platform>'); |
| 138 exit(1); | 138 exit(1); |
| 139 } | 139 } |
| 140 String version = nameParts[1]; | 140 String version = nameParts[1]; |
| 141 List<int> data = await new File(packageFile).readAsBytes(); | 141 List<int> data = await new File(packageFile).readAsBytes(); |
| 142 print('Sending package for version $version' | 142 print('Sending package for version $version' |
| 143 ' (length: ${data.length} bytes).'); | 143 ' (length: ${data.length} bytes).'); |
| 144 await connection.upgradeAgent(version, data); | 144 await connection.upgradeAgent(version, data); |
| 145 print('Update finished'); | 145 print('Update finished'); |
| 146 break; | 146 break; |
| 147 case RequestHeader.FLETCH_VERSION: | 147 case RequestHeader.DARTINO_VERSION: |
| 148 String version = await connection.fletchVersion(); | 148 String version = await connection.dartinoVersion(); |
| 149 print('Fletch Agent Version $version'); | 149 print('Dartino Agent Version $version'); |
| 150 break; | 150 break; |
| 151 case RequestHeader.SIGNAL_VM: | 151 case RequestHeader.SIGNAL_VM: |
| 152 if (pid == null) { | 152 if (pid == null) { |
| 153 print('Please specify which pid to stop with --pid=<pid>'); | 153 print('Please specify which pid to stop with --pid=<pid>'); |
| 154 printUsage(); | 154 printUsage(); |
| 155 exit(1); | 155 exit(1); |
| 156 } | 156 } |
| 157 if (signal == null) { | 157 if (signal == null) { |
| 158 print('Please specify the signal to send to pid.'); | 158 print('Please specify the signal to send to pid.'); |
| 159 printUsage(); | 159 printUsage(); |
| 160 exit(1); | 160 exit(1); |
| 161 } | 161 } |
| 162 await connection.signalVm(pid, signal); | 162 await connection.signalVm(pid, signal); |
| 163 print('Send signal $signal to VM: id=$pid'); | 163 print('Send signal $signal to VM: id=$pid'); |
| 164 break; | 164 break; |
| 165 default: | 165 default: |
| 166 print('Invalid command: $cmd'); | 166 print('Invalid command: $cmd'); |
| 167 exit(1); | 167 exit(1); |
| 168 } | 168 } |
| 169 socket.close(); | 169 socket.close(); |
| 170 } | 170 } |
| OLD | NEW |