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_MACOS_H_ | 5 #ifndef BIN_EVENTHANDLER_MACOS_H_ |
6 #define BIN_EVENTHANDLER_MACOS_H_ | 6 #define BIN_EVENTHANDLER_MACOS_H_ |
7 | 7 |
8 | 8 |
9 typedef struct { | 9 class InterruptMessage { |
| 10 public: |
10 intptr_t id; | 11 intptr_t id; |
11 Dart_Port dart_port; | 12 Dart_Port dart_port; |
12 int64_t data; | 13 int64_t data; |
13 } InterruptMessage; | 14 }; |
14 | 15 |
15 | 16 |
16 typedef struct { | 17 class SocketData { |
17 Dart_Port dart_port; | 18 public: |
18 intptr_t mask; | 19 void FillPollEvents(struct pollfd* pollfds); |
19 } PortData; | 20 bool IsListeningSocket() { return (_mask & (1 << kListeningSocket)) != 0; } |
| 21 |
| 22 Dart_Port port() { return _port; } |
| 23 void set_port(Dart_Port port) { _port = port; } |
| 24 intptr_t mask() { return _mask; } |
| 25 void set_mask(intptr_t mask) { _mask = mask; } |
| 26 |
| 27 private: |
| 28 Dart_Port _port; |
| 29 intptr_t _mask; |
| 30 }; |
20 | 31 |
21 | 32 |
22 class EventHandlerImplementation { | 33 class EventHandlerImplementation { |
23 public: | 34 public: |
24 EventHandlerImplementation(); | 35 EventHandlerImplementation(); |
25 ~EventHandlerImplementation(); | 36 ~EventHandlerImplementation(); |
26 | 37 |
| 38 SocketData* GetSocketData(intptr_t fd); |
27 void SendData(intptr_t id, Dart_Port dart_port, intptr_t data); | 39 void SendData(intptr_t id, Dart_Port dart_port, intptr_t data); |
28 void StartEventHandler(); | 40 void StartEventHandler(); |
29 | 41 |
30 private: | 42 private: |
31 intptr_t GetTimeout(); | 43 intptr_t GetTimeout(); |
32 bool GetInterruptMessage(InterruptMessage* msg); | 44 bool GetInterruptMessage(InterruptMessage* msg); |
33 struct pollfd* GetPollFds(intptr_t* size); | 45 struct pollfd* GetPollFds(intptr_t* size); |
34 void RegisterFdWakeup(intptr_t id, Dart_Port dart_port, intptr_t data); | 46 void RegisterFdWakeup(intptr_t id, Dart_Port dart_port, intptr_t data); |
35 void UnregisterFdWakeup(intptr_t id); | 47 void UnregisterFdWakeup(intptr_t id); |
36 void CloseFd(intptr_t id); | 48 void CloseFd(intptr_t id); |
37 void UnregisterFd(intptr_t id); | 49 void UnregisterFd(intptr_t id); |
38 void HandleEvents(struct pollfd* pollfds, int pollfds_size, int result_size); | 50 void HandleEvents(struct pollfd* pollfds, int pollfds_size, int result_size); |
39 void HandleTimeout(); | 51 void HandleTimeout(); |
40 static void* Poll(void* args); | 52 static void* Poll(void* args); |
41 void WakeupHandler(intptr_t id, Dart_Port dart_port, int64_t data); | 53 void WakeupHandler(intptr_t id, Dart_Port dart_port, int64_t data); |
42 void HandleInterruptFd(); | 54 void HandleInterruptFd(); |
43 void SetPort(intptr_t fd, Dart_Port dart_port, intptr_t mask); | 55 void SetPort(intptr_t fd, Dart_Port dart_port, intptr_t mask); |
44 Dart_Port PortFor(intptr_t fd); | |
45 bool IsListeningSocket(intptr_t fd); | |
46 intptr_t GetPollEvents(struct pollfd* pollfd); | 56 intptr_t GetPollEvents(struct pollfd* pollfd); |
47 void SetPollEvents(struct pollfd* pollfds, intptr_t mask); | |
48 | 57 |
49 PortData* port_map_; | 58 SocketData* socket_map_; |
50 intptr_t port_map_entries_; | 59 intptr_t socket_map_entries_; |
51 intptr_t port_map_size_; | 60 intptr_t socket_map_size_; |
52 int64_t timeout_; // Time for next timeout. | 61 int64_t timeout_; // Time for next timeout. |
53 Dart_Port timeout_port_; | 62 Dart_Port timeout_port_; |
54 int interrupt_fds_[2]; | 63 int interrupt_fds_[2]; |
55 }; | 64 }; |
56 | 65 |
57 | 66 |
58 #endif // BIN_EVENTHANDLER_MACOS_H_ | 67 #endif // BIN_EVENTHANDLER_MACOS_H_ |
OLD | NEW |