On the client you are writing a hashmap to the session. I don't see a
filter which turns the hashmap into a IoBuffer?  Only IoBuffer can be
written to the socket directly.
On Sep 16, 2013 1:12 PM, "Karrys, Michael (IS)" <mike.kar...@ngc.com> wrote:

> I was wondering if someone could look at this and tell me what I am doing
> wrong. I don't seem to be getting the messageReceived() called on either
> the client or the server code. I have been able to get sumup example to run
> and I used code from that example to mashup this test code. I am rung OS/X
> with java 7 using mina 2.0.7. The logger shows the CREATED, OPENNED, and
> CLOSED events for the session but the messageReceived() routine never seems
> to be called. Is there something simple I am missing here?
>
> Thanks,
> Mike Karrys
> mike.kar...@ngc.com
>
> Server Code:
>
> public class Main extends IoHandlerAdapter {
>
>     private static final int SERVER_PORT = 8080;
>     private final static Logger LOGGER =
> LoggerFactory.getLogger(org.jeuron.test.mina.fl.server.Main.class);
>
>     public void init() throws IOException {
>         NioSocketAcceptor acceptor = new NioSocketAcceptor();
>
>         // Prepare the service configuration.
>         acceptor.getFilterChain().addLast(
>                 "codec",
>                 new ProtocolCodecFilter(
>                 new ObjectSerializationCodecFactory()));
>
>         acceptor.getFilterChain().addLast("logger", new LoggingFilter());
>
>         acceptor.setHandler(this);
>         acceptor.bind(new InetSocketAddress(SERVER_PORT));
>
>         System.out.println("Listening on port " + SERVER_PORT);
>
>     }
>
>     public Map process(Map record) {
>         int count = (Integer) record.get(Field.COUNT);
>         int length = (Integer) record.get(Field.LENGTH);
>         String input = (String) record.get(Field.CONTENTS);
>         StringBuilder output = new StringBuilder();
>
>         System.out.print("Processing(" + (length + 1) + ")\r");
>         for (int i = input.length(); i > 0; i--) {
>             output.append(input.charAt(i - 1));
>         }
>         record.put(Field.CONTENTS, output.toString());
>
>         if (count == length) {
>             System.out.println("\nFinished Processing " + (count + 1));
>         }
>
>         return record;
>     }
>
>     @Override
>     public void sessionOpened(IoSession session) {
>         LOGGER.info("sessionOpened.");
>         session.getConfig().setIdleTime(IdleStatus.BOTH_IDLE, 60);
>     }
>
>     @Override
>     public void messageReceived(IoSession session, Object message) {
>         Map input;
>         Map output;
>
>         LOGGER.info("messageReceived(" + message + ")");
>         if (message instanceof Map) {
>             input = (Map) message;
>             output = process(input);
>             session.write(output);
>         }
>     }
>
>     @Override
>     public void sessionIdle(IoSession session, IdleStatus status) {
>         LOGGER.info("Disconnecting the idle.");
>         session.close(true);
>     }
>
>     @Override
>     public void exceptionCaught(IoSession session, Throwable cause) {
>         session.close(true);
>     }
>
>     public static void main(String[] args) throws Exception {
>         Main main = new Main();
>         main.init();
>     }
> }
>
> Client Code:
>
> public class Main extends IoHandlerAdapter {
>
>     private final static Logger LOGGER =
> LoggerFactory.getLogger(org.jeuron.test.mina.fl.client.Main.class);
>     private static final String HOSTNAME = "localhost";
>     private static final int PORT = 8080;
>     private NioSocketConnector connector;
>     private IoSession session;
>     static char[] letter = {'A', 'B', 'C', 'D', 'E', 'F', 'G', 'H', 'I',
> 'J', 'K', 'L', 'M', 'N', 'O', 'P', 'Q', 'R', 'S', 'T', 'U', 'V', 'W', 'X',
> 'Y', 'Z'};
>     private long startTime = 0;
>     private long endTime = 0;
>     private int maxSent = 0;
>     private int receivedRecords = 0;
>     private long totalBytes = 0;
>     private int recordLengthValue = 0;
>     private int recordCountValue = 0;
>
>     public String readInput(String prompt) throws IOException {
>         String input = null;
>
>         System.out.println(prompt);
>         BufferedReader br = new BufferedReader(new
> InputStreamReader(System.in));
>         input = br.readLine();
>
>         return input;
>     }
>
>     public boolean init() throws Exception {
>         SocketAddress address = new InetSocketAddress(HOSTNAME, PORT);
>         LOGGER.info("Main:init() address[" + address + "]");
>
>         connector = new NioSocketConnector();
>         connector.setHandler(this);
>         for (;;) {
>             try {
>                 ConnectFuture future = connector.connect(new
> InetSocketAddress(HOSTNAME, PORT));
>                 future.awaitUninterruptibly();
>                 session = future.getSession();
>                 break;
>            } catch (RuntimeIoException e) {
>                 System.err.println("Failed to connect.");
>                 e.printStackTrace();
>                 Thread.sleep(5000);
>             }
>         }
>
>         //session = future1.getSession();
>
>         return true;
>     }
>
>     @Override
>     public void sessionOpened(IoSession session) {
>         try {
>             LOGGER.info("sessionOpened.");
>             this.session = session;
>             fixedLength(recordLengthValue, recordCountValue);
>
>         } catch (Exception ex) {
>             LOGGER.info("sessionOpened.exception(" + ex + ")");
>         }
>     }
>
>     @Override
>     public void messageReceived(IoSession session, Object message) {
>         LOGGER.info("Main:messageReceived() message[" + message + "]");
>         //System.out.println("Main:messageReceived() message[" + message +
> "]");
>
>         if (message instanceof Map) {
>             Map record = (Map) message;
>             totalBytes = totalBytes + (Integer) record.get(Field.LENGTH);
>             receivedRecords = receivedRecords + 1;
>
>             if (receivedRecords == maxSent) {
>                 endTime = System.currentTimeMillis();
>                 System.out.format("<<<<**** FixedLength( Total
> Records(%d), Total Bytes Read(%,10d), Avg Bytes Read(%d)%nThat took " +
> (endTime - startTime) + " milliseconds\n\n", receivedRecords, totalBytes,
> totalBytes / receivedRecords);
>             } else {
>                 System.out.print("***<<<< FixedLength.received(" +
> receivedRecords + ")\r");
>             }
>        }
>     }
>
>     @Override
>     public void exceptionCaught(IoSession session, Throwable cause) {
>         session.close(true);
>     }
>
>     public void fixedLength(int lengthValue, int countValue) throws
> Exception {
>         Map record = null;
>
>         startTime = System.currentTimeMillis();
>         totalBytes = 0;
>         receivedRecords = 0;
>         StringBuffer contents = new StringBuffer();
>         maxSent = countValue;
>
>         int k = 0;
>         for (int i = 0; i < lengthValue; i++) {
>             contents = contents.append(letter[k]);
>             if (k == 25) {
>                 k = 0;
>             } else {
>                 k++;
>             }
>         }
>
>         for (int i = 0; i < maxSent; i++) {
>
>             record = new HashMap();
>             record.put(Field.LENGTH, Integer.valueOf(i));
>             record.put(Field.COUNT, i);
>             record.put(Field.CONTENTS, contents.toString());
>
>             LOGGER.info("Main:fixedLength() Before session.write");
>             session.write(record);
>         }
>         System.out.println("\n");
>     }
>
>     public void process() throws Exception {
>         String input = null;
>         String[] line = null;
>
>
>         try {
>
>             input = null;
>             input = readInput("\nEnter Record Length: ");
>             line = input.split(" ");
>             recordLengthValue = Integer.parseInt(line[0]);
>
>             input = null;
>             input = readInput("\nEnter Record Count: ");
>             line = input.split(" ");
>             recordCountValue = Integer.parseInt(line[0]);
>
> //            fixedLength(recordLengthValue, recordCountValue);
>             init();
>
>         } finally {
>             connector.dispose();
>         }
>
>     }
>
>     public static void main(String[] args) throws Exception {
>
>         Main main = new Main();
> //        main.init();
>         main.process();
>
>     }
> }
>
>
>

Reply via email to