eventmachine 1.0.0.beta.1-java → 1.0.0.beta.2-java

Sign up to get free protection for your applications and to get access to all the features.
Files changed (45) hide show
  1. data/Rakefile +7 -298
  2. data/eventmachine.gemspec +1 -1
  3. data/ext/cmain.cpp +0 -14
  4. data/ext/em.cpp +3 -36
  5. data/ext/em.h +2 -13
  6. data/ext/eventmachine.h +0 -1
  7. data/ext/extconf.rb +53 -46
  8. data/ext/project.h +0 -4
  9. data/ext/rubymain.cpp +0 -15
  10. data/lib/em/pure_ruby.rb +3 -2
  11. data/lib/em/version.rb +1 -1
  12. data/lib/eventmachine.rb +2 -0
  13. data/lib/jeventmachine.rb +1 -1
  14. data/tasks/doc.rake +30 -0
  15. data/tasks/package.rake +85 -0
  16. data/tasks/test.rake +6 -0
  17. metadata +184 -213
  18. data/ext/cplusplus.cpp +0 -202
  19. data/ext/emwin.cpp +0 -300
  20. data/ext/emwin.h +0 -94
  21. data/ext/epoll.cpp +0 -26
  22. data/ext/epoll.h +0 -25
  23. data/ext/eventmachine_cpp.h +0 -96
  24. data/ext/files.cpp +0 -94
  25. data/ext/files.h +0 -65
  26. data/ext/sigs.cpp +0 -89
  27. data/ext/sigs.h +0 -32
  28. data/java/src/com/rubyeventmachine/application/Application.java +0 -194
  29. data/java/src/com/rubyeventmachine/application/Connection.java +0 -74
  30. data/java/src/com/rubyeventmachine/application/ConnectionFactory.java +0 -37
  31. data/java/src/com/rubyeventmachine/application/DefaultConnectionFactory.java +0 -46
  32. data/java/src/com/rubyeventmachine/application/PeriodicTimer.java +0 -38
  33. data/java/src/com/rubyeventmachine/application/Timer.java +0 -54
  34. data/java/src/com/rubyeventmachine/tests/ApplicationTest.java +0 -109
  35. data/java/src/com/rubyeventmachine/tests/ConnectTest.java +0 -148
  36. data/java/src/com/rubyeventmachine/tests/EMTest.java +0 -80
  37. data/java/src/com/rubyeventmachine/tests/TestDatagrams.java +0 -53
  38. data/java/src/com/rubyeventmachine/tests/TestServers.java +0 -75
  39. data/java/src/com/rubyeventmachine/tests/TestTimers.java +0 -90
  40. data/lib/evma.rb +0 -32
  41. data/lib/evma/callback.rb +0 -32
  42. data/lib/evma/container.rb +0 -75
  43. data/lib/evma/factory.rb +0 -77
  44. data/lib/evma/protocol.rb +0 -87
  45. data/lib/evma/reactor.rb +0 -48
