⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 chatservice.java

📁 是离开的肌肤了卡机是离开的就富利卡及是了的开发及拉考试及的福利科技阿斯利康的肌肤莱卡及时的离开福建阿斯顿发
💻 JAVA
字号:
/** *  */package org.cometd.demo;import java.util.ArrayList;import java.util.HashMap;import java.util.Map;import java.util.concurrent.ConcurrentHashMap;import java.util.concurrent.ConcurrentMap;import org.cometd.Bayeux;import org.cometd.Channel;import org.cometd.Client;import org.cometd.RemoveListener;import org.mortbay.cometd.BayeuxService;import org.mortbay.cometd.ChannelImpl;import org.mortbay.log.Log;public class ChatService extends BayeuxService{    /**     * A map(channel, map(userName, clientId))     */    private final ConcurrentMap<String, Map<String, String>> _members = new ConcurrentHashMap<String, Map<String, String>>();        public ChatService(Bayeux bayeux)    {        super(bayeux, "chat");        subscribe("/chat/**", "trackMembers");        subscribe("/service/privatechat", "privateChat");    }        public void trackMembers(final Client joiner, final String channelName, Map<String, Object> data, final String messageId)    {        if (Boolean.TRUE.equals(data.get("join")))        {            Map<String, String> membersMap = _members.get(channelName);            if (membersMap == null)            {                Map<String, String> newMembersMap = new ConcurrentHashMap<String, String>();                membersMap = _members.putIfAbsent(channelName, newMembersMap);                if (membersMap == null) membersMap = newMembersMap;            }                        final Map<String, String> members = membersMap;            final String userName = (String)data.get("user");            members.put(userName, joiner.getId());            joiner.addListener(new RemoveListener()            {                public void removed(String clientId, boolean timeout)                {                    members.values().remove(clientId);                    Log.info("members: " + members);                    // Broadcast the members to all existing members                    Channel channel = getBayeux().getChannel(channelName, false);                    if (channel != null) channel.publish(getClient(), members.keySet(), messageId);                }            });            Log.info("Members: " + members);            // Broadcast the members to all existing members            getBayeux().getChannel(channelName, false).publish(getClient(), members.keySet(), messageId);        }    }    public void privateChat(Client source, String channel, Map<String, Object> data, String messageId)    {        String roomName = (String)data.get("room");        Map<String, String> membersMap = _members.get(roomName);        String[] peerNames = ((String)data.get("peer")).split(",");        ArrayList<Client> to = new ArrayList<Client>(peerNames.length);                for (String peerName : peerNames)        {            String peerId = membersMap.get(peerName);            if (peerId!=null)            {                Client peer = getBayeux().getClient(peerId);                if (peer!=null)                    to.add(peer);            }        }        if (to.size()>0)        {            {                Map<String, Object> message = new HashMap<String, Object>();                message.put("chat", data.get("chat"));                message.put("user", data.get("user"));                message.put("scope", "private");                ((ChannelImpl)(getBayeux().getChannel(roomName,false))).deliver(getClient(),to,message,messageId);                source.deliver(getClient(), roomName, message, messageId);            }        }        else if (!"silent".equals((String)data.get("peer")))        {            Map<String, Object> message = new HashMap<String, Object>();            message.put("chat", "Unknown user(s): "+data.get("peer"));            message.put("user", "SERVER");            message.put("scope", "error");            source.deliver(source, roomName, message, messageId);        }    }}

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -