eventmachine 0.12.10-x86-mswin32-60 → 1.0.0.beta.2-x86-mswin32-60

Sign up to get free protection for your applications and to get access to all the features.
Files changed (150) hide show
  1. data/.gitignore +2 -0
  2. data/Gemfile +1 -0
  3. data/README +80 -81
  4. data/Rakefile +7 -370
  5. data/docs/COPYING +60 -60
  6. data/docs/ChangeLog +211 -211
  7. data/docs/DEFERRABLES +246 -133
  8. data/docs/EPOLL +141 -141
  9. data/docs/GNU +281 -281
  10. data/docs/INSTALL +13 -13
  11. data/docs/KEYBOARD +42 -38
  12. data/docs/LEGAL +25 -25
  13. data/docs/LIGHTWEIGHT_CONCURRENCY +130 -70
  14. data/docs/PURE_RUBY +75 -75
  15. data/docs/RELEASE_NOTES +94 -94
  16. data/docs/SMTP +4 -2
  17. data/docs/SPAWNED_PROCESSES +148 -89
  18. data/docs/TODO +8 -8
  19. data/eventmachine.gemspec +19 -26
  20. data/examples/ex_channel.rb +42 -42
  21. data/examples/ex_queue.rb +2 -2
  22. data/examples/ex_tick_loop_array.rb +15 -0
  23. data/examples/ex_tick_loop_counter.rb +32 -0
  24. data/examples/helper.rb +1 -1
  25. data/ext/binder.cpp +0 -1
  26. data/ext/cmain.cpp +36 -25
  27. data/ext/ed.cpp +104 -113
  28. data/ext/ed.h +24 -30
  29. data/ext/em.cpp +349 -283
  30. data/ext/em.h +25 -29
  31. data/ext/eventmachine.h +5 -4
  32. data/ext/extconf.rb +58 -49
  33. data/ext/fastfilereader/extconf.rb +5 -3
  34. data/ext/fastfilereader/mapper.cpp +214 -214
  35. data/ext/fastfilereader/mapper.h +59 -59
  36. data/ext/fastfilereader/rubymain.cpp +127 -127
  37. data/ext/kb.cpp +1 -3
  38. data/ext/page.cpp +107 -107
  39. data/ext/page.h +51 -51
  40. data/ext/pipe.cpp +9 -11
  41. data/ext/project.h +12 -8
  42. data/ext/rubymain.cpp +138 -104
  43. data/java/.classpath +8 -8
  44. data/java/.project +17 -17
  45. data/java/src/com/rubyeventmachine/EmReactor.java +1 -0
  46. data/java/src/com/rubyeventmachine/EmReactorException.java +40 -40
  47. data/lib/em/buftok.rb +138 -138
  48. data/lib/em/callback.rb +25 -25
  49. data/lib/em/channel.rb +1 -1
  50. data/lib/em/connection.rb +6 -1
  51. data/lib/em/deferrable.rb +16 -2
  52. data/lib/em/file_watch.rb +53 -53
  53. data/lib/em/future.rb +61 -61
  54. data/lib/em/iterator.rb +270 -0
  55. data/lib/em/messages.rb +66 -66
  56. data/lib/em/process_watch.rb +43 -43
  57. data/lib/em/protocols.rb +1 -1
  58. data/lib/em/protocols/header_and_content.rb +138 -138
  59. data/lib/em/protocols/httpclient.rb +267 -262
  60. data/lib/em/protocols/line_protocol.rb +28 -0
  61. data/lib/em/protocols/memcache.rb +322 -322
  62. data/lib/em/protocols/postgres3.rb +247 -247
  63. data/lib/em/protocols/saslauth.rb +175 -175
  64. data/lib/em/protocols/smtpserver.rb +640 -547
  65. data/lib/em/protocols/stomp.rb +200 -200
  66. data/lib/em/protocols/tcptest.rb +52 -52
  67. data/lib/{pr_eventmachine.rb → em/pure_ruby.rb} +1013 -1022
  68. data/lib/em/queue.rb +1 -0
  69. data/lib/em/spawnable.rb +85 -85
  70. data/lib/em/streamer.rb +130 -130
  71. data/lib/em/tick_loop.rb +85 -0
  72. data/lib/em/timers.rb +2 -1
  73. data/lib/em/version.rb +1 -1
  74. data/lib/eventmachine.rb +40 -84
  75. data/lib/jeventmachine.rb +2 -1
  76. data/lib/rubyeventmachine.rb +2 -0
  77. data/setup.rb +1585 -1585
  78. data/tasks/doc.rake +30 -0
  79. data/tasks/package.rake +85 -0
  80. data/tasks/test.rake +6 -0
  81. data/tests/client.crt +31 -31
  82. data/tests/client.key +51 -51
  83. data/tests/test_attach.rb +13 -3
  84. data/tests/test_basic.rb +60 -95
  85. data/tests/test_channel.rb +3 -2
  86. data/tests/test_defer.rb +49 -47
  87. data/tests/test_deferrable.rb +35 -0
  88. data/tests/test_error_handler.rb +35 -35
  89. data/tests/test_errors.rb +82 -82
  90. data/tests/test_exc.rb +55 -55
  91. data/tests/test_file_watch.rb +49 -49
  92. data/tests/test_futures.rb +198 -198
  93. data/tests/test_handler_check.rb +36 -36
  94. data/tests/test_hc.rb +190 -218
  95. data/tests/test_httpclient.rb +227 -218
  96. data/tests/test_httpclient2.rb +3 -2
  97. data/tests/test_inactivity_timeout.rb +3 -3
  98. data/tests/test_kb.rb +60 -60
  99. data/tests/test_ltp.rb +13 -5
  100. data/tests/test_ltp2.rb +317 -317
  101. data/tests/test_next_tick.rb +1 -1
  102. data/tests/test_object_protocol.rb +36 -36
  103. data/tests/test_pending_connect_timeout.rb +2 -2
  104. data/tests/test_process_watch.rb +50 -48
  105. data/tests/test_proxy_connection.rb +52 -0
  106. data/tests/test_pure.rb +134 -125
  107. data/tests/test_queue.rb +44 -44
  108. data/tests/test_running.rb +42 -42
  109. data/tests/test_sasl.rb +72 -72
  110. data/tests/test_send_file.rb +251 -242
  111. data/tests/test_servers.rb +76 -76
  112. data/tests/test_smtpclient.rb +83 -83
  113. data/tests/test_smtpserver.rb +85 -85
  114. data/tests/test_spawn.rb +322 -322
  115. data/tests/test_ssl_methods.rb +49 -49
  116. data/tests/test_ssl_verify.rb +82 -82
  117. data/tests/test_tick_loop.rb +59 -0
  118. data/tests/test_timers.rb +13 -15
  119. data/tests/test_ud.rb +36 -36
  120. data/tests/testem.rb +31 -31
  121. metadata +66 -51
  122. data/ext/cplusplus.cpp +0 -202
  123. data/ext/emwin.cpp +0 -300
  124. data/ext/emwin.h +0 -94
  125. data/ext/epoll.cpp +0 -26
  126. data/ext/epoll.h +0 -25
  127. data/ext/eventmachine_cpp.h +0 -96
  128. data/ext/files.cpp +0 -94
  129. data/ext/files.h +0 -65
  130. data/ext/sigs.cpp +0 -89
  131. data/ext/sigs.h +0 -32
  132. data/java/src/com/rubyeventmachine/application/Application.java +0 -194
  133. data/java/src/com/rubyeventmachine/application/Connection.java +0 -74
  134. data/java/src/com/rubyeventmachine/application/ConnectionFactory.java +0 -37
  135. data/java/src/com/rubyeventmachine/application/DefaultConnectionFactory.java +0 -46
  136. data/java/src/com/rubyeventmachine/application/PeriodicTimer.java +0 -38
  137. data/java/src/com/rubyeventmachine/application/Timer.java +0 -54
  138. data/java/src/com/rubyeventmachine/tests/ApplicationTest.java +0 -109
  139. data/java/src/com/rubyeventmachine/tests/ConnectTest.java +0 -148
  140. data/java/src/com/rubyeventmachine/tests/EMTest.java +0 -80
  141. data/java/src/com/rubyeventmachine/tests/TestDatagrams.java +0 -53
  142. data/java/src/com/rubyeventmachine/tests/TestServers.java +0 -75
  143. data/java/src/com/rubyeventmachine/tests/TestTimers.java +0 -90
  144. data/lib/evma.rb +0 -32
  145. data/lib/evma/callback.rb +0 -32
  146. data/lib/evma/container.rb +0 -75
  147. data/lib/evma/factory.rb +0 -77
  148. data/lib/evma/protocol.rb +0 -87
  149. data/lib/evma/reactor.rb +0 -48
  150. data/web/whatis +0 -7
