eventmachine 1.0.0.beta.1-java → 1.0.0.beta.2-java
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- data/Rakefile +7 -298
- data/eventmachine.gemspec +1 -1
- data/ext/cmain.cpp +0 -14
- data/ext/em.cpp +3 -36
- data/ext/em.h +2 -13
- data/ext/eventmachine.h +0 -1
- data/ext/extconf.rb +53 -46
- data/ext/project.h +0 -4
- data/ext/rubymain.cpp +0 -15
- data/lib/em/pure_ruby.rb +3 -2
- data/lib/em/version.rb +1 -1
- data/lib/eventmachine.rb +2 -0
- data/lib/jeventmachine.rb +1 -1
- data/tasks/doc.rake +30 -0
- data/tasks/package.rake +85 -0
- data/tasks/test.rake +6 -0
- metadata +184 -213
- data/ext/cplusplus.cpp +0 -202
- data/ext/emwin.cpp +0 -300
- data/ext/emwin.h +0 -94
- data/ext/epoll.cpp +0 -26
- data/ext/epoll.h +0 -25
- data/ext/eventmachine_cpp.h +0 -96
- data/ext/files.cpp +0 -94
- data/ext/files.h +0 -65
- data/ext/sigs.cpp +0 -89
- data/ext/sigs.h +0 -32
- data/java/src/com/rubyeventmachine/application/Application.java +0 -194
- data/java/src/com/rubyeventmachine/application/Connection.java +0 -74
- data/java/src/com/rubyeventmachine/application/ConnectionFactory.java +0 -37
- data/java/src/com/rubyeventmachine/application/DefaultConnectionFactory.java +0 -46
- data/java/src/com/rubyeventmachine/application/PeriodicTimer.java +0 -38
- data/java/src/com/rubyeventmachine/application/Timer.java +0 -54
- data/java/src/com/rubyeventmachine/tests/ApplicationTest.java +0 -109
- data/java/src/com/rubyeventmachine/tests/ConnectTest.java +0 -148
- data/java/src/com/rubyeventmachine/tests/EMTest.java +0 -80
- data/java/src/com/rubyeventmachine/tests/TestDatagrams.java +0 -53
- data/java/src/com/rubyeventmachine/tests/TestServers.java +0 -75
- data/java/src/com/rubyeventmachine/tests/TestTimers.java +0 -90
- data/lib/evma.rb +0 -32
- data/lib/evma/callback.rb +0 -32
- data/lib/evma/container.rb +0 -75
- data/lib/evma/factory.rb +0 -77
- data/lib/evma/protocol.rb +0 -87
- data/lib/evma/reactor.rb +0 -48
data/ext/sigs.h
DELETED
@@ -1,32 +0,0 @@
|
|
1
|
-
/*****************************************************************************
|
2
|
-
|
3
|
-
$Id$
|
4
|
-
|
5
|
-
File: sigs.h
|
6
|
-
Date: 06Apr06
|
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 __Signals__H_
|
22
|
-
#define __Signals__H_
|
23
|
-
|
24
|
-
void InstallSignalHandlers();
|
25
|
-
extern bool gTerminateSignalReceived;
|
26
|
-
|
27
|
-
#ifdef OS_WIN32
|
28
|
-
void HookControlC (bool);
|
29
|
-
#endif
|
30
|
-
|
31
|
-
#endif // __Signals__H_
|
32
|
-
|
@@ -1,194 +0,0 @@
|
|
1
|
-
/**
|
2
|
-
* $Id$
|
3
|
-
*
|
4
|
-
* Author:: Francis Cianfrocca (gmail: blackhedd)
|
5
|
-
* Homepage:: http://rubyeventmachine.com
|
6
|
-
* Date:: 15 Jul 2007
|
7
|
-
*
|
8
|
-
* See EventMachine and EventMachine::Connection for documentation and
|
9
|
-
* usage examples.
|
10
|
-
*
|
11
|
-
*
|
12
|
-
*----------------------------------------------------------------------------
|
13
|
-
*
|
14
|
-
* Copyright (C) 2006-07 by Francis Cianfrocca. All Rights Reserved.
|
15
|
-
* Gmail: blackhedd
|
16
|
-
*
|
17
|
-
* This program is free software; you can redistribute it and/or modify
|
18
|
-
* it under the terms of either: 1) the GNU General Public License
|
19
|
-
* as published by the Free Software Foundation; either version 2 of the
|
20
|
-
* License, or (at your option) any later version; or 2) Ruby's License.
|
21
|
-
*
|
22
|
-
* See the file COPYING for complete licensing information.
|
23
|
-
*
|
24
|
-
*---------------------------------------------------------------------------
|
25
|
-
*
|
26
|
-
*
|
27
|
-
*/
|
28
|
-
|
29
|
-
/**
|
30
|
-
*
|
31
|
-
*/
|
32
|
-
package com.rubyeventmachine.application;
|
33
|
-
|
34
|
-
import java.nio.ByteBuffer;
|
35
|
-
import java.nio.channels.*;
|
36
|
-
import java.util.*;
|
37
|
-
import java.io.*;
|
38
|
-
import java.net.*;
|
39
|
-
import java.net.SocketAddress;
|
40
|
-
|
41
|
-
import com.rubyeventmachine.*;
|
42
|
-
|
43
|
-
/**
|
44
|
-
* @author francis
|
45
|
-
*
|
46
|
-
*/
|
47
|
-
public class Application {
|
48
|
-
|
49
|
-
|
50
|
-
public class Reactor extends EmReactor {
|
51
|
-
|
52
|
-
private Application application;
|
53
|
-
private TreeMap<Long, Timer> timers;
|
54
|
-
private TreeMap<Long, Connection> connections;
|
55
|
-
private TreeMap<Long, ConnectionFactory> acceptors;
|
56
|
-
/**
|
57
|
-
*
|
58
|
-
*/
|
59
|
-
public Reactor (Application app) {
|
60
|
-
application = app;
|
61
|
-
timers = new TreeMap<Long, Timer>();
|
62
|
-
connections = new TreeMap<Long, Connection>();
|
63
|
-
acceptors = new TreeMap<Long, ConnectionFactory>();
|
64
|
-
}
|
65
|
-
|
66
|
-
|
67
|
-
public void eventCallback (long sig, int eventType, ByteBuffer data, long data2) {
|
68
|
-
if (eventType == EM_TIMER_FIRED) {
|
69
|
-
Timer r = timers.remove(data2);
|
70
|
-
if (r != null)
|
71
|
-
r._fire();
|
72
|
-
else
|
73
|
-
throw new RuntimeException ("unable to run unknown timer");
|
74
|
-
}
|
75
|
-
else if (eventType == EM_CONNECTION_COMPLETED) {
|
76
|
-
Connection c = connections.get(sig);
|
77
|
-
if (c != null) {
|
78
|
-
c.connectionCompleted();
|
79
|
-
}
|
80
|
-
else
|
81
|
-
throw new RuntimeException ("connection completed to unknown object");
|
82
|
-
|
83
|
-
}
|
84
|
-
else if (eventType == EM_CONNECTION_UNBOUND) {
|
85
|
-
Connection c = connections.get(sig);
|
86
|
-
if (c != null) {
|
87
|
-
c.unbind();
|
88
|
-
}
|
89
|
-
else
|
90
|
-
throw new RuntimeException ("unbind received on unknown object");
|
91
|
-
}
|
92
|
-
else if (eventType == EM_CONNECTION_ACCEPTED) {
|
93
|
-
ConnectionFactory f = acceptors.get(sig);
|
94
|
-
if (f != null) {
|
95
|
-
Connection c = f.connection();
|
96
|
-
c.signature = data2;
|
97
|
-
c.application = application;
|
98
|
-
connections.put(c.signature, c);
|
99
|
-
c.postInit();
|
100
|
-
//System.out.println (sig+"..."+new String(data.array()));
|
101
|
-
}
|
102
|
-
else
|
103
|
-
throw new RuntimeException ("received connection on unknown acceptor");
|
104
|
-
}
|
105
|
-
else if (eventType == EM_CONNECTION_READ) {
|
106
|
-
Connection c = connections.get(sig);
|
107
|
-
if (c != null) {
|
108
|
-
c.receiveData(data);
|
109
|
-
}
|
110
|
-
else throw new RuntimeException ("received data on unknown object");
|
111
|
-
}
|
112
|
-
else {
|
113
|
-
System.out.println ("unknown event type: " + eventType);
|
114
|
-
}
|
115
|
-
}
|
116
|
-
}
|
117
|
-
|
118
|
-
|
119
|
-
Reactor reactor;
|
120
|
-
|
121
|
-
public Application() {
|
122
|
-
reactor = new Reactor (this);
|
123
|
-
}
|
124
|
-
public void addTimer (double seconds, Timer t) {
|
125
|
-
t.application = this;
|
126
|
-
t.interval = seconds;
|
127
|
-
long s = reactor.installOneshotTimer ((int)(seconds * 1000));
|
128
|
-
reactor.timers.put(s, t);
|
129
|
-
|
130
|
-
}
|
131
|
-
|
132
|
-
public void bindConnect (String bindAddr, int bindPort, String host, int port, Connection c) {
|
133
|
-
long s = reactor.connectTcpServer(bindAddr, bindPort, host, port);
|
134
|
-
c.application = this;
|
135
|
-
c.signature = s;
|
136
|
-
reactor.connections.put(s, c);
|
137
|
-
c.postInit();
|
138
|
-
}
|
139
|
-
|
140
|
-
public void connect (String host, int port, Connection c) {
|
141
|
-
bindConnect(null, 0, host, port, c);
|
142
|
-
}
|
143
|
-
|
144
|
-
public void startServer (SocketAddress sa, ConnectionFactory f) throws EmReactorException {
|
145
|
-
long s = reactor.startTcpServer(sa);
|
146
|
-
reactor.acceptors.put(s, f);
|
147
|
-
}
|
148
|
-
|
149
|
-
public void stop() {
|
150
|
-
reactor.stop();
|
151
|
-
}
|
152
|
-
public void run() {
|
153
|
-
reactor.run();
|
154
|
-
}
|
155
|
-
public void run (final Runnable r) {
|
156
|
-
addTimer(0, new Timer() {
|
157
|
-
public void fire() {
|
158
|
-
r.run();
|
159
|
-
}
|
160
|
-
});
|
161
|
-
run();
|
162
|
-
}
|
163
|
-
|
164
|
-
public void sendData (long sig, ByteBuffer bb) {
|
165
|
-
try {
|
166
|
-
reactor.sendData(sig, bb);
|
167
|
-
} catch (IOException e) {}
|
168
|
-
}
|
169
|
-
|
170
|
-
public void sendDatagram (long sig, ByteBuffer bb, InetSocketAddress target) {
|
171
|
-
reactor.sendDatagram(sig, bb, target.getHostName(), target.getPort());
|
172
|
-
}
|
173
|
-
|
174
|
-
public void closeConnection (long sig, boolean afterWriting) {
|
175
|
-
reactor.closeConnection(sig, afterWriting);
|
176
|
-
}
|
177
|
-
|
178
|
-
public void openDatagramSocket (Connection c) {
|
179
|
-
openDatagramSocket (new InetSocketAddress ("0.0.0.0", 0), c);
|
180
|
-
}
|
181
|
-
public void openDatagramSocket (InetSocketAddress addr, Connection c) {
|
182
|
-
try {
|
183
|
-
long s = reactor.openUdpSocket(addr);
|
184
|
-
c.application = this;
|
185
|
-
c.signature = s;
|
186
|
-
reactor.connections.put(s, c);
|
187
|
-
c.postInit();
|
188
|
-
} catch (ClosedChannelException e) {
|
189
|
-
} catch (IOException e) {
|
190
|
-
System.out.println ("Bad Datagram socket "+e+" "+addr);
|
191
|
-
/* TODO, can't catch this here, because it can happen on a bad address */
|
192
|
-
}
|
193
|
-
}
|
194
|
-
}
|
@@ -1,74 +0,0 @@
|
|
1
|
-
/**
|
2
|
-
* $Id$
|
3
|
-
*
|
4
|
-
* Author:: Francis Cianfrocca (gmail: blackhedd)
|
5
|
-
* Homepage:: http://rubyeventmachine.com
|
6
|
-
* Date:: 15 Jul 2007
|
7
|
-
*
|
8
|
-
* See EventMachine and EventMachine::Connection for documentation and
|
9
|
-
* usage examples.
|
10
|
-
*
|
11
|
-
*
|
12
|
-
*----------------------------------------------------------------------------
|
13
|
-
*
|
14
|
-
* Copyright (C) 2006-07 by Francis Cianfrocca. All Rights Reserved.
|
15
|
-
* Gmail: blackhedd
|
16
|
-
*
|
17
|
-
* This program is free software; you can redistribute it and/or modify
|
18
|
-
* it under the terms of either: 1) the GNU General Public License
|
19
|
-
* as published by the Free Software Foundation; either version 2 of the
|
20
|
-
* License, or (at your option) any later version; or 2) Ruby's License.
|
21
|
-
*
|
22
|
-
* See the file COPYING for complete licensing information.
|
23
|
-
*
|
24
|
-
*---------------------------------------------------------------------------
|
25
|
-
*
|
26
|
-
*
|
27
|
-
*/
|
28
|
-
|
29
|
-
|
30
|
-
|
31
|
-
package com.rubyeventmachine.application;
|
32
|
-
|
33
|
-
//import java.io.*;
|
34
|
-
import java.nio.*;
|
35
|
-
import java.net.*;
|
36
|
-
//import java.nio.channels.*;
|
37
|
-
|
38
|
-
public class Connection {
|
39
|
-
|
40
|
-
public Application application;
|
41
|
-
public long signature;
|
42
|
-
|
43
|
-
public void postInit() {}
|
44
|
-
public void connectionCompleted() {}
|
45
|
-
public void unbind() {}
|
46
|
-
public void receiveData (ByteBuffer bytebuffer) {}
|
47
|
-
|
48
|
-
|
49
|
-
/**
|
50
|
-
* Called by user code.
|
51
|
-
* @param bytebuffer
|
52
|
-
*/
|
53
|
-
public void sendData (ByteBuffer b) {
|
54
|
-
application.sendData(signature, b);
|
55
|
-
}
|
56
|
-
|
57
|
-
/**
|
58
|
-
* This is called by user code.
|
59
|
-
* TODO: don't expose the exception here.
|
60
|
-
*/
|
61
|
-
public void close() {
|
62
|
-
application.closeConnection(signature, false);
|
63
|
-
}
|
64
|
-
/**
|
65
|
-
* This is called by user code/
|
66
|
-
*/
|
67
|
-
public void closeAfterWriting() {
|
68
|
-
application.closeConnection(signature, true);
|
69
|
-
}
|
70
|
-
|
71
|
-
public void sendDatagram (ByteBuffer bb, InetSocketAddress addr) {
|
72
|
-
application.sendDatagram (signature, bb, addr);
|
73
|
-
}
|
74
|
-
}
|
@@ -1,37 +0,0 @@
|
|
1
|
-
/**
|
2
|
-
* $Id$
|
3
|
-
*
|
4
|
-
* Author:: Francis Cianfrocca (gmail: blackhedd)
|
5
|
-
* Homepage:: http://rubyeventmachine.com
|
6
|
-
* Date:: 15 Jul 2007
|
7
|
-
*
|
8
|
-
* See EventMachine and EventMachine::Connection for documentation and
|
9
|
-
* usage examples.
|
10
|
-
*
|
11
|
-
*
|
12
|
-
*----------------------------------------------------------------------------
|
13
|
-
*
|
14
|
-
* Copyright (C) 2006-07 by Francis Cianfrocca. All Rights Reserved.
|
15
|
-
* Gmail: blackhedd
|
16
|
-
*
|
17
|
-
* This program is free software; you can redistribute it and/or modify
|
18
|
-
* it under the terms of either: 1) the GNU General Public License
|
19
|
-
* as published by the Free Software Foundation; either version 2 of the
|
20
|
-
* License, or (at your option) any later version; or 2) Ruby's License.
|
21
|
-
*
|
22
|
-
* See the file COPYING for complete licensing information.
|
23
|
-
*
|
24
|
-
*---------------------------------------------------------------------------
|
25
|
-
*
|
26
|
-
*
|
27
|
-
*/
|
28
|
-
|
29
|
-
|
30
|
-
|
31
|
-
package com.rubyeventmachine.application;
|
32
|
-
|
33
|
-
//import com.rubyeventmachine.*;
|
34
|
-
|
35
|
-
public interface ConnectionFactory {
|
36
|
-
public Connection connection();
|
37
|
-
}
|
@@ -1,46 +0,0 @@
|
|
1
|
-
/**
|
2
|
-
* $Id$
|
3
|
-
*
|
4
|
-
* Author:: Francis Cianfrocca (gmail: blackhedd)
|
5
|
-
* Homepage:: http://rubyeventmachine.com
|
6
|
-
* Date:: 15 Jul 2007
|
7
|
-
*
|
8
|
-
* See EventMachine and EventMachine::Connection for documentation and
|
9
|
-
* usage examples.
|
10
|
-
*
|
11
|
-
*
|
12
|
-
*----------------------------------------------------------------------------
|
13
|
-
*
|
14
|
-
* Copyright (C) 2006-07 by Francis Cianfrocca. All Rights Reserved.
|
15
|
-
* Gmail: blackhedd
|
16
|
-
*
|
17
|
-
* This program is free software; you can redistribute it and/or modify
|
18
|
-
* it under the terms of either: 1) the GNU General Public License
|
19
|
-
* as published by the Free Software Foundation; either version 2 of the
|
20
|
-
* License, or (at your option) any later version; or 2) Ruby's License.
|
21
|
-
*
|
22
|
-
* See the file COPYING for complete licensing information.
|
23
|
-
*
|
24
|
-
*---------------------------------------------------------------------------
|
25
|
-
*
|
26
|
-
*
|
27
|
-
*/
|
28
|
-
|
29
|
-
|
30
|
-
|
31
|
-
package com.rubyeventmachine.application;
|
32
|
-
|
33
|
-
import com.rubyeventmachine.application.ConnectionFactory;
|
34
|
-
|
35
|
-
public class DefaultConnectionFactory implements ConnectionFactory {
|
36
|
-
|
37
|
-
/**
|
38
|
-
* Convenience class. Its connection() method returns an instance of class
|
39
|
-
* Connection, which is usually overridden. This class is probably most
|
40
|
-
* useful for unit testing.
|
41
|
-
*/
|
42
|
-
public Connection connection() {
|
43
|
-
return new Connection();
|
44
|
-
}
|
45
|
-
|
46
|
-
}
|
@@ -1,38 +0,0 @@
|
|
1
|
-
/**
|
2
|
-
* $Id$
|
3
|
-
*
|
4
|
-
* Author:: Francis Cianfrocca (gmail: blackhedd)
|
5
|
-
* Homepage:: http://rubyeventmachine.com
|
6
|
-
* Date:: 15 Jul 2007
|
7
|
-
*
|
8
|
-
* See EventMachine and EventMachine::Connection for documentation and
|
9
|
-
* usage examples.
|
10
|
-
*
|
11
|
-
*
|
12
|
-
*----------------------------------------------------------------------------
|
13
|
-
*
|
14
|
-
* Copyright (C) 2006-07 by Francis Cianfrocca. All Rights Reserved.
|
15
|
-
* Gmail: blackhedd
|
16
|
-
*
|
17
|
-
* This program is free software; you can redistribute it and/or modify
|
18
|
-
* it under the terms of either: 1) the GNU General Public License
|
19
|
-
* as published by the Free Software Foundation; either version 2 of the
|
20
|
-
* License, or (at your option) any later version; or 2) Ruby's License.
|
21
|
-
*
|
22
|
-
* See the file COPYING for complete licensing information.
|
23
|
-
*
|
24
|
-
*---------------------------------------------------------------------------
|
25
|
-
*
|
26
|
-
*
|
27
|
-
*/
|
28
|
-
|
29
|
-
|
30
|
-
package com.rubyeventmachine.application;
|
31
|
-
|
32
|
-
public class PeriodicTimer extends Timer {
|
33
|
-
|
34
|
-
public void _fire() {
|
35
|
-
fire();
|
36
|
-
application.addTimer(interval, this);
|
37
|
-
}
|
38
|
-
}
|
@@ -1,54 +0,0 @@
|
|
1
|
-
/**
|
2
|
-
* $Id$
|
3
|
-
*
|
4
|
-
* Author:: Francis Cianfrocca (gmail: blackhedd)
|
5
|
-
* Homepage:: http://rubyeventmachine.com
|
6
|
-
* Date:: 15 Jul 2007
|
7
|
-
*
|
8
|
-
* See EventMachine and EventMachine::Connection for documentation and
|
9
|
-
* usage examples.
|
10
|
-
*
|
11
|
-
*
|
12
|
-
*----------------------------------------------------------------------------
|
13
|
-
*
|
14
|
-
* Copyright (C) 2006-07 by Francis Cianfrocca. All Rights Reserved.
|
15
|
-
* Gmail: blackhedd
|
16
|
-
*
|
17
|
-
* This program is free software; you can redistribute it and/or modify
|
18
|
-
* it under the terms of either: 1) the GNU General Public License
|
19
|
-
* as published by the Free Software Foundation; either version 2 of the
|
20
|
-
* License, or (at your option) any later version; or 2) Ruby's License.
|
21
|
-
*
|
22
|
-
* See the file COPYING for complete licensing information.
|
23
|
-
*
|
24
|
-
*---------------------------------------------------------------------------
|
25
|
-
*
|
26
|
-
*
|
27
|
-
*/
|
28
|
-
|
29
|
-
|
30
|
-
package com.rubyeventmachine.application;
|
31
|
-
|
32
|
-
public class Timer {
|
33
|
-
/**
|
34
|
-
* User code is expected to call a method on a controlling Application,
|
35
|
-
* which will fill in this field so subsequent user code can access it.
|
36
|
-
*/
|
37
|
-
public Application application;
|
38
|
-
public double interval;
|
39
|
-
|
40
|
-
/**
|
41
|
-
* The reactor calls here, and it may be overridden in subclasses.
|
42
|
-
* User code should never call this method.
|
43
|
-
*/
|
44
|
-
public void _fire() {
|
45
|
-
fire();
|
46
|
-
}
|
47
|
-
|
48
|
-
/**
|
49
|
-
* User code is expected to override this method.
|
50
|
-
*/
|
51
|
-
public void fire() {
|
52
|
-
}
|
53
|
-
|
54
|
-
}
|