socketio单聊,群聊


一个简单的聊天程序,功能有单聊,群聊

页面如下所示:

Name后面跟的是当前登录人的名字,下方的列表是当前在线的用户,双击该用户名后,可以给该用户发送消息。再次双击同一用户,下方会显示给所有(All)人发消息。

socketio单聊,群聊_第1张图片











    

    Demo Chat

    

    


    
    
    

    


Chat

Name:
test



package com.corundumstudio.socketio.demo;

import com.corundumstudio.socketio.AckRequest;
import com.corundumstudio.socketio.Configuration;
import com.corundumstudio.socketio.SocketIOClient;
import com.corundumstudio.socketio.SocketIOServer;
import com.corundumstudio.socketio.listener.DataListener;
import com.corundumstudio.socketio.listener.DisconnectListener;
import com.google.common.collect.BiMap;
import com.google.common.collect.HashBiMap;

import java.util.ArrayList;

public class ChatLauncher {
    private static BiMap users = HashBiMap.create();
    private static ArrayList userLists = new ArrayList();

    public static void main(String[] args) throws InterruptedException {


        Configuration config = new Configuration();
        config.setHostname("localhost");
        config.setPort(9092);

        final SocketIOServer server = new SocketIOServer(config);
        server.addEventListener("groupChatEvent", ChatObject.class, new DataListener() {
            @Override
            public void onData(SocketIOClient client, ChatObject data, AckRequest ackRequest) {
                // broadcast messages to all clients
                server.getBroadcastOperations().sendEvent("groupChatEvent", data);
            }
        });

        server.addEventListener("chatEvent", ChatObject.class, new DataListener() {
            @Override
            public void onData(SocketIOClient socketIOClient, ChatObject chatObject, AckRequest ackRequest){
                System.out.println(chatObject);
                SocketIOClient fromSocketIoClient = users.get(chatObject.getUserName());
                SocketIOClient toSocketIoClient = users.get(chatObject.getToUser());
                if(toSocketIoClient!=null){
                    toSocketIoClient.sendEvent("chatEvent",chatObject);
                }
                if(fromSocketIoClient!=null){
                    fromSocketIoClient.sendEvent("chatEvent",chatObject);
                }
            }
        });

        server.addEventListener("login", ChatObject.class, new DataListener() {
            @Override
            public void onData(SocketIOClient socketIOClient, ChatObject chatObject, AckRequest ackRequest) {
                users.put(chatObject.getUserName(),socketIOClient);
                userLists.add(chatObject.getUserName());
                server.getBroadcastOperations().sendEvent("users",userLists);
            }
        });

        server.addDisconnectListener(new DisconnectListener() {
            @Override
            public void onDisconnect(SocketIOClient socketIOClient) {
                String userName = users.inverse().get(socketIOClient);
                userLists.remove(userName);
                users.remove(userName);
                server.getBroadcastOperations().sendEvent("users", userLists);
            }
        });

        server.start();

        Thread.sleep(Integer.MAX_VALUE);

        server.stop();
    }

}




你可能感兴趣的:(J2EE)