The second step of Apache mina communication is to send messages online to send messages and offline to receive messages

  This time, it is supplemented on the first step of communication. Redis used for offline messages is used as a message queue. Suppose Apache mina is used to push http-side requests to send information. All of them are in json format.


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

Today's code is updated to this, and some new functions will be made in the future

{{o.name}}
{{m.name}}

Guess you like

Origin http://43.154.161.224:23101/article/api/json?id=324175350&siteId=291194637