Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(379)

Side by Side Diff: examples/dart/netcat/lib/main.dart

Issue 1964193002: Dart: Refactors Proxies (Closed) Base URL: git@github.com:domokit/mojo.git@master
Patch Set: Address comments Created 4 years, 7 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View unified diff | Download patch
« no previous file with comments | « examples/dart/hello_world/hello/lib/main.dart ('k') | examples/dart/wget/lib/main.dart » ('j') | no next file with comments »
Toggle Intra-line Diffs ('i') | Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
OLDNEW
1 #!mojo mojo:dart_content_handler 1 #!mojo mojo:dart_content_handler
2 // Copyright 2014 The Chromium Authors. All rights reserved. 2 // Copyright 2014 The Chromium Authors. All rights reserved.
3 // Use of this source code is governed by a BSD-style license that can be 3 // Use of this source code is governed by a BSD-style license that can be
4 // found in the LICENSE file. 4 // found in the LICENSE file.
5 5
6 import 'dart:async'; 6 import 'dart:async';
7 import 'dart:core'; 7 import 'dart:core';
8 import 'dart:typed_data'; 8 import 'dart:typed_data';
9 9
10 import 'package:mojo/application.dart'; 10 import 'package:mojo/application.dart';
(...skipping 47 matching lines...) Expand 10 before | Expand all | Expand 10 after
58 : _readBuffer = new ByteData(16 * 1024), 58 : _readBuffer = new ByteData(16 * 1024),
59 _writeBuffer = new ByteData(16 * 1024); 59 _writeBuffer = new ByteData(16 * 1024);
60 60
61 Future connect(NetAddress remote_address) async { 61 Future connect(NetAddress remote_address) async {
62 try { 62 try {
63 var networkService = new NetworkServiceProxy.unbound(); 63 var networkService = new NetworkServiceProxy.unbound();
64 _application.connectToService('mojo:network_service', networkService); 64 _application.connectToService('mojo:network_service', networkService);
65 65
66 NetAddress local_address = makeIPv4NetAddress([0, 0, 0, 0], 0); 66 NetAddress local_address = makeIPv4NetAddress([0, 0, 0, 0], 0);
67 var boundSocket = new TcpBoundSocketProxy.unbound(); 67 var boundSocket = new TcpBoundSocketProxy.unbound();
68 await networkService.ptr.createTcpBoundSocket(local_address, boundSocket); 68 await networkService.createTcpBoundSocket(local_address, boundSocket);
69 await networkService.close(); 69 await networkService.close();
70 70
71 var sendDataPipe = new MojoDataPipe(); 71 var sendDataPipe = new MojoDataPipe();
72 _socketSender = sendDataPipe.producer; 72 _socketSender = sendDataPipe.producer;
73 var receiveDataPipe = new MojoDataPipe(); 73 var receiveDataPipe = new MojoDataPipe();
74 _socketReceiver = receiveDataPipe.consumer; 74 _socketReceiver = receiveDataPipe.consumer;
75 _socket = new TcpConnectedSocketProxy.unbound(); 75 _socket = new TcpConnectedSocketProxy.unbound();
76 await boundSocket.ptr.connect(remote_address, sendDataPipe.consumer, 76 await boundSocket.connect(remote_address, sendDataPipe.consumer,
77 receiveDataPipe.producer, _socket); 77 receiveDataPipe.producer, _socket);
78 await boundSocket.close(); 78 await boundSocket.close();
79 79
80 // Set up reading from the terminal. 80 // Set up reading from the terminal.
81 _startReadingFromTerminal(); 81 _startReadingFromTerminal();
82 82
83 // Set up reading from the socket. 83 // Set up reading from the socket.
84 _socketReceiverEventSubscription = 84 _socketReceiverEventSubscription =
85 new MojoEventSubscription(_socketReceiver.handle); 85 new MojoEventSubscription(_socketReceiver.handle);
86 _socketReceiverEventSubscription.subscribe(_onSocketReceiverEvent); 86 _socketReceiverEventSubscription.subscribe(_onSocketReceiverEvent);
87 } catch (e) { 87 } catch (e) {
88 _shutDown(); 88 _shutDown();
89 } 89 }
90 } 90 }
91 91
92 void _startReadingFromTerminal() { 92 void _startReadingFromTerminal() {
93 // TODO(vtl): Do we have to do something on error? 93 // TODO(vtl): Do we have to do something on error?
94 _terminal.ptr 94 _terminal
95 .read(_writeBuffer.lengthInBytes, 0, files.Whence.fromCurrent) 95 .read(_writeBuffer.lengthInBytes, 0, files.Whence.fromCurrent)
96 .then(_onReadFromTerminal) 96 .then(_onReadFromTerminal)
97 .catchError((e) { 97 .catchError((e) {
98 _shutDown(); 98 _shutDown();
99 }); 99 });
100 } 100 }
101 101
102 void _onReadFromTerminal(files.FileReadResponseParams p) { 102 void _onReadFromTerminal(files.FileReadResponseParams p) {
103 if (p.error != files.Error.ok) { 103 if (p.error != files.Error.ok) {
104 // TODO(vtl): Do terminal errors. 104 // TODO(vtl): Do terminal errors.
(...skipping 17 matching lines...) Expand all
122 122
123 _startReadingFromTerminal(); 123 _startReadingFromTerminal();
124 } 124 }
125 125
126 void _onSocketReceiverEvent(int mojoSignals) { 126 void _onSocketReceiverEvent(int mojoSignals) {
127 var shouldShutDown = false; 127 var shouldShutDown = false;
128 if (MojoHandleSignals.isReadable(mojoSignals)) { 128 if (MojoHandleSignals.isReadable(mojoSignals)) {
129 var numBytesRead = _socketReceiver.read(_readBuffer); 129 var numBytesRead = _socketReceiver.read(_readBuffer);
130 if (_socketReceiver.status == MojoResult.kOk) { 130 if (_socketReceiver.status == MojoResult.kOk) {
131 assert(numBytesRead > 0); 131 assert(numBytesRead > 0);
132 _terminal.ptr 132 _terminal
133 .write(_readBuffer.buffer.asUint8List(0, numBytesRead), 0, 133 .write(_readBuffer.buffer.asUint8List(0, numBytesRead), 0,
134 files.Whence.fromCurrent) 134 files.Whence.fromCurrent)
135 .catchError((e) { 135 .catchError((e) {
136 _shutDown(); 136 _shutDown();
137 }); 137 });
138 _socketReceiverEventSubscription.enableReadEvents(); 138 _socketReceiverEventSubscription.enableReadEvents();
139 } else { 139 } else {
140 shouldShutDown = true; 140 shouldShutDown = true;
141 } 141 }
142 } else if (MojoHandleSignals.isPeerClosed(mojoSignals)) { 142 } else if (MojoHandleSignals.isPeerClosed(mojoSignals)) {
(...skipping 38 matching lines...) Expand 10 before | Expand all | Expand 10 after
181 } 181 }
182 182
183 @override 183 @override
184 void connectToTerminal(files.FileProxy terminal) { 184 void connectToTerminal(files.FileProxy terminal) {
185 var url = Uri.parse(_resolvedUrl); 185 var url = Uri.parse(_resolvedUrl);
186 NetAddress remote_address; 186 NetAddress remote_address;
187 try { 187 try {
188 remote_address = _getNetAddressFromUrl(url); 188 remote_address = _getNetAddressFromUrl(url);
189 } catch (e) { 189 } catch (e) {
190 fputs( 190 fputs(
191 terminal.ptr, 191 terminal,
192 'HALP: Add a query: ?host=<host>&port=<port>\n' 192 'HALP: Add a query: ?host=<host>&port=<port>\n'
193 '(<host> must be "localhost" or n1.n2.n3.n4)\n\n' 193 '(<host> must be "localhost" or n1.n2.n3.n4)\n\n'
194 'Got query parameters:\n' + 194 'Got query parameters:\n' +
195 url.queryParameters.toString()); 195 url.queryParameters.toString());
196 ignoreFuture(terminal.close()); 196 ignoreFuture(terminal.close());
197 return; 197 return;
198 } 198 }
199 199
200 // TODO(vtl): Currently, we only do IPv4, so this should work. 200 // TODO(vtl): Currently, we only do IPv4, so this should work.
201 fputs( 201 fputs(
202 terminal.ptr, 202 terminal,
203 'Connecting to: ' + 203 'Connecting to: ' +
204 remote_address.ipv4.addr.join('.') + 204 remote_address.ipv4.addr.join('.') +
205 ':' + 205 ':' +
206 remote_address.ipv4.port.toString() + 206 remote_address.ipv4.port.toString() +
207 '...'); 207 '...');
208 208
209 var connector = new Connector(_application, terminal); 209 var connector = new Connector(_application, terminal);
210 // TODO(vtl): Do we have to do something on error? 210 // TODO(vtl): Do we have to do something on error?
211 connector.connect(remote_address).catchError((e) {}); 211 connector.connect(remote_address).catchError((e) {});
212 } 212 }
(...skipping 19 matching lines...) Expand all
232 } 232 }
233 } 233 }
234 234
235 main(List args, Object handleToken) { 235 main(List args, Object handleToken) {
236 MojoHandle appHandle = new MojoHandle(handleToken); 236 MojoHandle appHandle = new MojoHandle(handleToken);
237 new NetcatApplication.fromHandle(appHandle) 237 new NetcatApplication.fromHandle(appHandle)
238 ..onError = ((Object e) { 238 ..onError = ((Object e) {
239 MojoHandle.reportLeakedHandles(); 239 MojoHandle.reportLeakedHandles();
240 }); 240 });
241 } 241 }
OLDNEW
« no previous file with comments | « examples/dart/hello_world/hello/lib/main.dart ('k') | examples/dart/wget/lib/main.dart » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698