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

  此次是在第一步通信上面加以补充  离线消息用的redis 作消息队列,假设 Apache mina作推送  http端请求发送信息  所有是json格式统一
java


查询用户
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));//写到客户端
            }
        }

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

相关文章
相关标签/搜索