sidekick-client 0.2.1 → 0.2.2

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.
Files changed (162) hide show
  1. data/VERSION +1 -1
  2. data/lib/sidekick/client/sidekick_client.rb +0 -3
  3. data/lib/sidekick/shared/sidekick_queue_publisher.rb +1 -1
  4. data/sidekick-client.gemspec +1 -158
  5. metadata +1 -158
  6. data/lib/ext/eventmachine-0.12.10/.gitignore +0 -14
  7. data/lib/ext/eventmachine-0.12.10/README +0 -82
  8. data/lib/ext/eventmachine-0.12.10/Rakefile +0 -374
  9. data/lib/ext/eventmachine-0.12.10/docs/COPYING +0 -60
  10. data/lib/ext/eventmachine-0.12.10/docs/ChangeLog +0 -211
  11. data/lib/ext/eventmachine-0.12.10/docs/DEFERRABLES +0 -133
  12. data/lib/ext/eventmachine-0.12.10/docs/EPOLL +0 -141
  13. data/lib/ext/eventmachine-0.12.10/docs/GNU +0 -281
  14. data/lib/ext/eventmachine-0.12.10/docs/INSTALL +0 -13
  15. data/lib/ext/eventmachine-0.12.10/docs/KEYBOARD +0 -38
  16. data/lib/ext/eventmachine-0.12.10/docs/LEGAL +0 -25
  17. data/lib/ext/eventmachine-0.12.10/docs/LIGHTWEIGHT_CONCURRENCY +0 -70
  18. data/lib/ext/eventmachine-0.12.10/docs/PURE_RUBY +0 -75
  19. data/lib/ext/eventmachine-0.12.10/docs/RELEASE_NOTES +0 -94
  20. data/lib/ext/eventmachine-0.12.10/docs/SMTP +0 -2
  21. data/lib/ext/eventmachine-0.12.10/docs/SPAWNED_PROCESSES +0 -89
  22. data/lib/ext/eventmachine-0.12.10/docs/TODO +0 -8
  23. data/lib/ext/eventmachine-0.12.10/eventmachine.gemspec +0 -40
  24. data/lib/ext/eventmachine-0.12.10/examples/ex_channel.rb +0 -43
  25. data/lib/ext/eventmachine-0.12.10/examples/ex_queue.rb +0 -2
  26. data/lib/ext/eventmachine-0.12.10/examples/helper.rb +0 -2
  27. data/lib/ext/eventmachine-0.12.10/ext/binder.cpp +0 -125
  28. data/lib/ext/eventmachine-0.12.10/ext/binder.h +0 -46
  29. data/lib/ext/eventmachine-0.12.10/ext/cmain.cpp +0 -827
  30. data/lib/ext/eventmachine-0.12.10/ext/cplusplus.cpp +0 -202
  31. data/lib/ext/eventmachine-0.12.10/ext/ed.cpp +0 -1893
  32. data/lib/ext/eventmachine-0.12.10/ext/ed.h +0 -424
  33. data/lib/ext/eventmachine-0.12.10/ext/em.cpp +0 -2282
  34. data/lib/ext/eventmachine-0.12.10/ext/em.h +0 -232
  35. data/lib/ext/eventmachine-0.12.10/ext/emwin.cpp +0 -300
  36. data/lib/ext/eventmachine-0.12.10/ext/emwin.h +0 -94
  37. data/lib/ext/eventmachine-0.12.10/ext/epoll.cpp +0 -26
  38. data/lib/ext/eventmachine-0.12.10/ext/epoll.h +0 -25
  39. data/lib/ext/eventmachine-0.12.10/ext/eventmachine.h +0 -122
  40. data/lib/ext/eventmachine-0.12.10/ext/eventmachine_cpp.h +0 -96
  41. data/lib/ext/eventmachine-0.12.10/ext/extconf.rb +0 -148
  42. data/lib/ext/eventmachine-0.12.10/ext/fastfilereader/extconf.rb +0 -83
  43. data/lib/ext/eventmachine-0.12.10/ext/fastfilereader/mapper.cpp +0 -214
  44. data/lib/ext/eventmachine-0.12.10/ext/fastfilereader/mapper.h +0 -59
  45. data/lib/ext/eventmachine-0.12.10/ext/fastfilereader/rubymain.cpp +0 -127
  46. data/lib/ext/eventmachine-0.12.10/ext/files.cpp +0 -94
  47. data/lib/ext/eventmachine-0.12.10/ext/files.h +0 -65
  48. data/lib/ext/eventmachine-0.12.10/ext/kb.cpp +0 -81
  49. data/lib/ext/eventmachine-0.12.10/ext/page.cpp +0 -107
  50. data/lib/ext/eventmachine-0.12.10/ext/page.h +0 -51
  51. data/lib/ext/eventmachine-0.12.10/ext/pipe.cpp +0 -349
  52. data/lib/ext/eventmachine-0.12.10/ext/project.h +0 -151
  53. data/lib/ext/eventmachine-0.12.10/ext/rubymain.cpp +0 -1166
  54. data/lib/ext/eventmachine-0.12.10/ext/sigs.cpp +0 -89
  55. data/lib/ext/eventmachine-0.12.10/ext/sigs.h +0 -32
  56. data/lib/ext/eventmachine-0.12.10/ext/ssl.cpp +0 -460
  57. data/lib/ext/eventmachine-0.12.10/ext/ssl.h +0 -94
  58. data/lib/ext/eventmachine-0.12.10/java/.classpath +0 -8
  59. data/lib/ext/eventmachine-0.12.10/java/.project +0 -17
  60. data/lib/ext/eventmachine-0.12.10/java/src/com/rubyeventmachine/EmReactor.java +0 -570
  61. data/lib/ext/eventmachine-0.12.10/java/src/com/rubyeventmachine/EmReactorException.java +0 -40
  62. data/lib/ext/eventmachine-0.12.10/java/src/com/rubyeventmachine/EventableChannel.java +0 -69
  63. data/lib/ext/eventmachine-0.12.10/java/src/com/rubyeventmachine/EventableDatagramChannel.java +0 -189
  64. data/lib/ext/eventmachine-0.12.10/java/src/com/rubyeventmachine/EventableSocketChannel.java +0 -364
  65. data/lib/ext/eventmachine-0.12.10/java/src/com/rubyeventmachine/application/Application.java +0 -194
  66. data/lib/ext/eventmachine-0.12.10/java/src/com/rubyeventmachine/application/Connection.java +0 -74
  67. data/lib/ext/eventmachine-0.12.10/java/src/com/rubyeventmachine/application/ConnectionFactory.java +0 -37
  68. data/lib/ext/eventmachine-0.12.10/java/src/com/rubyeventmachine/application/DefaultConnectionFactory.java +0 -46
  69. data/lib/ext/eventmachine-0.12.10/java/src/com/rubyeventmachine/application/PeriodicTimer.java +0 -38
  70. data/lib/ext/eventmachine-0.12.10/java/src/com/rubyeventmachine/application/Timer.java +0 -54
  71. data/lib/ext/eventmachine-0.12.10/java/src/com/rubyeventmachine/tests/ApplicationTest.java +0 -109
  72. data/lib/ext/eventmachine-0.12.10/java/src/com/rubyeventmachine/tests/ConnectTest.java +0 -148
  73. data/lib/ext/eventmachine-0.12.10/java/src/com/rubyeventmachine/tests/EMTest.java +0 -80
  74. data/lib/ext/eventmachine-0.12.10/java/src/com/rubyeventmachine/tests/TestDatagrams.java +0 -53
  75. data/lib/ext/eventmachine-0.12.10/java/src/com/rubyeventmachine/tests/TestServers.java +0 -75
  76. data/lib/ext/eventmachine-0.12.10/java/src/com/rubyeventmachine/tests/TestTimers.java +0 -90
  77. data/lib/ext/eventmachine-0.12.10/lib/em/buftok.rb +0 -138
  78. data/lib/ext/eventmachine-0.12.10/lib/em/callback.rb +0 -26
  79. data/lib/ext/eventmachine-0.12.10/lib/em/channel.rb +0 -57
  80. data/lib/ext/eventmachine-0.12.10/lib/em/connection.rb +0 -564
  81. data/lib/ext/eventmachine-0.12.10/lib/em/deferrable.rb +0 -192
  82. data/lib/ext/eventmachine-0.12.10/lib/em/file_watch.rb +0 -54
  83. data/lib/ext/eventmachine-0.12.10/lib/em/future.rb +0 -61
  84. data/lib/ext/eventmachine-0.12.10/lib/em/messages.rb +0 -66
  85. data/lib/ext/eventmachine-0.12.10/lib/em/process_watch.rb +0 -44
  86. data/lib/ext/eventmachine-0.12.10/lib/em/processes.rb +0 -119
  87. data/lib/ext/eventmachine-0.12.10/lib/em/protocols/header_and_content.rb +0 -138
  88. data/lib/ext/eventmachine-0.12.10/lib/em/protocols/httpclient.rb +0 -263
  89. data/lib/ext/eventmachine-0.12.10/lib/em/protocols/httpclient2.rb +0 -590
  90. data/lib/ext/eventmachine-0.12.10/lib/em/protocols/line_and_text.rb +0 -125
  91. data/lib/ext/eventmachine-0.12.10/lib/em/protocols/linetext2.rb +0 -161
  92. data/lib/ext/eventmachine-0.12.10/lib/em/protocols/memcache.rb +0 -323
  93. data/lib/ext/eventmachine-0.12.10/lib/em/protocols/object_protocol.rb +0 -45
  94. data/lib/ext/eventmachine-0.12.10/lib/em/protocols/postgres3.rb +0 -247
  95. data/lib/ext/eventmachine-0.12.10/lib/em/protocols/saslauth.rb +0 -175
  96. data/lib/ext/eventmachine-0.12.10/lib/em/protocols/smtpclient.rb +0 -357
  97. data/lib/ext/eventmachine-0.12.10/lib/em/protocols/smtpserver.rb +0 -547
  98. data/lib/ext/eventmachine-0.12.10/lib/em/protocols/socks4.rb +0 -66
  99. data/lib/ext/eventmachine-0.12.10/lib/em/protocols/stomp.rb +0 -200
  100. data/lib/ext/eventmachine-0.12.10/lib/em/protocols/tcptest.rb +0 -53
  101. data/lib/ext/eventmachine-0.12.10/lib/em/protocols.rb +0 -36
  102. data/lib/ext/eventmachine-0.12.10/lib/em/queue.rb +0 -61
  103. data/lib/ext/eventmachine-0.12.10/lib/em/spawnable.rb +0 -85
  104. data/lib/ext/eventmachine-0.12.10/lib/em/streamer.rb +0 -130
  105. data/lib/ext/eventmachine-0.12.10/lib/em/timers.rb +0 -56
  106. data/lib/ext/eventmachine-0.12.10/lib/em/version.rb +0 -3
  107. data/lib/ext/eventmachine-0.12.10/lib/eventmachine.rb +0 -1592
  108. data/lib/ext/eventmachine-0.12.10/lib/evma/callback.rb +0 -32
  109. data/lib/ext/eventmachine-0.12.10/lib/evma/container.rb +0 -75
  110. data/lib/ext/eventmachine-0.12.10/lib/evma/factory.rb +0 -77
  111. data/lib/ext/eventmachine-0.12.10/lib/evma/protocol.rb +0 -87
  112. data/lib/ext/eventmachine-0.12.10/lib/evma/reactor.rb +0 -48
  113. data/lib/ext/eventmachine-0.12.10/lib/evma.rb +0 -32
  114. data/lib/ext/eventmachine-0.12.10/lib/jeventmachine.rb +0 -257
  115. data/lib/ext/eventmachine-0.12.10/lib/pr_eventmachine.rb +0 -1022
  116. data/lib/ext/eventmachine-0.12.10/setup.rb +0 -1585
  117. data/lib/ext/eventmachine-0.12.10/tasks/cpp.rake_example +0 -77
  118. data/lib/ext/eventmachine-0.12.10/tests/client.crt +0 -31
  119. data/lib/ext/eventmachine-0.12.10/tests/client.key +0 -51
  120. data/lib/ext/eventmachine-0.12.10/tests/test_attach.rb +0 -126
  121. data/lib/ext/eventmachine-0.12.10/tests/test_basic.rb +0 -284
  122. data/lib/ext/eventmachine-0.12.10/tests/test_channel.rb +0 -63
  123. data/lib/ext/eventmachine-0.12.10/tests/test_connection_count.rb +0 -35
  124. data/lib/ext/eventmachine-0.12.10/tests/test_defer.rb +0 -47
  125. data/lib/ext/eventmachine-0.12.10/tests/test_epoll.rb +0 -160
  126. data/lib/ext/eventmachine-0.12.10/tests/test_error_handler.rb +0 -35
  127. data/lib/ext/eventmachine-0.12.10/tests/test_errors.rb +0 -82
  128. data/lib/ext/eventmachine-0.12.10/tests/test_exc.rb +0 -55
  129. data/lib/ext/eventmachine-0.12.10/tests/test_file_watch.rb +0 -49
  130. data/lib/ext/eventmachine-0.12.10/tests/test_futures.rb +0 -198
  131. data/lib/ext/eventmachine-0.12.10/tests/test_get_sock_opt.rb +0 -30
  132. data/lib/ext/eventmachine-0.12.10/tests/test_handler_check.rb +0 -37
  133. data/lib/ext/eventmachine-0.12.10/tests/test_hc.rb +0 -218
  134. data/lib/ext/eventmachine-0.12.10/tests/test_httpclient.rb +0 -218
  135. data/lib/ext/eventmachine-0.12.10/tests/test_httpclient2.rb +0 -153
  136. data/lib/ext/eventmachine-0.12.10/tests/test_inactivity_timeout.rb +0 -50
  137. data/lib/ext/eventmachine-0.12.10/tests/test_kb.rb +0 -60
  138. data/lib/ext/eventmachine-0.12.10/tests/test_ltp.rb +0 -182
  139. data/lib/ext/eventmachine-0.12.10/tests/test_ltp2.rb +0 -317
  140. data/lib/ext/eventmachine-0.12.10/tests/test_next_tick.rb +0 -133
  141. data/lib/ext/eventmachine-0.12.10/tests/test_object_protocol.rb +0 -37
  142. data/lib/ext/eventmachine-0.12.10/tests/test_pause.rb +0 -70
  143. data/lib/ext/eventmachine-0.12.10/tests/test_pending_connect_timeout.rb +0 -48
  144. data/lib/ext/eventmachine-0.12.10/tests/test_process_watch.rb +0 -48
  145. data/lib/ext/eventmachine-0.12.10/tests/test_processes.rb +0 -128
  146. data/lib/ext/eventmachine-0.12.10/tests/test_proxy_connection.rb +0 -92
  147. data/lib/ext/eventmachine-0.12.10/tests/test_pure.rb +0 -125
  148. data/lib/ext/eventmachine-0.12.10/tests/test_queue.rb +0 -44
  149. data/lib/ext/eventmachine-0.12.10/tests/test_running.rb +0 -42
  150. data/lib/ext/eventmachine-0.12.10/tests/test_sasl.rb +0 -72
  151. data/lib/ext/eventmachine-0.12.10/tests/test_send_file.rb +0 -242
  152. data/lib/ext/eventmachine-0.12.10/tests/test_servers.rb +0 -76
  153. data/lib/ext/eventmachine-0.12.10/tests/test_smtpclient.rb +0 -83
  154. data/lib/ext/eventmachine-0.12.10/tests/test_smtpserver.rb +0 -85
  155. data/lib/ext/eventmachine-0.12.10/tests/test_spawn.rb +0 -322
  156. data/lib/ext/eventmachine-0.12.10/tests/test_ssl_args.rb +0 -79
  157. data/lib/ext/eventmachine-0.12.10/tests/test_ssl_methods.rb +0 -50
  158. data/lib/ext/eventmachine-0.12.10/tests/test_ssl_verify.rb +0 -82
  159. data/lib/ext/eventmachine-0.12.10/tests/test_timers.rb +0 -162
  160. data/lib/ext/eventmachine-0.12.10/tests/test_ud.rb +0 -36
  161. data/lib/ext/eventmachine-0.12.10/tests/testem.rb +0 -31
  162. data/lib/ext/eventmachine-0.12.10/web/whatis +0 -7
