来源:即时通讯网 - 即时通讯开发者社区!
轻量级开源移动端即时通讯框架。
快速入门 / 性能 / 指南 / 提问
轻量级Web端即时通讯框架。
详细介绍 / 精编源码 / 手册教程
移动端实时音视频框架。
详细介绍 / 性能测试 / 安装体验
基于MobileIMSDK的移动IM系统。
详细介绍 / 产品截图 / 安装体验
一套产品级Web端IM系统。
详细介绍 / 产品截图 / 演示视频
引用此评论
引用:JackJiang 发表于 2020-09-22 13:55 到Github下载最新MobileIMSDK v5,替换jar包:https://github.com/JackJiang2011/MobileIMSDK
引用:tang280 发表于 2020-09-22 14:27 很多api都变了,有替换的说明吗?
引用:yml 发表于 2020-10-10 23:33 博主你好,我在升级过程中有一些疑问, 具体如下:
package com.x52im.rainbowchat.im; import java.io.IOException; import com.x52im.rainbowchat.BaseConf; import net.x52im.mobileimsdk.server.ServerLauncher; import net.x52im.mobileimsdk.server.event.MessageQoSEventListenerS2C; import net.x52im.mobileimsdk.server.event.ServerEventListener; import net.x52im.mobileimsdk.server.network.Gateway; import net.x52im.mobileimsdk.server.network.GatewayTCP; import net.x52im.mobileimsdk.server.network.GatewayUDP; import net.x52im.mobileimsdk.server.processor.BridgeProcessor; import net.x52im.mobileimsdk.server.qos.QoS4ReciveDaemonC2S; import net.x52im.mobileimsdk.server.qos.QoS4SendDaemonS2C; /** * IM服务启动入口类。 * * @author Jack Jiang([url=http://www.52im.net/space-uid-1.html]http://www.52im.net/space-uid-1.html[/url]) * @version 1.0 */ public class ChatServerLauncher extends ServerLauncher { private static ChatServerLauncher instance = null; public static ChatServerLauncher getInstance() throws IOException { if(instance == null) { // 设置UDP网络监听端口(如果需修改此端口号,请前往配置文件中修改) GatewayUDP.PORT = BaseConf.getInstance().getIM_SERVER_UDP_LISTENNING_PORT(); // 设置TCP网络监听端口(如果需修改此端口号,请前往配置文件中修改) GatewayTCP.PORT = BaseConf.getInstance().getIM_SERVER_TCP_LISTENNING_PORT(); // 设置服务端支持UDP、TCP协议情况(默认同时支持两种,如需修改请前往配置文件中修改) boolean isSupportUDP = BaseConf.getInstance().getIM_SERVER_UDP_SUPPORT(); boolean isSupportTCP = BaseConf.getInstance().getIM_SERVER_TCP_SUPPORT(); ServerLauncher.supportedGateways = (isSupportUDP? Gateway.SUPPORT_UDP:0) | (isSupportTCP? Gateway.SUPPORT_TCP:0); instance = new ChatServerLauncher(); // 开启或关闭Debug日志输出 QoS4SendDaemonS2C.getInstance().setDebugable(true); QoS4ReciveDaemonC2S.getInstance().setDebugable(false); // QoS4SendDaemonB2C.getInstance().setDebugable(true); // QoS4ReciveDaemonC2B.getInstance().setDebugable(false); // 关闭与Web端的消息互通桥接器 (TODO:如需与Web端IM互通,请配置此项为ture,否则请设为false) ServerLauncher.bridgeEnabled = BaseConf.getInstance().getIM_BRIDGE_ENABLED(); // 跨服桥接器MQ的URI(本参数只在ServerLauncher.bridgeEnabled为true时有意义) BridgeProcessor.IMMQ_URI = BaseConf.getInstance().getIM_BRIDGE_MQ_URI(); } return instance; } public ChatServerLauncher() throws IOException { super(); } /** * 初始化回调处理事件监听器。 * <p> * 本类重写 {[url=home.php?mod=space&uid=5196]@link[/url] #initListeners()}方法,以实现应用层的回调监听器以便实现自定义业务 * 逻辑,可以设置的回调监听器有: {@link #setServerEventListener(ServerEventListener)} * 和 {@link #setServerMessageQoSEventListener(MessageQoSEventListenerS2C)}。 */ @Override protected void initListeners() { // ** 设置回调 this.setServerEventListener(ChatServerEventListener.getInstance()); } /** * 重写父类的本方法,方便直接使用本工程中的ChatServerEventListener(即ServerEventListener * 接口的实现类。 * * {@inheritDoc} */ @Override public ChatServerEventListener getServerEventListener() { return (ChatServerEventListener)serverCoreHandler.getServerEventListener(); } }
SendResult code = new SendResult(false, null); // 遍历在线好友列表,看看该好友是否在线 if(liveUsers.containsKey(friend_user_uid)) { code = MessageHelper.sendOnlineMessage(friend_user_uid, userId); if(code.isCode()) LoggerFactory.getLog().debug("[RBChat]》登陆用户"+userId+"向它的好友"+friend_user_uid+"/"+friend_user_mail+"发送上线通知成功!"); else LoggerFactory.getLog().debug("[RBChat]》登陆用户"+userId+"向它的好友"+friend_user_uid+"/"+friend_user_mail+"发送上线通知失败,错误code="+code); } else { LoggerFactory.getLog().debug("[RBChat]》登陆用户"+userId+"的好友"+friend_user_uid+"/"+friend_user_mail+"不在线,无需发送上线通知。"); }
// 遍历在线好友列表,看看该好友是否在线 if(liveUsers.containsKey(friend_user_uid)) { // 指令发送结果观察者(因为通信底层netty是异步通知数据发送结果的) SendResultObserver sendResultObserver = new SendResultObserver(){ @Override public void update(boolean code, Protocal p) { if(code) LoggerFactory.getLog().debug("[RBChat]》登陆用户"+userId+"向它的好友"+friend_user_uid+"/"+friend_user_mail+"发送上线通知成功!"); else LoggerFactory.getLog().debug("[RBChat]》登陆用户"+userId+"向它的好友"+friend_user_uid+"/"+friend_user_mail+"发送上线通知失败,错误code="+code); } }; MessageHelper.sendOnlineMessage(friend_user_uid, userId, sendResultObserver); } else { LoggerFactory.getLog().debug("[RBChat]》登陆用户"+userId+"的好友"+friend_user_uid+"/"+friend_user_mail+"不在线,无需发送上线通知。"); }
public void putUser(String user_id, IoSession session) { if(onlineSessions.containsKey(user_id)) { logger.debug("[IMCORE]【注意】用户id="+user_id+"已经在在线列表中了,session也是同一个吗?" +(onlineSessions.get(user_id).hashCode() == session.hashCode())); // 踢出老的session logOutOldSession(user_id, session); } onlineSessions.put(user_id, session); __printOnline();// just for debug } /** * 一个用户,不可以登录多个端 * @param user_id * @param session */ private void logOutOldSession(String user_id, IoSession session) { IoSession oldSession = onlineSessions.get(user_id); if (oldSession == null) { logger.debug("logOutOldSession oldSession is null user_id: "+user_id+"------------------->"); return; } // 相同的端登录 不T if (oldSession.hashCode() == session.hashCode()) { logger.debug("logOutOldSession session hashcode equals user_id: "+user_id+"------------------->"); return; } try { // 给之前端session发送 logout消息 /** 下线通知报文头 */ int LOG_OUT = 99; logger.debug("logOutOldSession send logout message user_id: "+user_id+"------------------->"); LocalSendHelper.sendData(oldSession, ProtocalFactory.createCommonData("logout", "0", user_id, false, null, LOG_OUT)); oldSession.removeAttribute(OnlineProcessor.USER_ID_IN_SESSION_ATTRIBUTE); oldSession.close(true); } catch (Exception e) { logger.debug("logOutOldSession send data exception hashcode equals user_id: "+user_id+"------------------->"); e.printStackTrace(); } }
LocalSendHelper.sendData(oldSession, ProtocalFactory.createCommonData("logout", "0", user_id, false, null, LOG_OUT)); oldSession.removeAttribute(OnlineProcessor.USER_ID_IN_SESSION_ATTRIBUTE); oldSession.close(true);
引用:yml 发表于 2020-10-12 21:28 博主你好,在升级到 MobileIMSDKServer.jar 5.0版本的时候,之前有写过一个用户在移动端只能在一个设备上登 ...
session.attr(OnlineProcessor.USER_ID_IN_SESSION_ATTRIBUTE_ATTR).set(loginInfo.getLoginUserId());
session.attr(OnlineProcessor.USER_ID_IN_SESSION_ATTRIBUTE_ATTR).set(null);
public static String getUserIdFromSession(Channel session) { Object attr = null; if(session != null) { attr = session.attr(USER_ID_IN_SESSION_ATTRIBUTE_ATTR).get(); if(attr != null) return (String)attr; } return null; }
引用:abbott 发表于 2020-11-18 16:22 Android 端 UDP 升级为V5的TCP 模式 遇到的问题 1,升级完jar包后,所有带有UDP字样的方法名,都去掉了UDP ...
精华主题数超过100个。
连续任职达2年以上的合格正式版主
为论区做出突出贡献的开发者、版主等。
Copyright © 2014-2024 即时通讯网 - 即时通讯开发者社区 / 版本 V4.4
苏州网际时代信息科技有限公司 (苏ICP备16005070号-1)
Processed in 0.171875 second(s), 43 queries , Gzip On.