@@ -1,300 +0,0 @@
1
- /*****************************************************************************
2
-
3
- $Id$
4
-
5
- File: emwin.cpp
6
- Date: 05May06
7
-
8
- Copyright (C) 2006-07 by Francis Cianfrocca. All Rights Reserved.
9
- Gmail: blackhedd
10
-
11
- This program is free software; you can redistribute it and/or modify
12
- it under the terms of either: 1) the GNU General Public License
13
- as published by the Free Software Foundation; either version 2 of the
14
- License, or (at your option) any later version; or 2) Ruby's License.
15
-
16
- See the file COPYING for complete licensing information.
17
-
18
- *****************************************************************************/
19
-
20
-
21
- // THIS ENTIRE FILE IS FOR WINDOWS BUILDS ONLY
22
- // INCOMPLETE AND DISABLED FOR NOW.
23
- #ifdef xOS_WIN32
24
-
25
- #include "project.h"
26
-
27
-
28
- // Keep a global variable floating around
29
- // with the current loop time as set by the Event Machine.
30
- // This avoids the need for frequent expensive calls to time(NULL);
31
- time_t gCurrentLoopTime;
32
-
33
-
34
- /******************************
35
- EventMachine_t::EventMachine_t
36
- ******************************/
37
-
38
- EventMachine_t::EventMachine_t (void (*event_callback)(const char*, int, const char*, int)):
39
- EventCallback (event_callback),
40
- NextHeartbeatTime (0)
41
- {
42
- gTerminateSignalReceived = false;
43
- Iocp = NULL;
44
- }
45
-
46
-
47
- /*******************************
48
- EventMachine_t::~EventMachine_t
49
- *******************************/
50
-
51
- EventMachine_t::~EventMachine_t()
52
- {
53
- cerr << "EM __dt\n";
54
- if (Iocp)
55
- CloseHandle (Iocp);
56
- }
57
-
58
-
59
- /****************************
60
- EventMachine_t::ScheduleHalt
61
- ****************************/
62
-
63
- void EventMachine_t::ScheduleHalt()
64
- {
65
- /* This is how we stop the machine.
66
- * This can be called by clients. Signal handlers will probably
67
- * set the global flag.
68
- * For now this means there can only be one EventMachine ever running at a time.
69
- */
70
- gTerminateSignalReceived = true;
71
- }
72
-
73
-
74
-
75
- /*******************
76
- EventMachine_t::Run
77
- *******************/
78
-
79
- void EventMachine_t::Run()
80
- {
81
- HookControlC (true);
82
-
83
- Iocp = CreateIoCompletionPort (INVALID_HANDLE_VALUE, NULL, 0, 0);
84
- if (Iocp == NULL)
85
- throw std::runtime_error ("no completion port");
86
-
87
-
88
- DWORD nBytes, nCompletionKey;
89
- LPOVERLAPPED Overlapped;
90
-
91
- do {
92
- gCurrentLoopTime = time(NULL);
93
- // Have some kind of strategy that will dequeue maybe up to 10 completions
94
- // without running the timers as long as they are available immediately.
95
- // Otherwise in a busy server we're calling them every time through the loop.
96
- if (!_RunTimers())
97
- break;
98
- if (GetQueuedCompletionStatus (Iocp, &nBytes, &nCompletionKey, &Overlapped, 1000)) {
99
- }
100
- cerr << "+";
101
- } while (!gTerminateSignalReceived);
102
-
103
-
104
- /*
105
- while (true) {
106
- gCurrentLoopTime = time(NULL);
107
- if (!_RunTimers())
108
- break;
109
- _AddNewDescriptors();
110
- if (!_RunOnce())
111
- break;
112
- if (gTerminateSignalReceived)
113
- break;
114
- }
115
- */
116
-
117
- HookControlC (false);
118
- }
119
-
120
-
121
- /**************************
122
- EventMachine_t::_RunTimers
123
- **************************/
124
-
125
- bool EventMachine_t::_RunTimers()
126
- {
127
- // These are caller-defined timer handlers.
128
- // Return T/F to indicate whether we should continue the main loop.
129
- // We rely on the fact that multimaps sort by their keys to avoid
130
- // inspecting the whole list every time we come here.
131
- // Just keep inspecting and processing the list head until we hit
132
- // one that hasn't expired yet.
133
-
134
- while (true) {
135
- multimap<time_t,Timer_t>::iterator i = Timers.begin();
136
- if (i == Timers.end())
137
- break;
138
- if (i->first > gCurrentLoopTime)
139
- break;
140
- if (EventCallback)
141
- (*EventCallback) (NULL, EM_TIMER_FIRED, NULL, i->second.GetBinding());
142
- Timers.erase (i);
143
- }
144
- return true;
145
- }
146
-
147
-
148
- /***********************************
149
- EventMachine_t::InstallOneshotTimer
150
- ***********************************/
151
-
152
- const char *EventMachine_t::InstallOneshotTimer (int seconds)
153
- {
154
- if (Timers.size() > MaxOutstandingTimers)
155
- return false;
156
- // Don't use the global loop-time variable here, because we might
157
- // get called before the main event machine is running.
158
-
159
- Timer_t t;
160
- Timers.insert (make_pair (time(NULL) + seconds, t));
161
- return t.GetBinding();
162
- }
163
-
164
-
165
- /**********************************
166
- EventMachine_t::OpenDatagramSocket
167
- **********************************/
168
-
169
- const char *EventMachine_t::OpenDatagramSocket (const char *address, int port)
170
- {
171
- cerr << "OPEN DATAGRAM SOCKET\n";
172
- return "Unimplemented";
173
- }
174
-
175
-
176
- /*******************************
177
- EventMachine_t::CreateTcpServer
178
- *******************************/
179
-
180
- const char *EventMachine_t::CreateTcpServer (const char *server, int port)
181
- {
182
- /* Create a TCP-acceptor (server) socket and add it to the event machine.
183
- * Return the binding of the new acceptor to the caller.
184
- * This binding will be referenced when the new acceptor sends events
185
- * to indicate accepted connections.
186
- */
187
-
188
- const char *output_binding = NULL;
189
-
190
- struct sockaddr_in sin;
191
-
192
- SOCKET sd_accept = socket (AF_INET, SOCK_STREAM, 0);
193
- if (sd_accept == INVALID_SOCKET) {
194
- goto fail;
195
- }
196
-
197
- memset (&sin, 0, sizeof(sin));
198
- sin.sin_family = AF_INET;
199
- sin.sin_addr.s_addr = INADDR_ANY;
200
- sin.sin_port = htons (port);
201
-
202
- if (server && *server) {
203
- sin.sin_addr.s_addr = inet_addr (server);
204
- if (sin.sin_addr.s_addr == INADDR_NONE) {
205
- hostent *hp = gethostbyname (server);
206
- if (hp == NULL) {
207
- //__warning ("hostname not resolved: ", server);
208
- goto fail;
209
- }
210
- sin.sin_addr.s_addr = ((in_addr*)(hp->h_addr))->s_addr;
211
- }
212
- }
213
-
214
-
215
- // No need to set reuseaddr on Windows.
216
-
217
-
218
- if (bind (sd_accept, (struct sockaddr*)&sin, sizeof(sin))) {
219
- //__warning ("binding failed");
220
- goto fail;
221
- }
222
-
223
- if (listen (sd_accept, 100)) {
224
- //__warning ("listen failed");
225
- goto fail;
226
- }
227
-
228
- { // Looking good.
229
- AcceptorDescriptor *ad = new AcceptorDescriptor (this, sd_accept);
230
- if (!ad)
231
- throw std::runtime_error ("unable to allocate acceptor");
232
- Add (ad);
233
- output_binding = ad->GetBinding();
234
-
235
- CreateIoCompletionPort ((HANDLE)sd_accept, Iocp, NULL, 0);
236
- SOCKET sd = socket (AF_INET, SOCK_STREAM, 0);
237
- CreateIoCompletionPort ((HANDLE)sd, Iocp, NULL, 0);
238
- AcceptEx (sd_accept, sd,
239
- }
240
-
241
- return output_binding;
242
-
243
- fail:
244
- if (sd_accept != INVALID_SOCKET)
245
- closesocket (sd_accept);
246
- return NULL;
247
- }
248
-
249
-
250
- /*******************************
251
- EventMachine_t::ConnectToServer
252
- *******************************/
253
-
254
- const char *EventMachine_t::ConnectToServer (const char *server, int port)
255
- {
256
- if (!server || !*server || !port)
257
- return NULL;
258
-
259
- sockaddr_in pin;
260
- unsigned long HostAddr;
261
-
262
- HostAddr = inet_addr (server);
263
- if (HostAddr == INADDR_NONE) {
264
- hostent *hp = gethostbyname (server);
265
- if (!hp)
266
- return NULL;
267
- HostAddr = ((in_addr*)(hp->h_addr))->s_addr;
268
- }
269
-
270
- memset (&pin, 0, sizeof(pin));
271
- pin.sin_family = AF_INET;
272
- pin.sin_addr.s_addr = HostAddr;
273
- pin.sin_port = htons (port);
274
-
275
- int sd = socket (AF_INET, SOCK_STREAM, 0);
276
- if (sd == INVALID_SOCKET)
277
- return NULL;
278
-
279
-
280
- LPOVERLAPPED olap = (LPOVERLAPPED) calloc (1, sizeof (OVERLAPPED));
281
- cerr << "I'm dying now\n";
282
- throw runtime_error ("UNIMPLEMENTED!!!\n");
283
-
284
- }
285
-
286
-
287
-
288
- /*******************
289
- EventMachine_t::Add
290
- *******************/
291
-
292
- void EventMachine_t::Add (EventableDescriptor *ed)
293
- {
294
- cerr << "ADD\n";
295
- }
296
-
297
-
298
-
299
- #endif // OS_WIN32
300
-
@@ -1,94 +0,0 @@
1
- /*****************************************************************************
2
-
3
- $Id$
4
-
5
- File: emwin.h
6
- Date: 05May06
7
-
8
- Copyright (C) 2006-07 by Francis Cianfrocca. All Rights Reserved.
9
- Gmail: blackhedd
10
-
11
- This program is free software; you can redistribute it and/or modify
12
- it under the terms of either: 1) the GNU General Public License
13
- as published by the Free Software Foundation; either version 2 of the
14
- License, or (at your option) any later version; or 2) Ruby's License.
15
-
16
- See the file COPYING for complete licensing information.
17
-
18
- *****************************************************************************/
19
-
20
-
21
- // THIS ENTIRE FILE IS FOR WINDOWS BUILDS ONLY.
22
- // INCOMPLETE AND DISABLED FOR NOW.
23
- #ifdef xOS_WIN32
24
-
25
- #ifndef __EventMachine__H_
26
- #define __EventMachine__H_
27
-
28
-
29
- extern time_t gCurrentLoopTime;
30
-
31
- class EventableDescriptor;
32
-
33
-
34
- /********************
35
- class EventMachine_t
36
- ********************/
37
-
38
- class EventMachine_t
39
- {
40
- public:
41
- EventMachine_t (void(*event_callback)(const char*, int, const char*, int));
42
- virtual ~EventMachine_t();
43
-
44
- void Run();
45
- void ScheduleHalt();
46
- const char *InstallOneshotTimer (int);
47
- const char *ConnectToServer (const char *, int);
48
- const char *CreateTcpServer (const char *, int);
49
- const char *OpenDatagramSocket (const char *, int);
50
-
51
- void Add (EventableDescriptor*);
52
-
53
- public:
54
- enum { // Event names
55
- TIMER_FIRED = 100,
56
- CONNECTION_READ = 101,
57
- CONNECTION_UNBOUND = 102,
58
- CONNECTION_ACCEPTED = 103,
59
- CONNECTION_COMPLETED = 104,
60
- LOOPBREAK_SIGNAL = 105
61
- };
62
-
63
- private:
64
- HANDLE Iocp;
65
-
66
- private:
67
- bool _RunOnce();
68
- bool _RunTimers();
69
- void _AddNewDescriptors();
70
-
71
- private:
72
- enum {
73
- MaxOutstandingTimers = 40,
74
- HeartbeatInterval = 2
75
- };
76
- void (*EventCallback)(const char*, int, const char*, int);
77
-
78
- class Timer_t: public Bindable_t {
79
- };
80
-
81
- multimap<time_t, Timer_t> Timers;
82
- vector<EventableDescriptor*> Descriptors;
83
- vector<EventableDescriptor*> NewDescriptors;
84
-
85
- time_t NextHeartbeatTime;
86
- };
87
-
88
-
89
-
90
-
91
- #endif // __EventMachine__H_
92
-
93
- #endif // OS_WIN32
94
-
@@ -1,26 +0,0 @@
1
- /*****************************************************************************
2
-
3
- $Id$
4
-
5
- File: epoll.cpp
6
- Date: 06Jun07
7
-
8
- Copyright (C) 2006-07 by Francis Cianfrocca. All Rights Reserved.
9
- Gmail: blackhedd
10
-
11
- This program is free software; you can redistribute it and/or modify
12
- it under the terms of either: 1) the GNU General Public License
13
- as published by the Free Software Foundation; either version 2 of the
14
- License, or (at your option) any later version; or 2) Ruby's License.
15
-
16
- See the file COPYING for complete licensing information.
17
-
18
- *****************************************************************************/
19
-
20
-
21
- #ifdef HAVE_EPOLL
22
-
23
- #include "project.h"
24
-
25
- #endif // HAVE_EPOLL
26
-
@@ -1,25 +0,0 @@
1
- /*****************************************************************************
2
-
3
- $Id$
4
-
5
- File: epoll.h
6
- Date: 06Jun07
7
-
8
- Copyright (C) 2006-07 by Francis Cianfrocca. All Rights Reserved.
9
- Gmail: blackhedd
10
-
11
- This program is free software; you can redistribute it and/or modify
12
- it under the terms of either: 1) the GNU General Public License
13
- as published by the Free Software Foundation; either version 2 of the
14
- License, or (at your option) any later version; or 2) Ruby's License.
15
-
16
- See the file COPYING for complete licensing information.
17
-
18
- *****************************************************************************/
19
-
20
-
21
- #ifdef HAVE_EPOLL
22
-
23
-
24
- #endif // HAVE_EPOLL
25
-
@@ -1,96 +0,0 @@
1
- /*****************************************************************************
2
-
3
- $Id$
4
-
5
- File: eventmachine_cpp.h
6
- Date: 27Jul07
7
-
8
- Copyright (C) 2006-07 by Francis Cianfrocca. All Rights Reserved.
9
- Gmail: blackhedd
10
-
11
- This program is free software; you can redistribute it and/or modify
12
- it under the terms of either: 1) the GNU General Public License
13
- as published by the Free Software Foundation; either version 2 of the
14
- License, or (at your option) any later version; or 2) Ruby's License.
15
-
16
- See the file COPYING for complete licensing information.
17
-
18
- *****************************************************************************/
19
-
20
-
21
- #ifndef __EVMA_EventmachineCpp__H_
22
- #define __EVMA_EventmachineCpp__H_
23
-
24
-
25
- // This material is only for directly integrating EM into C++ programs.
26
-
27
- namespace EM {
28
-
29
- void Callback (const unsigned long sig, int event, const char *data, const unsigned long length);
30
- void Run (void(*)(void));
31
- void AddTimer (int, void(*)());
32
- void StopReactor();
33
-
34
- /***************
35
- class Eventable
36
- ***************/
37
-
38
- class Eventable {
39
- public:
40
- Eventable() {}
41
- virtual ~Eventable() {}
42
-
43
- unsigned long Signature;
44
-
45
- // Called by the framework
46
- virtual void ReceiveData (const char *data, int length) {}
47
- virtual void ConnectionCompleted() {}
48
- virtual void Accept (const unsigned long) {}
49
- virtual void Unbind() {}
50
- virtual void PostInit() {}
51
- virtual void SslHandshakeCompleted() {}
52
-
53
- void StopReactor() {EM::StopReactor();}
54
- };
55
-
56
- /****************
57
- class Connection
58
- ****************/
59
-
60
- class Connection: public Eventable {
61
- public:
62
- Connection() {}
63
- virtual ~Connection() {}
64
-
65
- virtual void Connect (const char*, int);
66
- virtual void BindConnect (const char *, int, const char*, int);
67
-
68
- void SendData (const char *data);
69
- void SendData (const char *data, int length);
70
- void Close (bool afterWriting);
71
- };
72
-
73
-
74
- /**************
75
- class Acceptor
76
- **************/
77
-
78
- class Acceptor: public Eventable {
79
- public:
80
- Acceptor() {PostInit();}
81
- virtual ~Acceptor() {}
82
-
83
- void Start (const char*, int);
84
- void Accept (const unsigned long);
85
-
86
- virtual Connection *MakeConnection() {return new Connection();}
87
- };
88
-
89
-
90
- };
91
-
92
-
93
-
94
-
95
-
96
- #endif // __EVMA_EventmachineCpp__H_