diff --git a/src/HttpServer/logic/datadef.go b/src/HttpServer/logic/datadef.go index 95f137a..3f75806 100644 --- a/src/HttpServer/logic/datadef.go +++ b/src/HttpServer/logic/datadef.go @@ -140,6 +140,49 @@ type QueryBrifeMessageResp struct { Result QueryBrifeMessageResult `json:"result"` } +type QueryChatMessageReq struct { + Uuid int `json:"uuid"` + Ctype int `json:"ctype"` + Taruuid int `json:"taruuid"` +} + +type QueryChatMessageDatas []QueryChatMessageData + +func (s QueryChatMessageDatas) Len() int { + return len(s) +} + +func (s QueryChatMessageDatas) Swap(i, j int) { + s[i], s[j] = s[j], s[i] +} + +func (s QueryChatMessageDatas) Less(i, j int) bool { + return s[i].Chattime > s[i].Chattime +} + +type QueryChatMessageData struct { + Uuid int `json:"uuid"` + Sex int `json:"sex"` + Chattime int `json:"chattime"` + Headurl string `json:"headurl"` + Nickname string `json:"nickname"` + Message string `json:"message"` +} + +type QueryChatMessageDesc struct { + Channelinfo []QueryChatMessageData `json:"channelinfo"` +} + +type QueryChatMessageResult struct { + Code int `json:"code"` + Data QueryChatMessageDesc `json:"data"` +} + +type QueryChatMessageResp struct { + Status string `json:"status"` + Result QueryChatMessageResult `json:"result"` +} + type QueryNewMessageReq struct { Uuid int `json:"uuid"` } diff --git a/src/HttpServer/logic/errordef.go b/src/HttpServer/logic/errordef.go index e650681..24bf52f 100644 --- a/src/HttpServer/logic/errordef.go +++ b/src/HttpServer/logic/errordef.go @@ -1,46 +1,46 @@ package logic - const ( - ERROR_OK = 0 //没有错误 - ERROR_JSONUNMASHFAILED = 1 //json解析失败 - ERROR_GETUSERBASICFAILED = 2 //获取玩家basic数据失败 - ERROR_GETUSEREXTFAILED = 3 //获取玩家ext数据失败 - ERROR_GETUSERIDFAILED = 4 //获取玩家uuid失败 - ERROR_GETUSERMAPBYUIDFAILED = 5 //从玩家在线数据获取失败 - ERROR_SRVDB_FAILED = 6 //服務器存储数据失败或者读取失败 - ERROR_HTTPPOSTFAILED = 7 //http请求失败 - ERROR_TEAM_ALREADYEXIST = 8 //队伍名称已经存在 - ERROR_CREATE_SHOPNOTENOUGH = 9 //创建队伍店铺数量不够 - ERROR_QUERYTEAMID_FAILED = 10 //查询队伍id失败 - ERROR_GETTEAMINFO_FAILED = 11 //查询队伍信息失败 - ERROR_NOTCAPTION = 12 //不是队长无法修改队伍信息 - ERROR_TEAMNAMETHSDAME = 13 //修改队伍时名称重复 - ERROR_TEAMALREADYINTEAM = 14 //已经在队伍中无法再加入 - ERROR_TEAMNOTINTEAM = 15 //不在在队伍中无法再推出 - ERROR_GETUSERINFOBYIDFAILED = 16 //通过uid查询玩家数据失败 - ERROR_GETTEAMLISTFAILED = 17 //查询队伍列表失败 - ERROR_GETFRIENDLISTAILED = 18 //获取好友列表失败 - ERROR_INLISTAILED = 19 //已经在好友列表无法再添加 - ERROR_FRIENDISMAX = 20 //好友人数已经达到上限无法继续添加 - ERROR_FRIENDGETAPPLISTFAILED = 21 //获取申请好友列表失败 - ERROR_FRIENDAPPLYLIMIT = 22 //当日申请已达上限 - ERROR_FRIENDALREDAYINAPPLYLIST = 23 //已经在申请列表 - RROR_FRIENDGETAPPROVELISTFAILED = 24 //获取申请好友列表失败 - RROR_FRIENDINAPPROVELISTFAILED = 25 //已经在等待批准列表 - ERROR_FRIENDAPPROVELIMIT = 26 //当日批准已达上限 - ERROR_FRIENDGETRECOMMADNFAILED = 27 //获取推荐好友失败 - ERROR_NOTINAPPROVELIST = 28 //玩家不在好友申请列表 - ERROR_FRIENDAPPROVEFAILED = 29 //好友审批失败 - ERROR_FRIENDNOTFRIEND = 30 //不是好友 - ERROR_FRIENDDELFRIENDFAILED = 31 //删除好友失败 + ERROR_OK = 0 //没有错误 + ERROR_JSONUNMASHFAILED = 1 //json解析失败 + ERROR_GETUSERBASICFAILED = 2 //获取玩家basic数据失败 + ERROR_GETUSEREXTFAILED = 3 //获取玩家ext数据失败 + ERROR_GETUSERIDFAILED = 4 //获取玩家uuid失败 + ERROR_GETUSERMAPBYUIDFAILED = 5 //从玩家在线数据获取失败 + ERROR_SRVDB_FAILED = 6 //服務器存储数据失败或者读取失败 + ERROR_HTTPPOSTFAILED = 7 //http请求失败 + ERROR_TEAM_ALREADYEXIST = 8 //队伍名称已经存在 + ERROR_CREATE_SHOPNOTENOUGH = 9 //创建队伍店铺数量不够 + ERROR_QUERYTEAMID_FAILED = 10 //查询队伍id失败 + ERROR_GETTEAMINFO_FAILED = 11 //查询队伍信息失败 + ERROR_NOTCAPTION = 12 //不是队长无法修改队伍信息 + ERROR_TEAMNAMETHSDAME = 13 //修改队伍时名称重复 + ERROR_TEAMALREADYINTEAM = 14 //已经在队伍中无法再加入 + ERROR_TEAMNOTINTEAM = 15 //不在在队伍中无法再推出 + ERROR_GETUSERINFOBYIDFAILED = 16 //通过uid查询玩家数据失败 + ERROR_GETTEAMLISTFAILED = 17 //查询队伍列表失败 + ERROR_GETFRIENDLISTAILED = 18 //获取好友列表失败 + ERROR_INLISTAILED = 19 //已经在好友列表无法再添加 + ERROR_FRIENDISMAX = 20 //好友人数已经达到上限无法继续添加 + ERROR_FRIENDGETAPPLISTFAILED = 21 //获取申请好友列表失败 + ERROR_FRIENDAPPLYLIMIT = 22 //当日申请已达上限 + ERROR_FRIENDALREDAYINAPPLYLIST = 23 //已经在申请列表 + RROR_FRIENDGETAPPROVELISTFAILED = 24 //获取申请好友列表失败 + RROR_FRIENDINAPPROVELISTFAILED = 25 //已经在等待批准列表 + ERROR_FRIENDAPPROVELIMIT = 26 //当日批准已达上限 + ERROR_FRIENDGETRECOMMADNFAILED = 27 //获取推荐好友失败 + ERROR_NOTINAPPROVELIST = 28 //玩家不在好友申请列表 + ERROR_FRIENDAPPROVEFAILED = 29 //好友审批失败 + ERROR_FRIENDNOTFRIEND = 30 //不是好友 + ERROR_FRIENDDELFRIENDFAILED = 31 //删除好友失败 ERROR_FRIENDGETFRIENDINFOFAILED = 32 //获取好友信息失败 - ERROR_WECHATLOGINFAILED = 33 //获取好友信息失败 - ERROR_REGEISTACCOUNTEXIST = 34 //注册账号重复 - ERROR_ACCOUNTPWDWRONG= 35 //账号登录密码不对 - ERROR_TEAMISMAX= 36 //队伍人数已满 - ERROR_INVITEREAWARD_FETCHED= 37 //邀请奖励已经领取 - ERROR_ALREADY_INVITED= 38 //该玩家已经被邀请了 - ERROR_DAGONG_FULL= 39 //打工人数已经满了 无法继续打工 - ERROR_ALREADY_INWORK= 40 //正在打工中,无法再次打工 -) \ No newline at end of file + ERROR_WECHATLOGINFAILED = 33 //获取好友信息失败 + ERROR_REGEISTACCOUNTEXIST = 34 //注册账号重复 + ERROR_ACCOUNTPWDWRONG = 35 //账号登录密码不对 + ERROR_TEAMISMAX = 36 //队伍人数已满 + ERROR_INVITEREAWARD_FETCHED = 37 //邀请奖励已经领取 + ERROR_ALREADY_INVITED = 38 //该玩家已经被邀请了 + ERROR_DAGONG_FULL = 39 //打工人数已经满了 无法继续打工 + ERROR_ALREADY_INWORK = 40 //正在打工中,无法再次打工 + ERROR_CHATPARAMFAILED = 41 //请求聊天数据参数不正确 +) diff --git a/src/HttpServer/logic/function.go b/src/HttpServer/logic/function.go index 2ab9b26..a5463c1 100644 --- a/src/HttpServer/logic/function.go +++ b/src/HttpServer/logic/function.go @@ -1057,3 +1057,65 @@ func CheckHasNewMessage(uuid int) (bool, error) { return false, nil } + +func GetWorldChatMessage(uuid int) []QueryChatMessageData { + var rtsl QueryChatMessageDatas + vvs, err := redishandler.GetRedisClient().LRange(redis.WORLD_CHAT_INFO_KEY, 0, -1) + if err != nil { + logger.Error("GetWorldChatMessage err=%v", err) + return rtsl + } + + for _, val := range vvs { + var tmp QueryChatMessageData + err = json.Unmarshal([]byte(val), &tmp) + if err == nil { + rtsl = append(rtsl, tmp) + } + } + sort.Sort(rtsl) + return rtsl +} + +func GetTeamChatMessage(uuid int) []QueryChatMessageData { + var rtsl QueryChatMessageDatas + tid, err := QueryUserTeamId(uuid) + if err != nil { + logger.Error("GetTeamChatMessage err=%v", err) + return rtsl + } + rkey := redis.USER_CHAT_TEAM_INFO_KEY + ":" + strconv.Itoa(tid) + vvs, err := redishandler.GetRedisClient().LRange(rkey, 0, -1) + if err != nil { + logger.Error("GetTeamChatMessage err=%v", err) + return rtsl + } + for _, val := range vvs { + var tmp QueryChatMessageData + err = json.Unmarshal([]byte(val), &tmp) + if err == nil { + rtsl = append(rtsl, tmp) + } + } + sort.Sort(rtsl) + return rtsl +} + +func GetPrivateChatMessage(uuid, taduid int) []QueryChatMessageData { + var rtsl QueryChatMessageDatas + rkey := redis.USER_CHAT_PRIVATE_INFO_KEY + ":" + strconv.Itoa(uuid) + ":" + strconv.Itoa(taduid) + vvs, err := redishandler.GetRedisClient().LRange(rkey, 0, -1) + if err != nil { + logger.Error("GetPrivateChatMessage err=%v", err) + return rtsl + } + for _, val := range vvs { + var tmp QueryChatMessageData + err = json.Unmarshal([]byte(val), &tmp) + if err == nil { + rtsl = append(rtsl, tmp) + } + } + sort.Sort(rtsl) + return rtsl +} diff --git a/src/HttpServer/logic/httpserver.go b/src/HttpServer/logic/httpserver.go index fde70c4..b54f479 100644 --- a/src/HttpServer/logic/httpserver.go +++ b/src/HttpServer/logic/httpserver.go @@ -95,11 +95,23 @@ func startServerHttpServe() { http.HandleFunc("/catcafe/chat/queryNewMessage", queryNewMessage) //查询红点请求 http.HandleFunc("/catcafe/chat/queryBrifeMessage", queryBrifeMessage) //获取聊天页签请求 + http.HandleFunc("/catcafe/chat/queryChatMessage", queryChatMessage) //获取详细聊天信息 err := http.ListenAndServe(conf.GetServerHttpAddrConf(), nil) CheckErr(err) } +func queryChatMessage(w http.ResponseWriter, r *http.Request) { + + result, _ := ioutil.ReadAll(r.Body) + r.Body.Close() + + s := string(result) + logger.Info("queryChatMessage , body:%v", s) + + HandlequeryChatMessage(w, s) +} + func queryBrifeMessage(w http.ResponseWriter, r *http.Request) { result, _ := ioutil.ReadAll(r.Body) diff --git a/src/HttpServer/logic/logic.go b/src/HttpServer/logic/logic.go index 513c03c..8a4d73b 100644 --- a/src/HttpServer/logic/logic.go +++ b/src/HttpServer/logic/logic.go @@ -271,6 +271,50 @@ func HandleQueryInvite(w http.ResponseWriter, data string) { fmt.Fprint(w, string(respstr)) } +func HandlequeryChatMessage(w http.ResponseWriter, data string) { + + SetHeader(w) + var resp QueryChatMessageResp + resp.Status = "true" + var rdata QueryChatMessageReq + err := json.Unmarshal([]byte(data), &rdata) + for { + if err != nil { + logger.Error("HandlequeryChatMessage json unmarshal failed=%v", err) + resp.Result.Code = ERROR_JSONUNMASHFAILED + break + } + + if rdata.Ctype == 2 && rdata.Taruuid == 0 { + logger.Error("HandlequeryChatMessage param failed=%v", rdata) + resp.Result.Code = ERROR_JSONUNMASHFAILED + break + } + + if rdata.Ctype == 0 { + //世界频道 + worlds := GetWorldChatMessage(rdata.Uuid) + resp.Result.Data.Channelinfo = append(resp.Result.Data.Channelinfo, worlds...) + } else if rdata.Ctype == 1 { + teams := GetTeamChatMessage(rdata.Uuid) + resp.Result.Data.Channelinfo = append(resp.Result.Data.Channelinfo, teams...) + } else if rdata.Ctype == 2 { + privates := GetPrivateChatMessage(rdata.Uuid, rdata.Taruuid) + resp.Result.Data.Channelinfo = append(resp.Result.Data.Channelinfo, privates...) + } else { + logger.Error("HandlequeryChatMessage ctype failed %v", rdata) + resp.Result.Code = ERROR_CHATPARAMFAILED + break + } + + break + } + + //回包 + respstr, _ := json.Marshal(&resp) + fmt.Fprint(w, string(respstr)) +} + func HandlequeryBrifeMessage(w http.ResponseWriter, data string) { SetHeader(w) -- libgit2 0.21.0