채팅 서버 - 낯선 사람 복호화 (9) 채팅 메시지 전송
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);
}
}
}
이 내용에 흥미가 있습니까?
현재 기사가 여러분의 문제를 해결하지 못하는 경우 AI 엔진은 머신러닝 분석(스마트 모델이 방금 만들어져 부정확한 경우가 있을 수 있음)을 통해 가장 유사한 기사를 추천합니다:
집 서버 설계 (하드웨어 편)자신의 Redmine이나 ownCloud를 운용하기 위해 사쿠라 VPS, DigitalOcean, OpenShift 등을 놀랐습니다만, 침착 해 왔으므로 현상을 정리하고 싶습니다. 먼저 하드웨어 구성을 정리합니다. ...
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
CC BY-SA 2.5, CC BY-SA 3.0 및 CC BY-SA 4.0에 따라 라이센스가 부여됩니다.