115 lines
2.8 KiB
Java
115 lines
2.8 KiB
Java
import java.net.*;
|
|
import java.io.*;
|
|
import java.lang.*;
|
|
|
|
/**
|
|
* @author Nicolás A. Ortega
|
|
* @copyright Nicolás A. Ortega
|
|
* @license MIT
|
|
* @year 2014
|
|
*
|
|
*/
|
|
public class Client implements Runnable {
|
|
private String version = "v1.0";
|
|
private Socket socket = null;
|
|
private ClientThread cThread = null;
|
|
private DataOutputStream streamOut = null;
|
|
private BufferedReader console = null;
|
|
private Thread thread = null;
|
|
|
|
public static void main(String[] args) {
|
|
if(args.length != 2) {
|
|
System.out.println("Usage: java Client [server] [port]");
|
|
} else {
|
|
new Client(args[0], Integer.parseInt(args[1]));
|
|
}
|
|
}
|
|
|
|
// Constructor method
|
|
public Client(String server, int port) {
|
|
System.out.println("ConsoleChat client " + version + " Copyright (C) 2014 Nicolás A. Ortega\n" +
|
|
"This program comes with ABSOLUTELY NO WARRANTY; details in WARRANTY file.\n" +
|
|
"This is free software, and you are welcome to redistribute it\n" +
|
|
"under certain conditions; details in LICENSE file.\n");
|
|
|
|
try {
|
|
// Create a new socket connection
|
|
System.out.println("Connecting to server...");
|
|
socket = new Socket(server, port);
|
|
System.out.println("Connected!");
|
|
start();
|
|
} catch(UnknownHostException uhe) {
|
|
System.out.println("Host unknown: " + uhe.getMessage());
|
|
} catch(IOException e) {
|
|
System.out.println("Unknown exception: " + e.getMessage());
|
|
}
|
|
}
|
|
|
|
// The run method containing the main loop
|
|
public void run() {
|
|
String uinput;
|
|
while(thread != null) {
|
|
try {
|
|
uinput = console.readLine();
|
|
if(uinput.equals("/clientVersion")) {
|
|
System.out.println(version);
|
|
} else {
|
|
streamOut.writeUTF(uinput);
|
|
streamOut.flush();
|
|
}
|
|
} catch(IOException e) {
|
|
System.out.println("Sending error: " + e.getMessage());
|
|
stop();
|
|
}
|
|
}
|
|
}
|
|
|
|
// Handle messages
|
|
public void handle(String msg) {
|
|
if(msg.equals("/quit")) {
|
|
System.out.println("Goodbye bye. Press RETURN to exit...");
|
|
stop();
|
|
} else {
|
|
System.out.println(msg);
|
|
if(msg.length() > 6 && msg.substring(0, 5).equals("Kick:")) {
|
|
stop();
|
|
}
|
|
}
|
|
}
|
|
|
|
// Open and start all necessary threads
|
|
private void start() throws IOException {
|
|
console = new BufferedReader(new InputStreamReader(System.in));
|
|
streamOut = new DataOutputStream(socket.getOutputStream());
|
|
|
|
if(thread == null) {
|
|
cThread = new ClientThread(this, socket);
|
|
thread = new Thread(this);
|
|
thread.start();
|
|
}
|
|
}
|
|
|
|
// Stop and close all necessary threads
|
|
public void stop() {
|
|
if(thread != null) {
|
|
thread.interrupt();
|
|
thread = null;
|
|
}
|
|
|
|
try {
|
|
if(console != null) { console.close(); }
|
|
if(streamOut != null) { streamOut.close(); }
|
|
if(socket != null) { socket.close(); }
|
|
} catch(IOException e) {
|
|
System.out.println("Error closing...");
|
|
}
|
|
|
|
try {
|
|
cThread.close();
|
|
} catch(IOException e) {
|
|
System.out.println("Error closing the thread: " + e);
|
|
}
|
|
cThread.interrupt();
|
|
}
|
|
}
|