data/ext/cplusplus.cpp DELETED
@@ -1,202 +0,0 @@
1
- /*****************************************************************************
2
-
3
- $Id$
4
-
5
- File: cplusplus.cpp
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
- #include "project.h"
22
-
23
-
24
- namespace EM {
25
- static map<unsigned long, Eventable*> Eventables;
26
- static map<unsigned long, void(*)()> Timers;
27
- }
28
-
29
-
30
- /*******
31
- EM::Run
32
- *******/
33
-
34
- void EM::Run (void (*start_func)())
35
- {
36
- evma_set_epoll (1);
37
- evma_initialize_library ((EMCallback)EM::Callback);
38
- if (start_func)
39
- AddTimer (0, start_func);
40
- evma_run_machine();
41
- evma_release_library();
42
- }
43
-
44
- /************
45
- EM::AddTimer
46
- ************/
47
-
48
- void EM::AddTimer (int milliseconds, void (*func)())
49
- {
50
- if (func) {
51
- const unsigned long sig = evma_install_oneshot_timer (milliseconds);
52
- #ifndef HAVE_MAKE_PAIR
53
- Timers.insert (map<unsigned long, void(*)()>::value_type (sig, func));
54
- #else
55
- Timers.insert (make_pair (sig, func));
56
- #endif
57
- }
58
- }
59
-
60
-
61
- /***************
62
- EM::StopReactor
63
- ***************/
64
-
65
- void EM::StopReactor()
66
- {
67
- evma_stop_machine();
68
- }
69
-
70
-
71
- /********************
72
- EM::Acceptor::Accept
73
- ********************/
74
-
75
- void EM::Acceptor::Accept (const unsigned long signature)
76
- {
77
- Connection *c = MakeConnection();
78
- c->Signature = signature;
79
- #ifndef HAVE_MAKE_PAIR
80
- Eventables.insert (std::map<unsigned long,EM::Eventable*>::value_type (c->Signature, c));
81
- #else
82
- Eventables.insert (make_pair (c->Signature, c));
83
- #endif
84
- c->PostInit();
85
- }
86
-
87
- /************************
88
- EM::Connection::SendData
89
- ************************/
90
-
91
- void EM::Connection::SendData (const char *data)
92
- {
93
- if (data)
94
- SendData (data, strlen (data));
95
- }
96
-
97
-
98
- /************************
99
- EM::Connection::SendData
100
- ************************/
101
-
102
- void EM::Connection::SendData (const char *data, int length)
103
- {
104
- evma_send_data_to_connection (Signature, data, length);
105
- }
106
-
107
-
108
- /*********************
109
- EM::Connection::Close
110
- *********************/
111
-
112
- void EM::Connection::Close (bool afterWriting)
113
- {
114
- evma_close_connection (Signature, afterWriting);
115
- }
116
-
117
-
118
- /***************************
119
- EM::Connection::BindConnect
120
- ***************************/
121
-
122
- void EM::Connection::BindConnect (const char *bind_addr, int bind_port, const char *host, int port)
123
- {
124
- Signature = evma_connect_to_server (bind_addr, bind_port, host, port);
125
- #ifndef HAVE_MAKE_PAIR
126
- Eventables.insert (std::map<unsigned long,EM::Eventable*>::value_type (Signature, this));
127
- #else
128
- Eventables.insert (make_pair (Signature, this));
129
- #endif
130
- }
131
-
132
- /***********************
133
- EM::Connection::Connect
134
- ***********************/
135
-
136
- void EM::Connection::Connect (const char *host, int port)
137
- {
138
- this->BindConnect(NULL, 0, host, port);
139
- }
140
-
141
- /*******************
142
- EM::Acceptor::Start
143
- *******************/
144
-
145
- void EM::Acceptor::Start (const char *host, int port)
146
- {
147
- Signature = evma_create_tcp_server (host, port);
148
- #ifndef HAVE_MAKE_PAIR
149
- Eventables.insert (std::map<unsigned long,EM::Eventable*>::value_type (Signature, this));
150
- #else
151
- Eventables.insert (make_pair (Signature, this));
152
- #endif
153
- }
154
-
155
-
156
-
157
- /************
158
- EM::Callback
159
- ************/
160
-
161
- void EM::Callback (const unsigned long sig, int ev, const char *data, const unsigned long length)
162
- {
163
- EM::Eventable *e;
164
- void (*f)();
165
-
166
- switch (ev) {
167
- case EM_TIMER_FIRED:
168
- f = Timers [length]; // actually a binding
169
- if (f)
170
- (*f)();
171
- Timers.erase (length);
172
- break;
173
-
174
- case EM_CONNECTION_READ:
175
- e = EM::Eventables [sig];
176
- e->ReceiveData (data, length);
177
- break;
178
-
179
- case EM_CONNECTION_COMPLETED:
180
- e = EM::Eventables [sig];
181
- e->ConnectionCompleted();
182
- break;
183
-
184
- case EM_CONNECTION_ACCEPTED:
185
- e = EM::Eventables [sig];
186
- e->Accept (length); // actually a binding
187
- break;
188
-
189
- case EM_CONNECTION_UNBOUND:
190
- e = EM::Eventables [sig];
191
- e->Unbind();
192
- EM::Eventables.erase (sig);
193
- delete e;
194
- break;
195
-
196
- case EM_SSL_HANDSHAKE_COMPLETED:
197
- e = EM::Eventables [sig];
198
- e->SslHandshakeCompleted();
199
- break;
200
- }
201
- }
202
-
data/ext/emwin.cpp DELETED
@@ -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
-