Added source-code.
This commit is contained in:
parent
60ae7f9231
commit
fc73ec7553
3
LICENSE
3
LICENSE
@ -1,6 +1,6 @@
|
|||||||
The MIT License (MIT)
|
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
|
Permission is hereby granted, free of charge, to any person obtaining a copy
|
||||||
of this software and associated documentation files (the "Software"), to deal
|
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,
|
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
|
OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
|
||||||
SOFTWARE.
|
SOFTWARE.
|
||||||
|
|
||||||
|
13
README.md
13
README.md
@ -1,4 +1,15 @@
|
|||||||
ConsoleChat-Client
|
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
27
build.xml
Normal 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>
|
116
src/consolechat/client/Client.java
Normal file
116
src/consolechat/client/Client.java
Normal 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();
|
||||||
|
}
|
||||||
|
}
|
58
src/consolechat/client/ClientThread.java
Normal file
58
src/consolechat/client/ClientThread.java
Normal 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();
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
Loading…
Reference in New Issue
Block a user