Package bench.transfer

Source Code of bench.transfer.MainRunServer

/**
* Copyright (C) 2009-2012 Barchart, Inc. <http://www.barchart.com/>
*
* All rights reserved. Licensed under the OSI BSD License.
*
* http://www.opensource.org/licenses/bsd-license.php
*/
package bench.transfer;

import static util.UnitHelp.*;

import java.net.InetSocketAddress;
import java.nio.ByteBuffer;
import java.util.concurrent.atomic.AtomicLong;

import org.slf4j.Logger;
import org.slf4j.LoggerFactory;

import com.barchart.udt.MonitorUDT;
import com.barchart.udt.OptionUDT;
import com.barchart.udt.SocketUDT;
import com.barchart.udt.TypeUDT;

public class MainRunServer {

  private static Logger log = LoggerFactory.getLogger(MainRunServer.class);

  public static void main(final String[] args) {

    log.info("started SERVER");

    // specify server listening interface
    final String bindAddress = property("udt.bind.address");

    // specify server listening port
    final int localPort = Integer.parseInt(property("udt.local.port"));

    // specify how many packets must come before stats logging
    final int countMonitor = Integer
        .parseInt(property("udt.count.monitor"));

    try {

      final SocketUDT acceptor = new SocketUDT(TypeUDT.DATAGRAM);
      log.info("init; acceptor={}", acceptor.id());

      InetSocketAddress localSocketAddress = new InetSocketAddress(
          bindAddress, localPort);

      acceptor.bind(localSocketAddress);
      localSocketAddress = acceptor.getLocalSocketAddress();
      log.info("bind; localSocketAddress={}", localSocketAddress);

      acceptor.listen(10);
      log.info("listen;");

      final SocketUDT receiver = acceptor.accept();

      log.info("accept; receiver={}", receiver.id());

      assert receiver.id() != acceptor.id();

      final long timeStart = System.currentTimeMillis();

      //

      final InetSocketAddress remoteSocketAddress = receiver
          .getRemoteSocketAddress();

      log.info("receiver; remoteSocketAddress={}", remoteSocketAddress);

      StringBuilder text = new StringBuilder(1024);
      OptionUDT.appendSnapshot(receiver, text);
      text.append("\t\n");
      log.info("receiver options; {}", text);

      final MonitorUDT monitor = receiver.monitor();

      while (true) {

        final byte[] array = new byte[SIZE];

        final int result = receiver.receive(array);

        assert result == SIZE : "wrong size";

        getSequenceNumber(array);

        if (sequenceNumber % countMonitor == 0) {

          receiver.updateMonitor(false);
          text = new StringBuilder(1024);
          monitor.appendSnapshot(text);
          log.info("stats; {}", text);

          final long timeFinish = System.currentTimeMillis();
          final long timeDiff = 1 + (timeFinish - timeStart) / 1000;

          final long byteCount = sequenceNumber * SIZE;
          final long rate = byteCount / timeDiff;

          log.info("receive rate, bytes/second: {}", rate);

        }

      }

      // log.info("result={}", result);

    } catch (final Throwable e) {
      log.error("unexpected", e);
    }

  }

  static long sequenceNumber = 0;

  static void getSequenceNumber(final byte[] array) {

    final ByteBuffer buffer = ByteBuffer.wrap(array);

    final long currentNumber = buffer.getLong();

    if (currentNumber == sequenceNumber) {
      sequenceNumber++;
    } else {
      log.error("sequence error; currentNumber={} sequenceNumber={}",//
          currentNumber, sequenceNumber);
      System.exit(1);
    }

  }

  final static AtomicLong sequencNumber = new AtomicLong(0);

  private static final int SIZE = 1460;

}
TOP

Related Classes of bench.transfer.MainRunServer

TOP
Copyright © 2018 www.massapi.com. All rights reserved.
All source code are property of their respective owners. Java is a trademark of Sun Microsystems, Inc and owned by ORACLE Inc. Contact coftware#gmail.com.