Simple chat app

1 to 1 Chat

Server

import com.socketio4j.socketio.*;

/**
 * Direct 1-to-1 Chat Server (single file)
 * Room name is deterministic: alphabetical pair
 * e.g. directRoom("bob","alice") = "alice:bob"
 */
public class DirectChatServer {

    public static void main(String[] args) {
        Configuration cfg = new Configuration();
        cfg.setHostname("localhost");
        cfg.setPort(9092);

        SocketIOServer server = new SocketIOServer(cfg);

        // client requests to join direct chat room
        server.addEventListener("chat:join", ChatRequest.class, (client, req, ack) -> {
            String room = RoomUtil.directRoom(req.me, req.with);
            client.joinRoom(room);
            log.info("{} joined room {}", req.me, room);
        });

        // send direct message to private room
        server.addEventListener("chat:msg", ChatMessage.class, (client, msg, ack) -> {
            String room = RoomUtil.directRoom(msg.from, msg.to);
            server.getRoomOperations(room).sendEvent("chat:msg", msg);
        });

        server.start();
        log.info("Direct chat server :9092 started");
    }

    // === Data Structures ===

    public static class ChatRequest {
        public String me;     // current user
        public String with;   // target user
    }

    public static class ChatMessage {
        public String from;   // sender
        public String to;     // receiver
        public String text;   // message
    }

    // === Utility Class ===

    public static class RoomUtil {
        /**
         * Deterministic private room name
         * ensures same room for both orders
         */
        public static String directRoom(String u1, String u2) {
            if (u1.compareToIgnoreCase(u2) < 0) return u1 + ":" + u2;
            return u2 + ":" + u1;
        }
    }
}

Client

Group Chat

Server

Client

Last updated

Was this helpful?