package labcommTCPtest.server;

import java.io.IOException;
import java.io.InputStream;
import java.io.OutputStream;
import java.net.Socket;
import java.net.ServerSocket;

import se.lth.control.labcomm.LabCommDecoderChannel;
import se.lth.control.labcomm.LabCommEncoderChannel;
import labcommTCPtest.gen.FooSample;

public class OneShotServer {//implements Handler {

	private OutputStream out;

	public OneShotServer(Socket s) throws IOException {
		out = s.getOutputStream();
	}

	public void test() {
		
		try {
			LabCommEncoderChannel e = new LabCommEncoderChannel(out );
			FooSample.register(e);
			FooSample sample = new FooSample();
			sample.s = "OneShotServer message";
			sample.x = 17;
			sample.y = 42;
			sample.a = new int[]{10,11,12};
			sample.t = 1717;
			sample.d = 0.42;
			printSample("Server sending", sample);
			FooSample.encode(e, sample);
			Thread.sleep(1);
			sample.x++;
			sample.y--;
			printSample("Server sending", sample);
			FooSample.encode(e, sample);
		} catch (Exception e) {
			e.printStackTrace();
		}
	}

	public static void main(String... args) {
		String server = "localhost";
		int port = 9999;
		try {
			ServerSocket ss = new ServerSocket(port);
			Socket s = ss.accept();
			OneShotServer c = new OneShotServer(s);
			c.test();
		} catch (IOException e) {
			e.printStackTrace();
		} catch (Exception e) {
			e.printStackTrace();
		}
	}

	private void printSample(String header, FooSample sample2) throws Exception {
		System.out.println(header);
		System.out.format("TestClient.invoke(%d, %d, %d, %f)\n", sample2.x, sample2.y, sample2.t, sample2.d);
	}
}