Added source-code.

This commit is contained in:
Deathsbreed 2014-11-17 21:10:30 -06:00
parent 60ae7f9231
commit fc73ec7553
5 changed files with 214 additions and 3 deletions

View File

@ -1,6 +1,6 @@
The MIT License (MIT)
Copyright (c) 2014 Nicolás A. Ortega
Copyright (c) 2014 Nicolás Andrés Ortega
Permission is hereby granted, free of charge, to any person obtaining a copy
of this software and associated documentation files (the "Software"), to deal
@ -19,4 +19,3 @@ AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
SOFTWARE.

View File

@ -1,4 +1,15 @@
ConsoleChat-Client
==================
This is the _client-side_ to the __ConsoleChat__ project. There's not much to say about the client, the interesting part is actually the [server](https://github.com/Deathsbreed/ConsoleChat-Server).
The client side to an IRC-like console program written in Java.
###Compiling
To compile the source code, make sure you have JDK and Apache Ant installed. Then run the following command:
```bash
$ ant
```
###Contributing
To contribute to the project, simply open a pull request and I'll make sure to get back to you as soon as possible.
###License
This program is licensed with an [MIT license](/LICENSE). However, please take into account that you took from the community, and you should make sure to give back.

27
build.xml Normal file
View File

@ -0,0 +1,27 @@
<project name="ConsoleChat-Client" basedir="." default="main" >
<property name="src.dir" value="src" />
<property name="bin.dir" value="bin" />
<property name="classes.dir" value="${bin.dir}/classes" />
<property name="jar.dir" value="${bin.dir}/jar" />
<property name="main-class" value="consolechat.client.Client" />
<target name="clean" >
<delete dir="bin" />
</target>
<target name="compile" >
<mkdir dir="${classes.dir}" />
<javac includeantruntime="false" srcdir="${src.dir}" destdir="${classes.dir}" />
</target>
<target name="jar" depends="compile" >
<mkdir dir="${jar.dir}" />
<jar destfile="${jar.dir}/${ant.project.name}.jar" basedir="${classes.dir}" >
<manifest>
<attribute name="Main-Class" value="${main-class}" />
</manifest>
</jar>
</target>
<target name="main" depends="jar" />
</project>

View File

@ -0,0 +1,116 @@
package consolechat.client;
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.1";
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: consolechat-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();
}
}

View File

@ -0,0 +1,58 @@
package consolechat.client;
import java.io.*;
import java.net.*;
/**
* @author Nicolás A. Ortega
* @copyright Nicolás A. Ortega
* @license MIT
* @year 2014
*
* For details on the copyright, look at the COPYRIGHT file that came with
* this program.
*
*/
public class ClientThread extends Thread {
private Socket socket = null;
private Client client = null;
private DataInputStream streamIn = null;
private boolean run = false;
// Constructor
public ClientThread(Client _client, Socket _socket) {
client = _client;
socket = _socket;
open();
start();
}
// Open all necessary streams/threads
public void open() {
try {
streamIn = new DataInputStream(socket.getInputStream());
} catch(IOException e) {
System.out.println("Error getting input stream: " + e);
client.stop();
}
run = true;
}
// Close the streams
public void close() throws IOException {
if(streamIn != null) { streamIn.close(); }
run = false;
}
// The run method which will be called every frame
public void run() {
while(run) {
try {
client.handle(streamIn.readUTF());
} catch(IOException e) {
System.out.println("Listening error: " + e.getMessage());
client.stop();
}
}
}
}