package patrick;
import common.*;
import common.messages.*;
import java.lang.reflect.Array;
import java.net.*;
import java.io.*;
import java.nio.*;
import java.nio.channels.*;
import java.nio.charset.Charset;
import java.util.*;
class RemCliTest {
public static final int PORT = 44000;
public static void main (String [] args){
try {
System.out.println("CliTest.java");
// create TCP socket channel
SocketChannel channel = SocketChannel.open();
//System.out.println("CliTest.java: channel created");
channel.connect(new InetSocketAddress(InetAddress.getByName("fraser.sfu.ca"),PORT));
//System.out.println("CliTest.java: channel socket connected");
// create objectoutputstream & objectinputstream for TCP channel
ObjectOutputStream ostream = new ObjectOutputStream(channel.socket().getOutputStream());
//System.out.println("CliTest.java: ObjectOutputStream created");
// create & send a login message
byte [] bytes = LoginMessage.getLoginMessage("user1","password1");
//System.out.println("CliTest.java: login message created");
System.out.println(LoginMessage.getMessageString(bytes));
ostream.writeObject(bytes);
// read reply message
ObjectInputStream istream = new ObjectInputStream(channel.socket().getInputStream());
System.out.println("CliTest.java: ObjectInputStream created");
Object obj = istream.readObject();
int numBytes = Array.getLength(obj);
byte [] inputbytes = new byte[numBytes];
for (int i=0; i< numBytes; i++)
inputbytes[i] = Array.getByte(obj,i);
// if login was successful
if (LoginMessage.isLoginSuccessMessage(inputbytes)){
// get remote port number from success message
int port = LoginMessage.getPort(inputbytes);
System.out.printf("Port Number: %d\n", port);
// create datagram channel & connect to rem port
DatagramChannel dchannel = DatagramChannel.open();
//dchannel.socket().bind(new InetSocketAddress("localhost",44001));
dchannel.socket().connect(new InetSocketAddress(channel.socket().getInetAddress(),port));
// get localport of datagram socket
int localport = dchannel.socket().getLocalPort();
System.out.printf("UDP local port: %d\n", localport);
// send success message to send port number to server
//bytes = LoginMessage.getLoginSuccessMessage(localport);
//ostream.writeObject(bytes);
//ostream.writeObject((new DeathMessage( (byte) 1, (byte) 1, (byte) 1 )).getByteMessage());
// ostream.writeObject((new DeathMessage( (byte) 2, (byte) 2, (byte) 2 )).getByteMessage());
// ostream.writeObject((new DeathMessage( (byte) 3, (byte) 3, (byte) 3 )).getByteMessage());
// ostream.writeObject((new DeathMessage( (byte) 4, (byte) 4, (byte) 4 )).getByteMessage());
}
else{
System.out.println("Message was not LOGIN Success");
}
channel.close();
}
catch (Exception e){
e.printStackTrace();
}
}
}