Apache mina 通信第二步发送消息 在线发送消息和离线接受消息

  这次是在第一步通讯上面加以补充  离线消息用的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<Object>  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

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值