@@ -1,570 +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
- package com.rubyeventmachine;
30
-
31
- import java.io.*;
32
- import java.nio.channels.*;
33
- import java.util.*;
34
- import java.nio.*;
35
- import java.net.*;
36
- import java.util.concurrent.atomic.*;
37
- import java.security.*;
38
-
39
- public class EmReactor {
40
- public final int EM_TIMER_FIRED = 100;
41
- public final int EM_CONNECTION_READ = 101;
42
- public final int EM_CONNECTION_UNBOUND = 102;
43
- public final int EM_CONNECTION_ACCEPTED = 103;
44
- public final int EM_CONNECTION_COMPLETED = 104;
45
- public final int EM_LOOPBREAK_SIGNAL = 105;
46
- public final int EM_CONNECTION_NOTIFY_READABLE = 106;
47
- public final int EM_CONNECTION_NOTIFY_WRITABLE = 107;
48
- public final int EM_SSL_HANDSHAKE_COMPLETED = 108;
49
- public final int EM_SSL_VERIFY = 109;
50
- public final int EM_PROXY_TARGET_UNBOUND = 110;
51
-
52
- private Selector mySelector;
53
- private TreeMap<Long, ArrayList<Long>> Timers;
54
- private HashMap<Long, EventableChannel> Connections;
55
- private HashMap<Long, ServerSocketChannel> Acceptors;
56
- private ArrayList<Long> NewConnections;
57
- private ArrayList<Long> UnboundConnections;
58
- private ArrayList<EventableSocketChannel> DetachedConnections;
59
-
60
- private boolean bRunReactor;
61
- private long BindingIndex;
62
- private AtomicBoolean loopBreaker;
63
- private ByteBuffer myReadBuffer;
64
- private int timerQuantum;
65
-
66
- public EmReactor() {
67
- Timers = new TreeMap<Long, ArrayList<Long>>();
68
- Connections = new HashMap<Long, EventableChannel>();
69
- Acceptors = new HashMap<Long, ServerSocketChannel>();
70
- NewConnections = new ArrayList<Long>();
71
- UnboundConnections = new ArrayList<Long>();
72
- DetachedConnections = new ArrayList<EventableSocketChannel>();
73
-
74
- BindingIndex = 0;
75
- loopBreaker = new AtomicBoolean();
76
- loopBreaker.set(false);
77
- myReadBuffer = ByteBuffer.allocate(32*1024); // don't use a direct buffer. Ruby doesn't seem to like them.
78
- timerQuantum = 98;
79
- }
80
-
81
- /**
82
- * This is a no-op stub, intended to be overridden in user code.
83
- */
84
- public void eventCallback (long sig, int eventType, ByteBuffer data, long data2) {
85
- System.out.println ("Default callback: "+sig+" "+eventType+" "+data+" "+data2);
86
- }
87
- public void eventCallback (long sig, int eventType, ByteBuffer data) {
88
- eventCallback (sig, eventType, data, 0);
89
- }
90
-
91
-
92
- public void run() {
93
- try {
94
- mySelector = Selector.open();
95
- bRunReactor = true;
96
- } catch (IOException e) {
97
- throw new RuntimeException ("Could not open selector", e);
98
- }
99
-
100
- while (bRunReactor) {
101
- runLoopbreaks();
102
- if (!bRunReactor) break;
103
-
104
- runTimers();
105
- if (!bRunReactor) break;
106
-
107
- removeUnboundConnections();
108
- checkIO();
109
- addNewConnections();
110
- processIO();
111
- }
112
-
113
- close();
114
- }
115
-
116
- void addNewConnections() {
117
- ListIterator<EventableSocketChannel> iter = DetachedConnections.listIterator(0);
118
- while (iter.hasNext()) {
119
- EventableSocketChannel ec = iter.next();
120
- ec.cleanup();
121
- }
122
- DetachedConnections.clear();
123
-
124
- ListIterator<Long> iter2 = NewConnections.listIterator(0);
125
- while (iter2.hasNext()) {
126
- long b = iter2.next();
127
-
128
- EventableChannel ec = Connections.get(b);
129
- if (ec != null) {
130
- try {
131
- ec.register();
132
- } catch (ClosedChannelException e) {
133
- UnboundConnections.add (ec.getBinding());
134
- }
135
- }
136
- }
137
- NewConnections.clear();
138
- }
139
-
140
- void removeUnboundConnections() {
141
- ListIterator<Long> iter = UnboundConnections.listIterator(0);
142
- while (iter.hasNext()) {
143
- long b = iter.next();
144
-
145
- EventableChannel ec = Connections.remove(b);
146
- if (ec != null) {
147
- eventCallback (b, EM_CONNECTION_UNBOUND, null);
148
- ec.close();
149
-
150
- EventableSocketChannel sc = (EventableSocketChannel) ec;
151
- if (sc != null && sc.isAttached())
152
- DetachedConnections.add (sc);
153
- }
154
- }
155
- UnboundConnections.clear();
156
- }
157
-
158
- void checkIO() {
159
- long timeout;
160
-
161
- if (NewConnections.size() > 0) {
162
- timeout = -1;
163
- } else if (!Timers.isEmpty()) {
164
- long now = new Date().getTime();
165
- long k = Timers.firstKey();
166
- long diff = k-now;
167
-
168
- if (diff <= 0)
169
- timeout = -1; // don't wait, just poll once
170
- else
171
- timeout = diff;
172
- } else {
173
- timeout = 0; // wait indefinitely
174
- }
175
-
176
- try {
177
- if (timeout == -1)
178
- mySelector.selectNow();
179
- else
180
- mySelector.select(timeout);
181
- } catch (IOException e) {
182
- e.printStackTrace();
183
- }
184
- }
185
-
186
- void processIO() {
187
- Iterator<SelectionKey> it = mySelector.selectedKeys().iterator();
188
- while (it.hasNext()) {
189
- SelectionKey k = it.next();
190
- it.remove();
191
-
192
- if (k.isConnectable())
193
- isConnectable(k);
194
-
195
- else if (k.isAcceptable())
196
- isAcceptable(k);
197
-
198
- else {
199
- if (k.isWritable())
200
- isWritable(k);
201
-
202
- if (k.isReadable())
203
- isReadable(k);
204
- }
205
- }
206
- }
207
-
208
- void isAcceptable (SelectionKey k) {
209
- ServerSocketChannel ss = (ServerSocketChannel) k.channel();
210
- SocketChannel sn;
211
- long b;
212
-
213
- for (int n = 0; n < 10; n++) {
214
- try {
215
- sn = ss.accept();
216
- if (sn == null)
217
- break;
218
- } catch (IOException e) {
219
- e.printStackTrace();
220
- k.cancel();
221
-
222
- ServerSocketChannel server = Acceptors.remove(k.attachment());
223
- if (server != null)
224
- try{ server.close(); } catch (IOException ex) {};
225
- break;
226
- }
227
-
228
- try {
229
- sn.configureBlocking(false);
230
- } catch (IOException e) {
231
- e.printStackTrace();
232
- continue;
233
- }
234
-
235
- b = createBinding();
236
- EventableSocketChannel ec = new EventableSocketChannel (sn, b, mySelector);
237
- Connections.put (b, ec);
238
- NewConnections.add (b);
239
-
240
- eventCallback (((Long)k.attachment()).longValue(), EM_CONNECTION_ACCEPTED, null, b);
241
- }
242
- }
243
-
244
- void isReadable (SelectionKey k) {
245
- EventableChannel ec = (EventableChannel) k.attachment();
246
- long b = ec.getBinding();
247
-
248
- if (ec.isWatchOnly()) {
249
- if (ec.isNotifyReadable())
250
- eventCallback (b, EM_CONNECTION_NOTIFY_READABLE, null);
251
- } else {
252
- myReadBuffer.clear();
253
-
254
- try {
255
- ec.readInboundData (myReadBuffer);
256
- myReadBuffer.flip();
257
- if (myReadBuffer.limit() > 0)
258
- eventCallback (b, EM_CONNECTION_READ, myReadBuffer);
259
- } catch (IOException e) {
260
- UnboundConnections.add (b);
261
- }
262
- }
263
- }
264
-
265
- void isWritable (SelectionKey k) {
266
- EventableChannel ec = (EventableChannel) k.attachment();
267
- long b = ec.getBinding();
268
-
269
- if (ec.isWatchOnly()) {
270
- if (ec.isNotifyWritable())
271
- eventCallback (b, EM_CONNECTION_NOTIFY_WRITABLE, null);
272
- }
273
- else {
274
- try {
275
- if (!ec.writeOutboundData())
276
- UnboundConnections.add (b);
277
- } catch (IOException e) {
278
- UnboundConnections.add (b);
279
- }
280
- }
281
- }
282
-
283
- void isConnectable (SelectionKey k) {
284
- EventableSocketChannel ec = (EventableSocketChannel) k.attachment();
285
- long b = ec.getBinding();
286
-
287
- try {
288
- if (ec.finishConnecting())
289
- eventCallback (b, EM_CONNECTION_COMPLETED, null);
290
- else
291
- UnboundConnections.add (b);
292
- } catch (IOException e) {
293
- UnboundConnections.add (b);
294
- }
295
- }
296
-
297
- void close() {
298
- try {
299
- if (mySelector != null)
300
- mySelector.close();
301
- } catch (IOException e) {}
302
- mySelector = null;
303
-
304
- // run down open connections and sockets.
305
- Iterator<ServerSocketChannel> i = Acceptors.values().iterator();
306
- while (i.hasNext()) {
307
- try {
308
- i.next().close();
309
- } catch (IOException e) {}
310
- }
311
-
312
- // 29Sep09: We create an ArrayList of the existing connections, then iterate over
313
- // that to call unbind on them. This is because an unbind can trigger a reconnect,
314
- // which will add to the Connections HashMap, causing a ConcurrentModificationException.
315
- // XXX: The correct behavior here would be to latch the various reactor methods to return
316
- // immediately if the reactor is shutting down.
317
- ArrayList<EventableChannel> conns = new ArrayList<EventableChannel>();
318
- Iterator<EventableChannel> i2 = Connections.values().iterator();
319
- while (i2.hasNext()) {
320
- EventableChannel ec = i2.next();
321
- if (ec != null) {
322
- conns.add (ec);
323
- }
324
- }
325
- Connections.clear();
326
-
327
- ListIterator<EventableChannel> i3 = conns.listIterator(0);
328
- while (i3.hasNext()) {
329
- EventableChannel ec = i3.next();
330
- eventCallback (ec.getBinding(), EM_CONNECTION_UNBOUND, null);
331
- ec.close();
332
-
333
- EventableSocketChannel sc = (EventableSocketChannel) ec;
334
- if (sc != null && sc.isAttached())
335
- DetachedConnections.add (sc);
336
- }
337
-
338
- ListIterator<EventableSocketChannel> i4 = DetachedConnections.listIterator(0);
339
- while (i4.hasNext()) {
340
- EventableSocketChannel ec = i4.next();
341
- ec.cleanup();
342
- }
343
- DetachedConnections.clear();
344
- }
345
-
346
- void runLoopbreaks() {
347
- if (loopBreaker.getAndSet(false)) {
348
- eventCallback (0, EM_LOOPBREAK_SIGNAL, null);
349
- }
350
- }
351
-
352
- public void stop() {
353
- bRunReactor = false;
354
- signalLoopbreak();
355
- }
356
-
357
- void runTimers() {
358
- long now = new Date().getTime();
359
- while (!Timers.isEmpty()) {
360
- long k = Timers.firstKey();
361
- if (k > now)
362
- break;
363
-
364
- ArrayList<Long> callbacks = Timers.get(k);
365
- Timers.remove(k);
366
-
367
- // Fire all timers at this timestamp
368
- ListIterator<Long> iter = callbacks.listIterator(0);
369
- while (iter.hasNext()) {
370
- eventCallback (0, EM_TIMER_FIRED, null, iter.next().longValue());
371
- }
372
- }
373
- }
374
-
375
- public long installOneshotTimer (int milliseconds) {
376
- long s = createBinding();
377
- long deadline = new Date().getTime() + milliseconds;
378
-
379
- if (Timers.containsKey(deadline)) {
380
- Timers.get(deadline).add(s);
381
- } else {
382
- ArrayList<Long> callbacks = new ArrayList<Long>();
383
- callbacks.add(s);
384
- Timers.put(deadline, callbacks);
385
- }
386
-
387
- return s;
388
- }
389
-
390
- public long startTcpServer (SocketAddress sa) throws EmReactorException {
391
- try {
392
- ServerSocketChannel server = ServerSocketChannel.open();
393
- server.configureBlocking(false);
394
- server.socket().bind (sa);
395
- long s = createBinding();
396
- Acceptors.put(s, server);
397
- server.register(mySelector, SelectionKey.OP_ACCEPT, s);
398
- return s;
399
- } catch (IOException e) {
400
- throw new EmReactorException ("unable to open socket acceptor: " + e.toString());
401
- }
402
- }
403
-
404
- public long startTcpServer (String address, int port) throws EmReactorException {
405
- return startTcpServer (new InetSocketAddress (address, port));
406
- }
407
-
408
- public void stopTcpServer (long signature) throws IOException {
409
- ServerSocketChannel server = Acceptors.remove(signature);
410
- if (server != null)
411
- server.close();
412
- else
413
- throw new RuntimeException ("failed to close unknown acceptor");
414
- }
415
-
416
- public long openUdpSocket (InetSocketAddress address) throws IOException {
417
- // TODO, don't throw an exception out of here.
418
- DatagramChannel dg = DatagramChannel.open();
419
- dg.configureBlocking(false);
420
- dg.socket().bind(address);
421
- long b = createBinding();
422
- EventableChannel ec = new EventableDatagramChannel (dg, b, mySelector);
423
- dg.register(mySelector, SelectionKey.OP_READ, ec);
424
- Connections.put(b, ec);
425
- return b;
426
- }
427
-
428
- public long openUdpSocket (String address, int port) throws IOException {
429
- return openUdpSocket (new InetSocketAddress (address, port));
430
- }
431
-
432
- public void sendData (long sig, ByteBuffer bb) throws IOException {
433
- Connections.get(sig).scheduleOutboundData( bb );
434
- }
435
-
436
- public void sendData (long sig, byte[] data) throws IOException {
437
- sendData (sig, ByteBuffer.wrap(data));
438
- }
439
-
440
- public void setCommInactivityTimeout (long sig, long mills) {
441
- Connections.get(sig).setCommInactivityTimeout (mills);
442
- }
443
-
444
- public void sendDatagram (long sig, String data, int length, String recipAddress, int recipPort) {
445
- sendDatagram (sig, ByteBuffer.wrap(data.getBytes()), recipAddress, recipPort);
446
- }
447
-
448
- public void sendDatagram (long sig, ByteBuffer bb, String recipAddress, int recipPort) {
449
- (Connections.get(sig)).scheduleOutboundDatagram( bb, recipAddress, recipPort);
450
- }
451
-
452
- public long connectTcpServer (String address, int port) {
453
- return connectTcpServer(null, 0, address, port);
454
- }
455
-
456
- public long connectTcpServer (String bindAddr, int bindPort, String address, int port) {
457
- long b = createBinding();
458
-
459
- try {
460
- SocketChannel sc = SocketChannel.open();
461
- sc.configureBlocking(false);
462
- if (bindAddr != null)
463
- sc.socket().bind(new InetSocketAddress (bindAddr, bindPort));
464
-
465
- EventableSocketChannel ec = new EventableSocketChannel (sc, b, mySelector);
466
-
467
- if (sc.connect (new InetSocketAddress (address, port))) {
468
- // Connection returned immediately. Can happen with localhost connections.
469
- // WARNING, this code is untested due to lack of available test conditions.
470
- // Ought to be be able to come here from a localhost connection, but that
471
- // doesn't happen on Linux. (Maybe on FreeBSD?)
472
- // The reason for not handling this until we can test it is that we
473
- // really need to return from this function WITHOUT triggering any EM events.
474
- // That's because until the user code has seen the signature we generated here,
475
- // it won't be able to properly dispatch them. The C++ EM deals with this
476
- // by setting pending mode as a flag in ALL eventable descriptors and making
477
- // the descriptor select for writable. Then, it can send UNBOUND and
478
- // CONNECTION_COMPLETED on the next pass through the loop, because writable will
479
- // fire.
480
- throw new RuntimeException ("immediate-connect unimplemented");
481
- }
482
- else {
483
- ec.setConnectPending();
484
- Connections.put (b, ec);
485
- NewConnections.add (b);
486
- }
487
- } catch (IOException e) {
488
- // Can theoretically come here if a connect failure can be determined immediately.
489
- // I don't know how to make that happen for testing purposes.
490
- throw new RuntimeException ("immediate-connect unimplemented: " + e.toString());
491
- }
492
- return b;
493
- }
494
-
495
- public void closeConnection (long sig, boolean afterWriting) {
496
- EventableChannel ec = Connections.get(sig);
497
- if (ec != null)
498
- if (ec.scheduleClose (afterWriting))
499
- UnboundConnections.add (sig);
500
- }
501
-
502
- long createBinding() {
503
- return ++BindingIndex;
504
- }
505
-
506
- public void signalLoopbreak() {
507
- loopBreaker.set(true);
508
- if (mySelector != null)
509
- mySelector.wakeup();
510
- }
511
-
512
- public void startTls (long sig) throws NoSuchAlgorithmException, KeyManagementException {
513
- Connections.get(sig).startTls();
514
- }
515
-
516
- public void setTimerQuantum (int mills) {
517
- if (mills < 5 || mills > 2500)
518
- throw new RuntimeException ("attempt to set invalid timer-quantum value: "+mills);
519
- timerQuantum = mills;
520
- }
521
-
522
- public Object[] getPeerName (long sig) {
523
- return Connections.get(sig).getPeerName();
524
- }
525
-
526
- public long attachChannel (SocketChannel sc, boolean watch_mode) {
527
- long b = createBinding();
528
-
529
- EventableSocketChannel ec = new EventableSocketChannel (sc, b, mySelector);
530
-
531
- ec.setAttached();
532
- if (watch_mode)
533
- ec.setWatchOnly();
534
-
535
- Connections.put (b, ec);
536
- NewConnections.add (b);
537
-
538
- return b;
539
- }
540
-
541
- public SocketChannel detachChannel (long sig) {
542
- EventableSocketChannel ec = (EventableSocketChannel) Connections.get (sig);
543
- if (ec != null) {
544
- UnboundConnections.add (sig);
545
- return ec.getChannel();
546
- } else {
547
- return null;
548
- }
549
- }
550
-
551
- public void setNotifyReadable (long sig, boolean mode) {
552
- ((EventableSocketChannel) Connections.get(sig)).setNotifyReadable(mode);
553
- }
554
-
555
- public void setNotifyWritable (long sig, boolean mode) {
556
- ((EventableSocketChannel) Connections.get(sig)).setNotifyWritable(mode);
557
- }
558
-
559
- public boolean isNotifyReadable (long sig) {
560
- return Connections.get(sig).isNotifyReadable();
561
- }
562
-
563
- public boolean isNotifyWritable (long sig) {
564
- return Connections.get(sig).isNotifyWritable();
565
- }
566
-
567
- public int getConnectionCount() {
568
- return Connections.size() + Acceptors.size();
569
- }
570
- }
@@ -1,40 +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
- package com.rubyeventmachine;
30
-
31
- /**
32
- * @author francis
33
- *
34
- */
35
- public class EmReactorException extends Exception {
36
- static final long serialVersionUID = 0;
37
- public EmReactorException (String msg) {
38
- super (msg);
39
- }
40
- }
@@ -1,69 +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;
31
-
32
- import java.nio.ByteBuffer;
33
- import java.io.IOException;
34
- import java.nio.channels.ClosedChannelException;
35
-
36
- public interface EventableChannel {
37
-
38
- public void scheduleOutboundData (ByteBuffer bb);
39
-
40
- public void scheduleOutboundDatagram (ByteBuffer bb, String recipAddress, int recipPort);
41
-
42
- public boolean scheduleClose (boolean afterWriting);
43
-
44
- public void startTls();
45
-
46
- public long getBinding();
47
-
48
- public void readInboundData (ByteBuffer dst) throws IOException;
49
-
50
- public void register() throws ClosedChannelException;
51
-
52
- /**
53
- * This is called by the reactor after it finishes running.
54
- * The idea is to free network resources.
55
- */
56
- public void close();
57
-
58
- public boolean writeOutboundData() throws IOException;
59
-
60
- public void setCommInactivityTimeout (long seconds);
61
-
62
- public Object[] getPeerName();
63
-
64
- public boolean isWatchOnly();
65
-
66
- public boolean isNotifyReadable();
67
- public boolean isNotifyWritable();
68
-
69
- }