Client Server w/ Group-Chat.
This commit is contained in:
parent
4fcd68fef5
commit
5f01e494f4
@ -0,0 +1,96 @@
|
||||
package ch.unibas.dmi.dbis.cs108.Multiplayer.Client;
|
||||
|
||||
import java.net.Socket;
|
||||
import java.io.*;
|
||||
import java.util.Scanner;
|
||||
|
||||
public class Client {
|
||||
|
||||
private Socket socket;
|
||||
private BufferedReader in;
|
||||
private BufferedWriter out;
|
||||
public String userName;
|
||||
|
||||
public Client(Socket socket, String userName) {
|
||||
try {
|
||||
this.socket = socket;
|
||||
this.out = new BufferedWriter(new OutputStreamWriter(socket.getOutputStream()));
|
||||
this.in = new BufferedReader((new InputStreamReader((socket.getInputStream()))));
|
||||
this.userName = userName;
|
||||
} catch (IOException e) {
|
||||
e.printStackTrace();
|
||||
closeEverything(socket, in, out);
|
||||
}
|
||||
}
|
||||
|
||||
public void sendMessage() {
|
||||
try {
|
||||
out.write(userName);
|
||||
out.newLine();
|
||||
out.flush();
|
||||
|
||||
Scanner sc = new Scanner(System.in);
|
||||
while (socket.isConnected()) {
|
||||
String msg = sc.nextLine();
|
||||
out.write(userName + ": " + msg);
|
||||
out.newLine();
|
||||
out.flush();
|
||||
}
|
||||
} catch (IOException e) {
|
||||
e.printStackTrace();
|
||||
closeEverything(socket, in, out);
|
||||
}
|
||||
}
|
||||
|
||||
public void chatListener() {
|
||||
new Thread(new Runnable() {
|
||||
@Override
|
||||
public void run() {
|
||||
String chatMsg;
|
||||
|
||||
while(socket.isConnected()) {
|
||||
try {
|
||||
chatMsg = in.readLine();
|
||||
System.out.println(chatMsg);
|
||||
} catch (IOException e) {
|
||||
e.printStackTrace();
|
||||
closeEverything(socket, in, out);
|
||||
}
|
||||
|
||||
}
|
||||
}
|
||||
}).start();
|
||||
}
|
||||
|
||||
public void closeEverything(Socket socket, BufferedReader in, BufferedWriter out) {
|
||||
try {
|
||||
if (in != null) {
|
||||
in.close();
|
||||
}
|
||||
if (out != null) {
|
||||
out.close();
|
||||
}
|
||||
if (socket != null) {
|
||||
socket.close();
|
||||
}
|
||||
} catch (IOException e) {
|
||||
e.printStackTrace();
|
||||
}
|
||||
}
|
||||
|
||||
public static void main(String[] args) {
|
||||
Scanner sc = new Scanner(System.in);
|
||||
System.out.println("Choose a nickname: ");
|
||||
String username = sc.next();
|
||||
Socket socket;
|
||||
try {
|
||||
socket = new Socket("localhost", 42069);
|
||||
Client client = new Client(socket, username);
|
||||
client.chatListener();
|
||||
client.sendMessage();
|
||||
} catch (IOException e) {
|
||||
e.printStackTrace();
|
||||
}
|
||||
|
||||
}
|
||||
}
|
||||
@ -1,29 +0,0 @@
|
||||
package ch.unibas.dmi.dbis.cs108.Multiplayer.Client;
|
||||
|
||||
import java.io.*;
|
||||
import java.net.Socket;
|
||||
|
||||
public class ClientThread implements Runnable {
|
||||
private int name;
|
||||
private final Socket socket;
|
||||
|
||||
public ClientThread(int name, Socket socket) {
|
||||
this.name = name;
|
||||
this.socket = socket;
|
||||
}
|
||||
@Override
|
||||
public void run() {
|
||||
try {
|
||||
BufferedReader in = new BufferedReader(new InputStreamReader(socket.getInputStream()));
|
||||
BufferedWriter out = new BufferedWriter(new OutputStreamWriter(socket.getOutputStream()));
|
||||
while(socket.isConnected()){
|
||||
|
||||
}
|
||||
} catch (IOException e) {
|
||||
e.printStackTrace();
|
||||
}
|
||||
|
||||
|
||||
|
||||
}
|
||||
}
|
||||
@ -0,0 +1,4 @@
|
||||
package ch.unibas.dmi.dbis.cs108.Multiplayer.Server;
|
||||
|
||||
public class Chat {
|
||||
}
|
||||
@ -1,4 +1,86 @@
|
||||
package ch.unibas.dmi.dbis.cs108.Multiplayer.Server;
|
||||
|
||||
public class ClientHandler {
|
||||
import java.io.*;
|
||||
import java.net.Socket;
|
||||
import java.util.HashSet;
|
||||
import java.util.Scanner;
|
||||
|
||||
public class ClientHandler implements Runnable{
|
||||
private String clientUserName;
|
||||
private BufferedWriter out;
|
||||
private BufferedReader in;
|
||||
private Socket socket;
|
||||
Scanner sc;
|
||||
public static HashSet<ClientHandler> clientHandlers = new HashSet<>();
|
||||
|
||||
public ClientHandler(Socket socket) {
|
||||
try {
|
||||
this.socket = socket;
|
||||
this.out = new BufferedWriter(new OutputStreamWriter(socket.getOutputStream()));
|
||||
this.in = new BufferedReader((new InputStreamReader((socket.getInputStream()))));
|
||||
this.clientUserName = in.readLine();
|
||||
clientHandlers.add(this);
|
||||
broadcastMessage("SERVER: " + clientUserName + " has joined the Server");
|
||||
} catch (IOException e) {
|
||||
e.printStackTrace();
|
||||
closeEverything(socket, in, out);
|
||||
}
|
||||
}
|
||||
|
||||
@Override
|
||||
public void run() {
|
||||
String msg;
|
||||
|
||||
while(socket.isConnected()) {
|
||||
try {
|
||||
msg = in.readLine();
|
||||
broadcastMessage(msg);
|
||||
} catch (IOException e) {
|
||||
e.printStackTrace();
|
||||
closeEverything(socket, in, out);
|
||||
break;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
public void broadcastMessage(String msg) {
|
||||
for (ClientHandler client : clientHandlers) {
|
||||
try {
|
||||
if(!client.clientUserName.equals((clientUserName))) {
|
||||
client.out.write(msg);
|
||||
client.out.newLine();
|
||||
client.out.flush();
|
||||
} else {
|
||||
client.out.write("Message +" + msg + "* sent!");
|
||||
client.out.newLine();
|
||||
client.out.flush();
|
||||
}
|
||||
} catch (IOException e) {
|
||||
e.printStackTrace();
|
||||
closeEverything(socket, in ,out);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
public void removeClientHandler() {
|
||||
clientHandlers.remove(this);
|
||||
broadcastMessage("SERVER: " + clientUserName + " has left the server");
|
||||
}
|
||||
|
||||
public void closeEverything(Socket socket, BufferedReader in, BufferedWriter out) {
|
||||
removeClientHandler();
|
||||
try {
|
||||
if (in != null) {
|
||||
in.close();
|
||||
}
|
||||
if (out != null) {
|
||||
out.close();
|
||||
}
|
||||
if (socket != null) {
|
||||
socket.close();
|
||||
}
|
||||
} catch (IOException e) {
|
||||
e.printStackTrace();
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
@ -1,27 +1,61 @@
|
||||
package ch.unibas.dmi.dbis.cs108.Multiplayer.Server;
|
||||
|
||||
import java.io.IOException;
|
||||
import ch.unibas.dmi.dbis.cs108.Multiplayer.Client.Client;
|
||||
|
||||
import java.io.*;
|
||||
import java.net.ServerSocket;
|
||||
import java.net.Socket;
|
||||
import java.util.HashMap;
|
||||
import java.util.HashSet;
|
||||
|
||||
public class Server {
|
||||
|
||||
private static final int gamePort = 42069;
|
||||
private static int clientIndex = 0;
|
||||
private HashMap<String, Integer> nameToIndex = new HashMap<>();
|
||||
private HashMap<Integer, ClientHandler> indexToHandler = new HashMap<>();
|
||||
private ServerSocket serverSocket;
|
||||
|
||||
public static void main(String[] args) {
|
||||
public Server(ServerSocket serverSocket) {
|
||||
this.serverSocket = serverSocket;
|
||||
}
|
||||
|
||||
public void startServer() {
|
||||
try {
|
||||
ServerSocket gameServer = new ServerSocket(gamePort);
|
||||
System.out.println("Waiting for a connection on Port 42069");
|
||||
while(true) {
|
||||
Socket client = gameServer.accept();
|
||||
|
||||
|
||||
while (true) {
|
||||
Socket socket = serverSocket.accept();
|
||||
System.out.println("Port 42069 open on ");
|
||||
ClientHandler nextClient = new ClientHandler(socket);
|
||||
|
||||
Thread th = new Thread(nextClient);
|
||||
}
|
||||
} catch (IOException e) {
|
||||
e.printStackTrace();
|
||||
|
||||
}
|
||||
}
|
||||
|
||||
public void closeServerSocket() {
|
||||
try {
|
||||
if (serverSocket != null){
|
||||
serverSocket.close();
|
||||
}
|
||||
} catch (IOException e) {
|
||||
e.printStackTrace();
|
||||
}
|
||||
}
|
||||
|
||||
public static void main(String[] args) {
|
||||
ServerSocket serverSocket = null;
|
||||
try {
|
||||
serverSocket = new ServerSocket(gamePort);
|
||||
} catch (IOException e) {
|
||||
e.printStackTrace();
|
||||
}
|
||||
Server server = new Server(serverSocket);
|
||||
server.startServer();
|
||||
}
|
||||
|
||||
public static void broadcast(String msg){
|
||||
//TODO
|
||||
}
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user