博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
Apache mina 通信第二步发送消息 在线发送消息和离线接受消息
阅读量:6710 次
发布时间:2019-06-25

本文共 3683 字,大约阅读时间需要 12 分钟。

hot3.png

  这次是在第一步通讯上面加以补充  离线消息用的redis 做消息队列,假设 Apache mina做推送  http端请求发送信息  全部是json格式统一

查询用户public NewsObject findByName(NewsObject o)  throws Exception{         // TODO Auto-generated method stub        Json json = new Json();        logger.info("com.xinhua.ServiceImpl.UserServiceImpl.findByName into");        if (((UserForm) o).getUsername() == null                || ((UserForm) o).getUsername().equals("")) {            json.setReturnNo(USER_NULL);            logger.warn("login error code:"+USER_NULL);            return json;        } else if (((UserForm) o).getPassword() == null                || ((UserForm) o).getPassword().trim().equals("")) {            json.setReturnNo(PASSWORD_NULL);            logger.warn("login error code:"+PASSWORD_NULL);            return json;        }        ((UserForm) o).setUsername(((UserForm) o).getUsername().trim());        Users user = (Users) usersMapper.findByName(o);        if (user == null                || !user.getUsername().equals(((UserForm) o).getUsername().trim())                || !user.getPassword().equals(((UserForm) o).getPassword())) {            json.setReturnNo(USER_PASSWROD_ERROR);            logger.warn("login error code:"+USER_PASSWROD_ERROR);            return json;        }        json.setReturnNo(SESSION_CODE);        logger.info("User Login Success");        json.setRow(user);        logger.info("com.xinhua.ServiceImpl.UserServiceImpl.findByName into");        return json;    }返回app 接口代码    public NewsObject loginApp(UserForm form) throws Exception {        // TODO Auto-generated method stub         Json json = (Json) findByName(form);         final String userid = ((Users)json.getRow()).getId();        //String url = "";        if((SESSION_CODE)==json.getReturnNo()){//如果等于session code 那么表示登录成功                        form.setLoginKey(Resource.getInstall().randNumber());            json.setMsg(form.getLoginKey());            updateLoginKey(form);            //读取所有离线消息            List  list = redisTemplate.opsForList().range(REDIS_MESSAGE+((Users)json.getRow()).getId(),0,redisTemplate.opsForList().size(REDIS_MESSAGE+((Users)json.getRow()).getId()));            for (Object object : list) {                System.out.println("list -------"+object);            }            ((Users)json.getRow()).setMsgList(list); //读取redis 消息队列的消息 进行返回用户界面                                    //request.getRequestDispatcher("/user/web/index.do");            //url = "redirect:/user/web/index.do";//进行跳转操作        }                return json;    }短链接发送消息代码 进行发送消息public void sendMsg(NewsObject object) {        MessageForm form = (MessageForm)object;        UserForm user = new UserForm();        user.setId((form.getReviceId()));        Users users = ((Users)userService.findByIdGetUser(user));                if(users.getLoginStatus()==1){//如果在线表示Apache mina 在线 进行在线消息推送            Message message = new Message();            message.setType(5);//web版本短请求发送消息            user.setId(String.valueOf(form.getSendId()));            message.setUsername(((Users)userService.findByIdGetUser(user)).getUsername());            message.setMsg(form.getMsg());            message.setId(form.getId());            MyIoHandleWeb.getSession().write(JSON.toJSONString(message));        }        messageMapper.insertMessage(form);        redisTemplate.opsForList().rightPush(REDIS_MESSAGE+form.getReviceId(), JSON.toJSONString(form));    }服务端核心代码 当接受消息是5表示推送消息 那么进行查询操作  进行消息推送if(msg.getType()==5){            if(mina.map.get("user"+msg.getId()) !=  null){                mina.map.get("user"+msg.getId()).write(JSON.toJSONString(msg));//写到客户端            }        }

今天的代码更新到此 后续会做 一些新的功能

转载于:https://my.oschina.net/u/1261887/blog/206678

你可能感兴趣的文章
在iframe窗体内 获取父级的元素;;在父窗口中获取iframe中的元素
查看>>
尘埃落定 所有你想了解的Apple Watch综述
查看>>
Ubuntu任务栏如何设置为底部
查看>>
Firewalld防火墙
查看>>
LoRaWAN 基础知识与关键技术
查看>>
Oracle数据库通过定义TYPE及Member对象来实现日志信息的分级管理
查看>>
Akka在Flink中的使用剖析
查看>>
安装完android studio,启动时碰到"failed to load jvm dll"的解决方案
查看>>
php5.3管理操作
查看>>
Glibc 与 libc 的区别和联系
查看>>
spring cloud 学习(2) - eureka server注册中心高可用及安全认证
查看>>
设置UWP程序自启动(Automate launching Windows 10 UWP apps)
查看>>
spring-boot | rabbitMq-Direct模式
查看>>
《maven实战》学习笔记4——maven坐标和依赖
查看>>
全面屏手机的高颜值代表:vivo X20真机实拍图曝光
查看>>
OpenCV空洞填充算法
查看>>
“亚健康”网络安全环境是规模性攻击的温床
查看>>
MaxCompute - ODPS重装上阵 第四弹 - CTE,VALUES,SEMIJOIN
查看>>
DirectInput8Create
查看>>
SGI OpenGL Teapot
查看>>