/*
* Copyright (c) 2010-2012 Grid Dynamics Consulting Services, Inc, All Rights Reserved
* http://www.griddynamics.com
*
* This library is free software; you can redistribute it and/or modify it under the terms of
* the Apache License; either
* version 2.0 of the License, or any later version.
*
* THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
* AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
* IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
* DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE
* FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
* DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR
* SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER
* CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
* OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
* OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
*/
package com.griddynamics.jagger.test.target;
import javax.servlet.ServletContextEvent;
import javax.servlet.ServletContextListener;
import javax.ws.rs.Path;
import java.io.IOException;
import java.io.InputStream;
import java.io.OutputStream;
import java.net.ServerSocket;
import java.net.Socket;
public class TcpService implements ServletContextListener {
public static final int PORT = 5671;
public static final int SIZE = 1024;
public static final long COUNT = 10000000;
public TcpService() {
}
@Override
public void contextInitialized(ServletContextEvent servletContextEvent) {
}
@Override
public void contextDestroyed(ServletContextEvent servletContextEvent) {
}
static {
Thread thread = new Thread() {
@Override
public void run() {
for (;;) {
try {
ServerSocket serverSocket = new ServerSocket(PORT);
System.out.println("TcpService is started");
try {
for (;;) {
Socket socket = serverSocket.accept();
System.out.println("TcpService has new connection");
try {
long receivedSize = 0;
InputStream is = socket.getInputStream();
long startTime = System.currentTimeMillis();
int rate = 0;
for (long i = 0; i < COUNT; ++i) {
int size = is.read(new byte[SIZE]);
receivedSize += size;
rate += size;
long time = System.currentTimeMillis();
if (time - startTime >= 1000) {
System.out.println(String.format("TCP inbound total, %d KiB/sec", rate / 1024));
startTime = time;
rate = 0;
}
}
long sentSize = 0;
OutputStream os = socket.getOutputStream();
startTime = System.currentTimeMillis();
rate = 0;
for (long i = 0; i < COUNT; ++i) {
os.write(new byte[SIZE]);
sentSize += SIZE;
rate += SIZE;
long time = System.currentTimeMillis();
if (time - startTime >= 1000) {
System.out.println(String.format("TCP outbound total, %d KiB/sec", rate / 1024));
startTime = time;
rate = 0;
}
}
} finally {
socket.close();
System.out.println("TcpService connection is closed");
}
}
} finally {
serverSocket.close();
}
} catch (IOException e) {
e.printStackTrace();
}
}
}
};
thread.setDaemon(true);
thread.start();
}
}