package bettybook.math.sock;
import java.io.ObjectInputStream;
import java.io.ObjectOutputStream;
import java.io.Serializable;
import java.net.Socket;
public class SockMathC
{
public static void main(String[] args) throws Exception
{
try (Socket s = new Socket("localhost", 8888);
ObjectOutputStream oos = new ObjectOutputStream(s.getOutputStream());
ObjectInputStream ois = new ObjectInputStream(s.getInputStream()))
{
int i = 5, res = i;
while (i > 1)
{
oos.writeObject(new Val(i));
oos.writeObject(new Add(-1));
oos.flush();
i = ((Sum) ois.readObject()).val;
oos.writeObject(new Val(res));
oos.writeObject(new Mult(i));
oos.flush();
res = ((Prod) ois.readObject()).val;
}
oos.writeObject(new Bye());
oos.flush();
System.out.println("Facto: " + res);
}
}
}
abstract class NumMsg implements Serializable
{
private static final long serialVersionUID = 1L;
public int val;
public NumMsg(int val)
{
this.val = val;
}
}
class Val extends NumMsg
{
private static final long serialVersionUID = 1L;
public Val(int x)
{
super(x);
}
}
class Add extends NumMsg
{
private static final long serialVersionUID = 1L;
public Add(int val)
{
super(val);
}
}
class Sum extends NumMsg
{
private static final long serialVersionUID = 1L;
public Sum(int val)
{
super(val);
}
}
class Mult extends NumMsg
{
private static final long serialVersionUID = 1L;
public Mult(int val)
{
super(val);
}
}
class Prod extends NumMsg
{
private static final long serialVersionUID = 1L;
public Prod(int val)
{
super(val);
}
}
class Bye implements Serializable
{
private static final long serialVersionUID = 1L;
}