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

Side by Side Diff: runtime/bin/eventhandler_win.h

Issue 1800863002: Cleanup in //runtime/bin (Closed) Base URL: git@github.com:dart-lang/sdk.git@master
Patch Set: Created 4 years, 9 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 | « runtime/bin/eventhandler_macos.cc ('k') | runtime/bin/eventhandler_win.cc » ('j') | no next file with comments »
Toggle Intra-line Diffs ('i') | Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
OLDNEW
1 // Copyright (c) 2012, the Dart project authors. Please see the AUTHORS file 1 // Copyright (c) 2012, the Dart 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 file. 3 // BSD-style license that can be found in the LICENSE file.
4 4
5 #ifndef BIN_EVENTHANDLER_WIN_H_ 5 #ifndef BIN_EVENTHANDLER_WIN_H_
6 #define BIN_EVENTHANDLER_WIN_H_ 6 #define BIN_EVENTHANDLER_WIN_H_
7 7
8 #if !defined(BIN_EVENTHANDLER_H_) 8 #if !defined(BIN_EVENTHANDLER_H_)
9 #error Do not include eventhandler_win.h directly; use eventhandler.h instead. 9 #error Do not include eventhandler_win.h directly; use eventhandler.h instead.
10 #endif 10 #endif
11 11
12 #include <mswsock.h>
12 #include <winsock2.h> 13 #include <winsock2.h>
13 #include <ws2tcpip.h> 14 #include <ws2tcpip.h>
14 #include <mswsock.h>
15 15
16 #include "bin/builtin.h" 16 #include "bin/builtin.h"
17 #include "bin/thread.h" 17 #include "bin/thread.h"
18 18
19
20 namespace dart { 19 namespace dart {
21 namespace bin { 20 namespace bin {
22 21
23 // Forward declarations. 22 // Forward declarations.
24 class EventHandlerImplementation; 23 class EventHandlerImplementation;
25 class Handle; 24 class Handle;
26 class FileHandle; 25 class FileHandle;
27 class SocketHandle; 26 class SocketHandle;
28 class ClientSocket; 27 class ClientSocket;
29 class ListenSocket; 28 class ListenSocket;
30 29
31
32 // An OverlappedBuffer encapsulates the OVERLAPPED structure and the 30 // An OverlappedBuffer encapsulates the OVERLAPPED structure and the
33 // associated data buffer. For accept it also contains the pre-created 31 // associated data buffer. For accept it also contains the pre-created
34 // socket for the client. 32 // socket for the client.
35 class OverlappedBuffer { 33 class OverlappedBuffer {
36 public: 34 public:
37 enum Operation { 35 enum Operation {
38 kAccept, kRead, kRecvFrom, kWrite, kSendTo, kDisconnect, kConnect 36 kAccept, kRead, kRecvFrom, kWrite, kSendTo, kDisconnect, kConnect
39 }; 37 };
40 38
41 static OverlappedBuffer* AllocateAcceptBuffer(int buffer_size); 39 static OverlappedBuffer* AllocateAcceptBuffer(int buffer_size);
(...skipping 100 matching lines...) Expand 10 before | Expand all | Expand 10 after
142 140
143 // For the recvfrom operation additional storace is allocated for the 141 // For the recvfrom operation additional storace is allocated for the
144 // source sockaddr. 142 // source sockaddr.
145 socklen_t* from_len_addr_; // Pointer to source sockaddr size storage. 143 socklen_t* from_len_addr_; // Pointer to source sockaddr size storage.
146 struct sockaddr* from_; // Pointer to source sockaddr storage. 144 struct sockaddr* from_; // Pointer to source sockaddr storage.
147 145
148 // Buffer for recv/send/AcceptEx. This must be at the end of the 146 // Buffer for recv/send/AcceptEx. This must be at the end of the
149 // object as the object is allocated larger than it's definition 147 // object as the object is allocated larger than it's definition
150 // indicate to extend this array. 148 // indicate to extend this array.
151 uint8_t buffer_data_[1]; 149 uint8_t buffer_data_[1];
150
151 DISALLOW_COPY_AND_ASSIGN(OverlappedBuffer);
152 }; 152 };
153 153
154 154
155 // Abstract super class for holding information on listen and connected 155 // Abstract super class for holding information on listen and connected
156 // sockets. 156 // sockets.
157 class Handle : public DescriptorInfoBase { 157 class Handle : public DescriptorInfoBase {
158 public: 158 public:
159 enum Type { 159 enum Type {
160 kFile, 160 kFile,
161 kStd, 161 kStd,
(...skipping 104 matching lines...) Expand 10 before | Expand all | Expand 10 after
266 bool read_thread_starting_; 266 bool read_thread_starting_;
267 bool read_thread_finished_; 267 bool read_thread_finished_;
268 268
269 private: 269 private:
270 void WaitForReadThreadStarted(); 270 void WaitForReadThreadStarted();
271 void NotifyReadThreadStarted(); 271 void NotifyReadThreadStarted();
272 void WaitForReadThreadFinished(); 272 void WaitForReadThreadFinished();
273 void NotifyReadThreadFinished(); 273 void NotifyReadThreadFinished();
274 274
275 int flags_; 275 int flags_;
276
277 DISALLOW_COPY_AND_ASSIGN(Handle);
276 }; 278 };
277 279
278 280
279 class FileHandle : public DescriptorInfoSingleMixin<Handle> { 281 class FileHandle : public DescriptorInfoSingleMixin<Handle> {
280 public: 282 public:
281 explicit FileHandle(HANDLE handle) 283 explicit FileHandle(HANDLE handle)
282 : DescriptorInfoSingleMixin(reinterpret_cast<intptr_t>(handle), true) { 284 : DescriptorInfoSingleMixin(reinterpret_cast<intptr_t>(handle), true) {
283 type_ = kFile; 285 type_ = kFile;
284 } 286 }
285 287
286 virtual void EnsureInitialized(EventHandlerImplementation* event_handler); 288 virtual void EnsureInitialized(EventHandlerImplementation* event_handler);
287 virtual bool IsClosed(); 289 virtual bool IsClosed();
290
291 private:
292 DISALLOW_COPY_AND_ASSIGN(FileHandle);
288 }; 293 };
289 294
290 295
291 class StdHandle : public FileHandle { 296 class StdHandle : public FileHandle {
292 public: 297 public:
293 explicit StdHandle(HANDLE handle) 298 explicit StdHandle(HANDLE handle)
294 : FileHandle(handle), 299 : FileHandle(handle),
295 thread_id_(Thread::kInvalidThreadId), 300 thread_id_(Thread::kInvalidThreadId),
296 thread_wrote_(0), 301 thread_wrote_(0),
297 write_thread_exists_(false), 302 write_thread_exists_(false),
298 write_thread_running_(false) { 303 write_thread_running_(false) {
299 type_ = kStd; 304 type_ = kStd;
300 } 305 }
301 306
302 virtual void DoClose(); 307 virtual void DoClose();
303 virtual intptr_t Write(const void* buffer, intptr_t num_bytes); 308 virtual intptr_t Write(const void* buffer, intptr_t num_bytes);
304 309
305 void WriteSyncCompleteAsync(); 310 void WriteSyncCompleteAsync();
306 void RunWriteLoop(); 311 void RunWriteLoop();
307 312
308 private: 313 private:
309 ThreadId thread_id_; 314 ThreadId thread_id_;
310 intptr_t thread_wrote_; 315 intptr_t thread_wrote_;
311 bool write_thread_exists_; 316 bool write_thread_exists_;
312 bool write_thread_running_; 317 bool write_thread_running_;
318
319 DISALLOW_COPY_AND_ASSIGN(StdHandle);
313 }; 320 };
314 321
315 322
316 class DirectoryWatchHandle : public DescriptorInfoSingleMixin<Handle> { 323 class DirectoryWatchHandle : public DescriptorInfoSingleMixin<Handle> {
317 public: 324 public:
318 DirectoryWatchHandle(HANDLE handle, int events, bool recursive) 325 DirectoryWatchHandle(HANDLE handle, int events, bool recursive)
319 : DescriptorInfoSingleMixin(reinterpret_cast<intptr_t>(handle), true), 326 : DescriptorInfoSingleMixin(reinterpret_cast<intptr_t>(handle), true),
320 events_(events), 327 events_(events),
321 recursive_(recursive) { 328 recursive_(recursive) {
322 type_ = kDirectoryWatch; 329 type_ = kDirectoryWatch;
323 } 330 }
324 331
325 virtual void EnsureInitialized(EventHandlerImplementation* event_handler); 332 virtual void EnsureInitialized(EventHandlerImplementation* event_handler);
326 virtual bool IsClosed(); 333 virtual bool IsClosed();
327 334
328 virtual bool IssueRead(); 335 virtual bool IssueRead();
329 336
330 void Stop(); 337 void Stop();
331 338
332 private: 339 private:
333 int events_; 340 int events_;
334 bool recursive_; 341 bool recursive_;
342
343 DISALLOW_COPY_AND_ASSIGN(DirectoryWatchHandle);
335 }; 344 };
336 345
337 346
338 class SocketHandle : public Handle { 347 class SocketHandle : public Handle {
339 public: 348 public:
340 SOCKET socket() const { return socket_; } 349 SOCKET socket() const { return socket_; }
341 350
342 protected: 351 protected:
343 explicit SocketHandle(intptr_t s) 352 explicit SocketHandle(intptr_t s)
344 : Handle(s), 353 : Handle(s),
345 socket_(s) {} 354 socket_(s) {}
346 355
347 virtual void HandleIssueError(); 356 virtual void HandleIssueError();
348 357
349 private: 358 private:
350 const SOCKET socket_; 359 const SOCKET socket_;
360
361 DISALLOW_COPY_AND_ASSIGN(SocketHandle);
351 }; 362 };
352 363
353 364
354 // Information on listen sockets. 365 // Information on listen sockets.
355 class ListenSocket : public DescriptorInfoMultipleMixin<SocketHandle> { 366 class ListenSocket : public DescriptorInfoMultipleMixin<SocketHandle> {
356 public: 367 public:
357 explicit ListenSocket(intptr_t s) : DescriptorInfoMultipleMixin(s, true), 368 explicit ListenSocket(intptr_t s) : DescriptorInfoMultipleMixin(s, true),
358 AcceptEx_(NULL), 369 AcceptEx_(NULL),
359 pending_accept_count_(0), 370 pending_accept_count_(0),
360 accepted_head_(NULL), 371 accepted_head_(NULL),
(...skipping 35 matching lines...) Expand 10 before | Expand all | Expand 10 after
396 int pending_accept_count_; 407 int pending_accept_count_;
397 408
398 // Linked list of accepted connections provided by completion code. Ready to 409 // Linked list of accepted connections provided by completion code. Ready to
399 // be handed over through accept. 410 // be handed over through accept.
400 ClientSocket* accepted_head_; 411 ClientSocket* accepted_head_;
401 ClientSocket* accepted_tail_; 412 ClientSocket* accepted_tail_;
402 413
403 // The number of accepted connections which are waiting to be removed from 414 // The number of accepted connections which are waiting to be removed from
404 // this queue and processed by dart isolates. 415 // this queue and processed by dart isolates.
405 int accepted_count_; 416 int accepted_count_;
417
418 DISALLOW_COPY_AND_ASSIGN(ListenSocket);
406 }; 419 };
407 420
408 421
409 // Information on connected sockets. 422 // Information on connected sockets.
410 class ClientSocket : public DescriptorInfoSingleMixin<SocketHandle> { 423 class ClientSocket : public DescriptorInfoSingleMixin<SocketHandle> {
411 public: 424 public:
412 explicit ClientSocket(intptr_t s) : DescriptorInfoSingleMixin(s, true), 425 explicit ClientSocket(intptr_t s) : DescriptorInfoSingleMixin(s, true),
413 DisconnectEx_(NULL), 426 DisconnectEx_(NULL),
414 next_(NULL), 427 next_(NULL),
415 connected_(false), 428 connected_(false),
(...skipping 37 matching lines...) Expand 10 before | Expand all | Expand 10 after
453 closed_ = true; 466 closed_ = true;
454 } 467 }
455 468
456 private: 469 private:
457 bool LoadDisconnectEx(); 470 bool LoadDisconnectEx();
458 471
459 LPFN_DISCONNECTEX DisconnectEx_; 472 LPFN_DISCONNECTEX DisconnectEx_;
460 ClientSocket* next_; 473 ClientSocket* next_;
461 bool connected_; 474 bool connected_;
462 bool closed_; 475 bool closed_;
476
477 DISALLOW_COPY_AND_ASSIGN(ClientSocket);
463 }; 478 };
464 479
465 480
466 class DatagramSocket : public DescriptorInfoSingleMixin<SocketHandle> { 481 class DatagramSocket : public DescriptorInfoSingleMixin<SocketHandle> {
467 public: 482 public:
468 explicit DatagramSocket(intptr_t s) : DescriptorInfoSingleMixin(s, true) { 483 explicit DatagramSocket(intptr_t s) : DescriptorInfoSingleMixin(s, true) {
469 type_ = kDatagramSocket; 484 type_ = kDatagramSocket;
470 } 485 }
471 486
472 virtual ~DatagramSocket() { 487 virtual ~DatagramSocket() {
473 // Don't delete this object until all pending requests have been handled. 488 // Don't delete this object until all pending requests have been handled.
474 ASSERT(!HasPendingRead()); 489 ASSERT(!HasPendingRead());
475 ASSERT(!HasPendingWrite()); 490 ASSERT(!HasPendingWrite());
476 } 491 }
477 492
478 // Internal interface used by the event handler. 493 // Internal interface used by the event handler.
479 virtual bool IssueRecvFrom(); 494 virtual bool IssueRecvFrom();
480 virtual bool IssueSendTo(sockaddr* sa, socklen_t sa_len); 495 virtual bool IssueSendTo(sockaddr* sa, socklen_t sa_len);
481 496
482 virtual void EnsureInitialized(EventHandlerImplementation* event_handler); 497 virtual void EnsureInitialized(EventHandlerImplementation* event_handler);
483 virtual void DoClose(); 498 virtual void DoClose();
484 virtual bool IsClosed(); 499 virtual bool IsClosed();
500
501 private:
502 DISALLOW_COPY_AND_ASSIGN(DatagramSocket);
485 }; 503 };
486 504
505
487 // Event handler. 506 // Event handler.
488 class EventHandlerImplementation { 507 class EventHandlerImplementation {
489 public: 508 public:
490 EventHandlerImplementation(); 509 EventHandlerImplementation();
491 virtual ~EventHandlerImplementation(); 510 virtual ~EventHandlerImplementation();
492 511
493 void SendData(intptr_t id, Dart_Port dart_port, int64_t data); 512 void SendData(intptr_t id, Dart_Port dart_port, int64_t data);
494 void Start(EventHandler* handler); 513 void Start(EventHandler* handler);
495 void Shutdown(); 514 void Shutdown();
496 515
(...skipping 19 matching lines...) Expand all
516 535
517 private: 536 private:
518 ClientSocket* client_sockets_head_; 537 ClientSocket* client_sockets_head_;
519 538
520 Monitor* startup_monitor_; 539 Monitor* startup_monitor_;
521 ThreadId handler_thread_id_; 540 ThreadId handler_thread_id_;
522 541
523 TimeoutQueue timeout_queue_; // Time for next timeout. 542 TimeoutQueue timeout_queue_; // Time for next timeout.
524 bool shutdown_; 543 bool shutdown_;
525 HANDLE completion_port_; 544 HANDLE completion_port_;
545
546 DISALLOW_COPY_AND_ASSIGN(EventHandlerImplementation);
526 }; 547 };
527 548
528 } // namespace bin 549 } // namespace bin
529 } // namespace dart 550 } // namespace dart
530 551
531 #endif // BIN_EVENTHANDLER_WIN_H_ 552 #endif // BIN_EVENTHANDLER_WIN_H_
OLDNEW
« no previous file with comments | « runtime/bin/eventhandler_macos.cc ('k') | runtime/bin/eventhandler_win.cc » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698