package client;

import java.net.*;
import java.io.*;

public class SlimeEndpoint {
	ObjectInputStream ois;
	ObjectOutputStream oos;

	public SlimeEndpoint(ServerSocket ss) throws IOException {
		Socket sock;
		InputStream is;
		OutputStream os;

		System.out.println(
			"Waiting for connections on "
				+ ss.getInetAddress()
				+ ":"
				+ ss.getLocalPort());
		sock = ss.accept();
		System.out.println(
			"Connection from "
				+ sock.getLocalAddress()
				+ ":"
				+ sock.getLocalPort());
		os = sock.getOutputStream();
		oos = new ObjectOutputStream(os);
		is = sock.getInputStream();
		ois = new ObjectInputStream(is);
	}

	public SlimeEndpoint(InetAddress server_addr, int server_port)
		throws IOException {
		Socket sock;
		InputStream is;
		OutputStream os;

		System.out.println("Connecting to " + server_addr + ":" + server_port);
		sock = new Socket(server_addr, server_port);
		System.out.println("Connected to " + sock);
		is = sock.getInputStream();
		ois = new ObjectInputStream(is);
		os = sock.getOutputStream();
		oos = new ObjectOutputStream(os);
	}

	public void sendPacket(SlimePacket sp) {
		try {
			oos.writeObject(sp);
			oos.flush();
		} catch (IOException io) {
			System.out.println("Error " + io);
			System.exit(1);
		}
	}

	public SlimePacket receivePacket() {
		SlimePacket result = null;

		try {
			result = (SlimePacket) ois.readObject();
		} catch (Exception e) {
			System.out.println("Error " + e);
			System.exit(1);
		}

		return result;
	}
}
