2 * Copyright (c) 1995-2015, Index Data
4 * See the file LICENSE for details.
6 package org.yaz4j.async;
8 import java.util.ArrayList;
10 import org.yaz4j.Connection;
11 import org.yaz4j.jni.SWIGTYPE_p_p_ZOOM_connection_p;
12 import static org.yaz4j.jni.yaz4jlib.*;
13 import static java.lang.System.out;
14 import org.yaz4j.util.Unstable;
17 * Allows to group and execute asynchronous connections within an event loop.
22 public class AsyncConnections {
23 private List<AsyncConnection> conns = new ArrayList<AsyncConnection>();
26 * Include async connection in the event loop processing.
29 public void add(AsyncConnection conn) {
34 * List all included connections.
37 public List<AsyncConnection> getConnections() {
42 * Start the event loop, which effectively executes and processes all
46 SWIGTYPE_p_p_ZOOM_connection_p c_conns = new_zoomConnectionArray(conns.size());
48 for (int i=0; i<conns.size(); i++) {
49 AsyncConnection conn = conns.get(i);
50 zoomConnectionArray_setitem(c_conns, i, conn.getNativeConnection());
53 while ((ret = ZOOM_event(conns.size(), c_conns)) != 0) {
55 int last = ZOOM_connection_last_event(zoomConnectionArray_getitem(c_conns, idx));
56 AsyncConnection conn = conns.get(idx);
57 String event = ZOOM_get_event_str(last);
58 out.println("Received event " + event + " on connection #"+idx);
60 case ZOOM_EVENT_RECV_SEARCH: conn.handleSearch(); break;
61 case ZOOM_EVENT_RECV_RECORD: conn.handleRecord(); break;
62 case ZOOM_EVENT_END: conn.handleError(); break;
66 delete_zoomConnectionArray(c_conns);