Changeset 21 for simplerunner/src/main


Ignore:
Timestamp:
09/22/20 08:52:04 (4 years ago)
Author:
bart
Message:

Version 1.5.

Location:
simplerunner/src/main/java/geniusweb/simplerunner
Files:
3 edited

Legend:

Unmodified
Added
Removed
  • simplerunner/src/main/java/geniusweb/simplerunner/BasicConnection.java

    r9 r21  
    33import java.io.IOException;
    44import java.net.URI;
     5import java.util.concurrent.ArrayBlockingQueue;
    56
    67import geniusweb.connection.ConnectionEnd;
     
    2223        // to be initialized
    2324        private Listener<OUT> handler = null;
     25        private Thread handlerThread;
     26        private ArrayBlockingQueue<OUT> messages = new ArrayBlockingQueue<OUT>(4);
    2427
    2528        /**
     
    3336                this.reference = reference;
    3437                this.uri = uri;
     38
    3539        }
    3640
     
    4751                }
    4852                this.handler = newhandler;
     53
     54                handlerThread = new Thread(new Runnable() {
     55
     56                        @Override
     57                        public void run() {
     58                                try {
     59                                        while (true) {
     60                                                handler.notifyChange(messages.take());
     61                                        }
     62                                } catch (InterruptedException e) {
     63                                        System.out.println("connection handler interrupted");
     64                                }
     65                        }
     66                });
     67
     68                handlerThread.start();
    4969        }
    5070
     
    5575                                        "BasicConnection has not been initialized");
    5676                }
    57                 handler.notifyChange(data);
     77                try {
     78                        messages.put(data);
     79                } catch (InterruptedException e) {
     80                        throw new IOException(e);
     81                }
    5882        }
    5983
     
    7094        @Override
    7195        public void close() {
    72 
     96                handlerThread.interrupt();
     97                handlerThread = null;
     98                handler = null;
    7399        }
    74100
  • simplerunner/src/main/java/geniusweb/simplerunner/ClassPathConnectionFactory.java

    r9 r21  
    1111import geniusweb.actions.Action;
    1212import geniusweb.actions.PartyId;
     13import geniusweb.inform.Inform;
    1314import geniusweb.party.Party;
    14 import geniusweb.party.inform.Inform;
    1515import geniusweb.protocol.partyconnection.ProtocolToPartyConn;
    1616import geniusweb.protocol.partyconnection.ProtocolToPartyConnFactory;
     
    2222 * <code>classpath:org/my/package/class</code>
    2323 *
    24  *
    25  *
    2624 */
    2725public class ClassPathConnectionFactory implements ProtocolToPartyConnFactory {
  • simplerunner/src/main/java/geniusweb/simplerunner/NegoRunner.java

    r18 r21  
    2929        private final ProtocolToPartyConnFactory connectionfactory;
    3030        protected final Reporter log;
     31        private boolean properlyStopped = false;
    3132        private final static ObjectMapper jackson = new ObjectMapper();
     33        private final int LOOPTIME = 200;// ms
     34        private long maxruntime;
    3235
     36        /**
     37         *
     38         * @param settings
     39         * @param connectionfactory
     40         * @param logger
     41         * @param maxruntime        limit in millisecs. Ignored if 0
     42         */
    3343        public NegoRunner(NegoSettings settings,
    34                         ProtocolToPartyConnFactory connectionfactory, Reporter logger) {
     44                        ProtocolToPartyConnFactory connectionfactory, Reporter logger,
     45                        long maxruntime) {
    3546                if (settings == null || connectionfactory == null) {
    3647                        throw new NullPointerException("Arguments must be not null");
     
    4051                this.protocol = settings.getProtocol(log);
    4152                this.connectionfactory = connectionfactory;
     53                this.maxruntime = maxruntime;
     54        }
     55
     56        public boolean isProperlyStopped() {
     57                return properlyStopped;
    4258        }
    4359
     
    4662                protocol.addListener(evt -> handle(evt));
    4763                protocol.start(connectionfactory);
     64                long remainingtime = maxruntime;
     65                while (!properlyStopped && (maxruntime == 0 || remainingtime > 0)) {
     66                        try {
     67                                Thread.sleep(LOOPTIME);
     68                                remainingtime -= LOOPTIME;
     69                        } catch (InterruptedException e) {
     70                                e.printStackTrace();
     71                        }
     72                }
     73                System.out.println("end run");
    4874        }
    4975
     
    5682
    5783        protected void stop() {
    58                 Level level = protocol.getState().getError() == null ? Level.INFO
    59                                 : Level.WARNING;
    60                 logFinal(level, protocol.getState());
     84                logFinal(Level.INFO, protocol.getState());
     85                properlyStopped = true;
    6186        }
    6287
     
    88113
    89114                NegoRunner runner = new NegoRunner(settings,
    90                                 new ClassPathConnectionFactory(), new StdOutReporter());
     115                                new ClassPathConnectionFactory(), new StdOutReporter(), 0);
    91116                runner.run();
    92117        }
    93118
    94119        private static void showusage() {
    95                 System.err.println("GeniusWeb stand-alone runner. ");
     120                System.err.println("GeniusWeb stand-alone runner.");
    96121                System.err.println("first argument should be <settings.json>.");
    97122                System.err.println(
     
    100125                                "See the settings.json example file and the GeniusWeb wiki pages. ");
    101126
     127        }
     128
     129        /**
     130         * @return protocol that runs/ran the session.
     131         */
     132        public NegoProtocol getProtocol() {
     133                return protocol;
    102134        }
    103135}
Note: See TracChangeset for help on using the changeset viewer.