OLD | NEW |
1 // Copyright (c) 2011, the Dart project authors. Please see the AUTHORS file | 1 // Copyright (c) 2011, 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 #include <winsock2.h> | 8 #include <winsock2.h> |
9 #include <mswsock.h> | 9 #include <mswsock.h> |
10 | 10 |
(...skipping 257 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
268 ClientSocket* accepted_head_; | 268 ClientSocket* accepted_head_; |
269 ClientSocket* accepted_tail_; | 269 ClientSocket* accepted_tail_; |
270 }; | 270 }; |
271 | 271 |
272 | 272 |
273 // Information on connected sockets. | 273 // Information on connected sockets. |
274 class ClientSocket : public SocketHandle { | 274 class ClientSocket : public SocketHandle { |
275 public: | 275 public: |
276 explicit ClientSocket(SOCKET s) | 276 explicit ClientSocket(SOCKET s) |
277 : SocketHandle(s), | 277 : SocketHandle(s), |
278 next_(NULL) { type_ = kClientSocket; } | 278 next_(NULL), |
| 279 flags_(0) { type_ = kClientSocket; } |
279 | 280 |
280 ClientSocket(SOCKET s, Dart_Port port) | 281 ClientSocket(SOCKET s, Dart_Port port) |
281 : SocketHandle(s, port), | 282 : SocketHandle(s, port), |
282 next_(NULL) { type_ = kClientSocket; } | 283 next_(NULL), |
| 284 flags_(0) { type_ = kClientSocket; } |
283 | 285 |
284 virtual ~ClientSocket() { | 286 virtual ~ClientSocket() { |
285 // Don't delete this object until all pending requests have been handled. | 287 // Don't delete this object until all pending requests have been handled. |
286 ASSERT(!HasPendingRead()); | 288 ASSERT(!HasPendingRead()); |
287 ASSERT(!HasPendingWrite()); | 289 ASSERT(!HasPendingWrite()); |
288 ASSERT(next_ == NULL); | 290 ASSERT(next_ == NULL); |
289 }; | 291 }; |
290 | 292 |
| 293 void Shutdown(int how); |
| 294 bool IsClosedRead() { return (flags_ & (1 << kCloseRead)) != 0; } |
| 295 bool IsClosedWrite() { return (flags_ & (1 << kCloseWrite)) != 0; } |
| 296 |
| 297 void MarkClosedRead() { flags_ |= (1 << kCloseRead); } |
| 298 void MarkClosedWrite() { flags_ |= (1 << kCloseWrite); } |
| 299 |
291 // Internal interface used by the event handler. | 300 // Internal interface used by the event handler. |
292 virtual bool IssueRead(); | 301 virtual bool IssueRead(); |
293 virtual bool IssueWrite(); | 302 virtual bool IssueWrite(); |
294 | 303 |
295 virtual void EnsureInitialized( | 304 virtual void EnsureInitialized( |
296 EventHandlerImplementation* event_handler); | 305 EventHandlerImplementation* event_handler); |
297 virtual bool IsClosed(); | 306 virtual bool IsClosed(); |
298 | 307 |
299 ClientSocket* next() { return next_; } | 308 ClientSocket* next() { return next_; } |
300 void set_next(ClientSocket* next) { next_ = next; } | 309 void set_next(ClientSocket* next) { next_ = next; } |
301 | 310 |
302 private: | 311 private: |
| 312 enum Flags { |
| 313 kCloseRead = 0, |
| 314 kCloseWrite = 1 |
| 315 }; |
| 316 |
303 virtual void AfterClose(); | 317 virtual void AfterClose(); |
304 | 318 |
305 ClientSocket* next_; | 319 ClientSocket* next_; |
| 320 int flags_; |
306 }; | 321 }; |
307 | 322 |
308 | 323 |
309 // Event handler. | 324 // Event handler. |
310 class EventHandlerImplementation { | 325 class EventHandlerImplementation { |
311 public: | 326 public: |
312 EventHandlerImplementation(); | 327 EventHandlerImplementation(); |
313 virtual ~EventHandlerImplementation() {} | 328 virtual ~EventHandlerImplementation() {} |
314 | 329 |
315 void SendData(intptr_t id, Dart_Port dart_port, intptr_t data); | 330 void SendData(intptr_t id, Dart_Port dart_port, intptr_t data); |
(...skipping 14 matching lines...) Expand all Loading... |
330 private: | 345 private: |
331 ClientSocket* client_sockets_head_; | 346 ClientSocket* client_sockets_head_; |
332 | 347 |
333 int64_t timeout_; // Time for next timeout. | 348 int64_t timeout_; // Time for next timeout. |
334 Dart_Port timeout_port_; | 349 Dart_Port timeout_port_; |
335 HANDLE completion_port_; | 350 HANDLE completion_port_; |
336 }; | 351 }; |
337 | 352 |
338 | 353 |
339 #endif // BIN_EVENTHANDLER_WIN_H_ | 354 #endif // BIN_EVENTHANDLER_WIN_H_ |
OLD | NEW |