Changes
This commit is contained in:
100
src/main/java/server/ChatServer.java
Normal file
100
src/main/java/server/ChatServer.java
Normal file
@@ -0,0 +1,100 @@
|
||||
package server;
|
||||
|
||||
import user.User;
|
||||
import org.apache.logging.log4j.LogManager;
|
||||
import org.apache.logging.log4j.Logger;
|
||||
|
||||
import java.io.BufferedReader;
|
||||
import java.io.IOException;
|
||||
import java.io.InputStreamReader;
|
||||
import java.io.PrintWriter;
|
||||
import java.net.ServerSocket;
|
||||
import java.net.Socket;
|
||||
import java.util.ArrayList;
|
||||
|
||||
|
||||
public class ChatServer implements Runnable {
|
||||
private int port = 9000;
|
||||
private ServerSocket serverSocket;
|
||||
private ArrayList<Socket> clientSockets = new ArrayList<Socket>();
|
||||
|
||||
private static final Logger logger = LogManager.getLogger();
|
||||
|
||||
public ChatServer() {
|
||||
}
|
||||
|
||||
public ChatServer(int port) {
|
||||
this.port = port;
|
||||
}
|
||||
|
||||
public ServerSocket getServerSocket() {
|
||||
return serverSocket;
|
||||
}
|
||||
|
||||
private User getOrCreateUser(String username) {
|
||||
return new User(username);
|
||||
}
|
||||
|
||||
private void SendMessage(User user, String msg) {
|
||||
try {
|
||||
for (Socket client : clientSockets) {
|
||||
PrintWriter out = new PrintWriter(client.getOutputStream(), true);
|
||||
|
||||
out.println(user.getUsername() + " " + msg);
|
||||
}
|
||||
} catch (IOException e) {
|
||||
e.printStackTrace();
|
||||
}
|
||||
}
|
||||
|
||||
private void handleClient(Socket socket) {
|
||||
try {
|
||||
|
||||
String msg;
|
||||
User user = null;
|
||||
|
||||
PrintWriter out = new PrintWriter(socket.getOutputStream(), true);
|
||||
BufferedReader in = new BufferedReader(new InputStreamReader(socket.getInputStream()));
|
||||
|
||||
out.println("Login: /login username");
|
||||
while ((msg = in.readLine()) != null) {
|
||||
if (user != null) {
|
||||
SendMessage(user, msg);
|
||||
}
|
||||
|
||||
if (user == null) {
|
||||
if (msg.toLowerCase().startsWith("/login")) {
|
||||
String username = msg.substring(6).strip();
|
||||
user = getOrCreateUser(username);
|
||||
clientSockets.add(socket);
|
||||
logger.info("client.Client sie połączył");
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
} catch (IOException e) {
|
||||
clientSockets.remove(socket);
|
||||
e.printStackTrace();
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
@Override
|
||||
public void run() {
|
||||
try {
|
||||
serverSocket = new ServerSocket(port);
|
||||
|
||||
logger.error("Test");
|
||||
|
||||
while (true) {
|
||||
Socket clientSocket = serverSocket.accept();
|
||||
|
||||
Thread thread = new Thread(() -> handleClient(clientSocket));
|
||||
thread.start();
|
||||
}
|
||||
|
||||
} catch (IOException e) {
|
||||
throw new RuntimeException(e);
|
||||
}
|
||||
}
|
||||
}
|
||||
Reference in New Issue
Block a user