채팅 서버 - 낯선 사람 복호화 (9) 채팅 메시지 전송

5563 단어 서버잡담하다
제시: 공사가 좀 커서 개인적으로 잘 모르겠거나 논리성이 강하지 않을 수도 있습니다. 문제가 있으면 @ 저를 부탁합니다.원래 공정:https://github.com/LineChen/
5. 전송 정보는 클라이언트와 서버가 긴 연결을 유지하기 때문에 사용자 Id에 따라 사용자의 세션session을 얻을 수 있고session을 얻으면 메시지를 보낼 수 있다.채팅에 대해 주로 채팅 쌍방이 모두 온라인과 한 측이 오프라인인 상황으로 나뉜다.모두 온라인 상태는 처리하기 쉬우므로 직접 전송한다.한쪽이 오프라인일 때 데이터베이스에 오프라인 메시지를 저장하고 오프라인 친구가 로그인할 때 ta에게 보내야 한다.오프라인 메시지를 저장할 때 주의해야 할 것은 메시지 유형에 따라 처리하는 것이다(텍스트 메시지, 음성 메시지, 그림 메시지)./***단일 사용자에게 메시지 보내기 * @param moMsg * @param getterId */private void sendMsgToUser(iMoMsg moMsg, String getterId) {if(ManageClientSession.isContainsId(getterId)) {ManageClientSession.getSession(getterId).write(moMsg);/System.out.println("전송 성공...");}else { SqlModel model = new SqlModel(); if (!model.isTableExists(“mc_” + getterId))//“mc_” + userId model.createCacheTable(getterId);//캐시 데이터베이스 만들기 MsgDb msgDb = MsgTranceUtil.getInstance().Trance_Net2Db(moMoMsg); if(model.insertCacheMsg(msgDb, getterId) {//System.out.println("캐시 성공");}else {//System.out.println ("캐시 실패");}}
다음은 데이터베이스에 저장된 오프라인 메시지와 보내는 메시지 변환 클래스:packagecom.imomo_msg;
import java.text.SimpleDateFormat; import java.util.Date;
import com.alibaba.fastjson.JSON; import com.alibaba.fastjson.JSONObject; import com.server_utils.FileTools; import com.server_utils.StaticValues;
/*** 패키지 변환 도구* @author Administrator * */public class MsgTranceUtil {
public static MsgTranceUtil getInstance() {
    return new MsgTranceUtil();
}

/**
 *  
 * 
 * @param msgDb
 * @return
 */
public iMoMoMsg Trance_Db2Net(MsgDb msgDb) {
    iMoMoMsg moMsg = new iMoMoMsg();
    switch (msgDb.msgType) {
    case iMoMoMsgTypes.CHATING_TEXT_MSG:
        moMsg.symbol = '+';
        moMsg.msgJson = msgDb.msgJson;
        break;
    case iMoMoMsgTypes.CHATING_IMAGE_MSG:
        JSONObject json = JSON.parseObject(msgDb.msgJson);
        moMsg.symbol = '-';
        String imagePath = json.getString(MsgKeys.imagePath);
        moMsg.msgBytes = FileTools.getInstance().getMultyFileBytes(
                imagePath);
        json.remove(MsgKeys.imagePath);
        moMsg.msgJson = json.toJSONString();
        // 
        FileTools.getInstance().deleteFile(imagePath);
        break;
    case iMoMoMsgTypes.CHATING_VOICE_MSG:
        moMsg.symbol = '-';
        JSONObject json2 = JSON.parseObject(msgDb.msgJson);
        String voicePath = json2.getString(MsgKeys.voicePath);
        moMsg.msgBytes = FileTools.getInstance().getMultyFileBytes(
                voicePath);
        json2.remove(MsgKeys.voicePath);
        moMsg.msgJson = json2.toJSONString();
        FileTools.getInstance().deleteFile(voicePath);
        break;

    case iMoMoMsgTypes.ADD_FRIEND:
        moMsg.symbol = '+';
        moMsg.msgJson = msgDb.msgJson;
        break;

    case iMoMoMsgTypes.RESET_HEAD:
        JSONObject resetHeadjson = JSON.parseObject(msgDb.msgJson);
        moMsg.symbol = '-';
        String headPath = resetHeadjson.getString(MsgKeys.imagePath);
        moMsg.msgBytes = FileTools.getInstance().getMultyFileBytes(
                headPath);
        resetHeadjson.remove(MsgKeys.imagePath);
        moMsg.msgJson = resetHeadjson.toJSONString();
        // 
        FileTools.getInstance().deleteFile(headPath);
        break;

    }
    return moMsg;
}

/**
 *  
 * 
 * @param moMsg
 * @return
 */
public MsgDb Trance_Net2Db(iMoMoMsg moMsg) {
    MsgDb msgDb = new MsgDb();
    JSONObject json = JSON.parseObject(moMsg.msgJson);
    int msgtype = json.getIntValue(MsgKeys.msgType);
    switch (msgtype) {
    case iMoMoMsgTypes.CHATING_TEXT_MSG:
        break;
    case iMoMoMsgTypes.CHATING_IMAGE_MSG:
        String imagePath = StaticValues.MSG_CACHE_IMA_P_PATH
                + json.getString(MsgKeys.userId) + "_"
                + System.currentTimeMillis() + ".png";
        FileTools.getInstance().saveMultyFile(imagePath, moMsg.msgBytes);
        json.put(MsgKeys.imagePath, imagePath);
        break;
    case iMoMoMsgTypes.CHATING_VOICE_MSG:
        String voicePath = StaticValues.MSG_CACHE_VOI_P_PATH
                + json.getString(MsgKeys.userId) + "_"
                + System.currentTimeMillis() + ".amr";
        FileTools.getInstance().saveMultyFile(voicePath, moMsg.msgBytes);
        json.put(MsgKeys.voicePath, voicePath);
        break;
    case iMoMoMsgTypes.ADD_FRIEND:

//String headPath = StaticValues.HEAD_P_PATH //+ json.getString(MsgKeys.userId) + “.png”; //json.put(MsgKeys.imagePath, headPath); break;
    case iMoMoMsgTypes.RESET_HEAD:
        String headPath = StaticValues.MSG_CACHE_IMA_P_PATH
        + json.getString(MsgKeys.userId) + "_"
        + System.currentTimeMillis() + ".png";
        FileTools.getInstance().saveMultyFile(headPath, moMsg.msgBytes);
        json.put(MsgKeys.imagePath, headPath);
        break;

    }
    msgDb.msgType = msgtype;
    msgDb.msgJson = json.toJSONString();
    return msgDb;
}

}
그리고 오프라인 메시지 전송:/*** 오프라인 메시지 전송 * * @param session * @param userId * @param model */private void sendCachemsg (IoSession, String userId, SqlModel model) {if (model.isTableExists ("mc_"+userId)) {if(model.getMsgCount(userId)> 0) {//오프라인 메시지가 있음을 나타냅니다. List list = model.getCacheMsgs(userId); for(MsgDb msgDb:list) {iMoMsg moMsg = MsgTranceUtil.getInstance().Trance_Db2Net(msgDb);
                session.write(moMsg);
            }
            //  
            model.clearMsgCache(userId);
        }
    }
}

좋은 웹페이지 즐겨찾기