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

Side by Side Diff: mojo/public/dart/src/message_pipe.dart

Issue 1132063007: Rationalize Dart mojo and sky package structure (Closed) Base URL: https://github.com/domokit/mojo.git@master
Patch Set: Created 5 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 | « mojo/public/dart/src/message.dart ('k') | mojo/public/dart/src/natives.dart » ('j') | no next file with comments »
Toggle Intra-line Diffs ('i') | Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
OLDNEW
(Empty)
1 // Copyright 2014 The Chromium Authors. All rights reserved.
2 // Use of this source code is governed by a BSD-style license that can be
3 // found in the LICENSE file.
4
5 part of core;
6
7 class MojoMessagePipeReadResult {
8 final MojoResult status;
9 final int bytesRead;
10 final int handlesRead;
11
12 MojoMessagePipeReadResult(this.status, this.bytesRead, this.handlesRead);
13 MojoMessagePipeReadResult.fromList(List<int> resultList)
14 : this(new MojoResult(resultList[0]), resultList[1], resultList[2]);
15
16 String toString() {
17 return "MojoMessagePipeReadResult("
18 "status: $status, bytesRead: $bytesRead, handlesRead: $handlesRead)";
19 }
20 }
21
22 class MojoMessagePipeEndpoint {
23 static const int WRITE_FLAG_NONE = 0;
24 static const int READ_FLAG_NONE = 0;
25 static const int READ_FLAG_MAY_DISCARD = 1 << 0;
26
27 MojoHandle handle;
28 MojoResult status;
29
30 MojoMessagePipeEndpoint(this.handle);
31
32 MojoResult write(ByteData data,
33 [int numBytes = -1, List<MojoHandle> handles = null, int flags = 0]) {
34 if (handle == null) {
35 status = MojoResult.INVALID_ARGUMENT;
36 return status;
37 }
38
39 int dataLengthInBytes = (data == null) ? 0 : data.lengthInBytes;
40
41 // If numBytes has the default value, use the full length of the data.
42 int dataNumBytes = (numBytes == -1) ? dataLengthInBytes : numBytes;
43 if (dataNumBytes > dataLengthInBytes) {
44 status = MojoResult.INVALID_ARGUMENT;
45 return status;
46 }
47
48 // handles may be null, otherwise convert to ints.
49 List<int> mojoHandles =
50 (handles != null) ? handles.map((h) => h.h).toList() : null;
51
52 // Do the call.
53 int result = MojoMessagePipeNatives.MojoWriteMessage(
54 handle.h, data, dataNumBytes, mojoHandles, flags);
55
56 status = new MojoResult(result);
57 return status;
58 }
59
60 MojoMessagePipeReadResult read(ByteData data,
61 [int numBytes = -1, List<MojoHandle> handles = null, int flags = 0]) {
62 if (handle == null) {
63 status = MojoResult.INVALID_ARGUMENT;
64 return null;
65 }
66
67 // If numBytes has the default value, use the full length of the data.
68 int dataNumBytes;
69 if (data == null) {
70 dataNumBytes = 0;
71 } else {
72 dataNumBytes = (numBytes == -1) ? data.lengthInBytes : numBytes;
73 if (dataNumBytes > data.lengthInBytes) {
74 status = MojoResult.INVALID_ARGUMENT;
75 return null;
76 }
77 }
78
79 // handles may be null, otherwise make an int list for the handles.
80 List<int> mojoHandles;
81 if (handles == null) {
82 mojoHandles = null;
83 } else {
84 mojoHandles = new List<int>(handles.length);
85 }
86
87 // Do the call.
88 List result = MojoMessagePipeNatives.MojoReadMessage(
89 handle.h, data, dataNumBytes, mojoHandles, flags);
90
91 if (result == null) {
92 status = MojoResult.INVALID_ARGUMENT;
93 return null;
94 }
95
96 assert((result is List) && (result.length == 3));
97 var readResult = new MojoMessagePipeReadResult.fromList(result);
98
99 // Copy out the handles that were read.
100 if (handles != null) {
101 for (var i = 0; i < readResult.handlesRead; i++) {
102 handles[i] = new MojoHandle(mojoHandles[i]);
103 }
104 }
105
106 status = readResult.status;
107 return readResult;
108 }
109
110 MojoMessagePipeReadResult query() => read(null);
111
112 void close() {
113 handle.close();
114 handle = null;
115 }
116
117 String toString() =>
118 "MojoMessagePipeEndpoint(handle: $handle, status: $status)";
119 }
120
121 class MojoMessagePipe {
122 static const int FLAG_NONE = 0;
123
124 List<MojoMessagePipeEndpoint> endpoints;
125 MojoResult status;
126
127 MojoMessagePipe._() {
128 endpoints = null;
129 status = MojoResult.OK;
130 }
131
132 factory MojoMessagePipe([int flags = FLAG_NONE]) {
133 List result = MojoMessagePipeNatives.MojoCreateMessagePipe(flags);
134 if (result == null) {
135 return null;
136 }
137 assert((result is List) && (result.length == 3));
138
139 MojoHandle end1 = new MojoHandle(result[1]);
140 MojoHandle end2 = new MojoHandle(result[2]);
141 MojoMessagePipe pipe = new MojoMessagePipe._();
142 pipe.endpoints = new List(2);
143 pipe.endpoints[0] = new MojoMessagePipeEndpoint(end1);
144 pipe.endpoints[1] = new MojoMessagePipeEndpoint(end2);
145 pipe.status = new MojoResult(result[0]);
146 return pipe;
147 }
148 }
OLDNEW
« no previous file with comments | « mojo/public/dart/src/message.dart ('k') | mojo/public/dart/src/natives.dart » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698