Commit 5dfa463a392e96b8103d1683927a72e06c1cd764
1 parent
6e0d8bcb
Exists in
master
提交聊天相关接口
Showing
7 changed files
with
441 additions
and
69 deletions
Show diff stats
src/HttpServer/logic/constdef.go
| 1 | 1 | package logic |
| 2 | 2 | |
| 3 | 3 | var ( |
| 4 | - WETCHATAPPID="wx572a2a5ec4538f33" | |
| 4 | + WETCHATAPPID = "wx572a2a5ec4538f33" | |
| 5 | 5 | WETCHATSERCRT = "b31e2e7406af88fe7395cd178bdb64fc" |
| 6 | 6 | ) |
| 7 | 7 | |
| 8 | 8 | const ( |
| 9 | - ENV_ENUM = 100 | |
| 10 | - LBASE64 = 1 | |
| 11 | - RESURL = "https://pck2d.miso-lab.com/" | |
| 9 | + ENV_ENUM = 100 | |
| 10 | + LBASE64 = 1 | |
| 11 | + CHATLIMITNUM = 50 //聊天记录保存数量 | |
| 12 | + RESURL = "https://pck2d.miso-lab.com/" | |
| 12 | 13 | VERSION_CONFIG = "version/v1.9.json" |
| 13 | 14 | ) |
| 14 | 15 | |
| 15 | 16 | const ( |
| 16 | - FRIEND_MAX_NUM = 50 //好友人数上限 | |
| 17 | - FRIEND_APPLY_LIMIT = 50 //好友申请当日上限 | |
| 18 | - FRIEND_APPROVE_LIMIT = 50 //好友批准当日上限 | |
| 19 | - FRIEND_RECOMMAND_NUM = 3 //推荐好友数量 | |
| 20 | - TEAM_MAXNUM = 4 //队伍最大人数 | |
| 21 | -) | |
| 22 | 17 | \ No newline at end of file |
| 18 | + FRIEND_MAX_NUM = 50 //好友人数上限 | |
| 19 | + FRIEND_APPLY_LIMIT = 50 //好友申请当日上限 | |
| 20 | + FRIEND_APPROVE_LIMIT = 50 //好友批准当日上限 | |
| 21 | + FRIEND_RECOMMAND_NUM = 3 //推荐好友数量 | |
| 22 | + TEAM_MAXNUM = 4 //队伍最大人数 | |
| 23 | +) | ... | ... |
src/HttpServer/logic/datadef.go
| ... | ... | @@ -201,6 +201,37 @@ type QueryNewMessageResp struct { |
| 201 | 201 | Result QueryNewMessageResult `json:"result"` |
| 202 | 202 | } |
| 203 | 203 | |
| 204 | +type UnlockEmjReq struct { | |
| 205 | + Uuid int `json:"uuid"` | |
| 206 | + Pos int `json:"pos"` | |
| 207 | +} | |
| 208 | + | |
| 209 | +type DoChatReq struct { | |
| 210 | + Uuid int `json:"uuid"` | |
| 211 | + Ctype int `json:"ctype"` | |
| 212 | + Taruuid int `json:"taruuid"` | |
| 213 | + Message string `json:"message"` | |
| 214 | +} | |
| 215 | + | |
| 216 | +type DoChatResp struct { | |
| 217 | + Status string `json:"status"` | |
| 218 | + Result CommonResult `json:"result"` | |
| 219 | +} | |
| 220 | + | |
| 221 | +type UnlockEmjDesc struct { | |
| 222 | + Emjinfo []int `json:"emjinfo"` | |
| 223 | +} | |
| 224 | + | |
| 225 | +type UnlockEmjResult struct { | |
| 226 | + Code int `json:"code"` | |
| 227 | + Data UnlockEmjDesc `json:"data"` | |
| 228 | +} | |
| 229 | + | |
| 230 | +type UnlockEmjResp struct { | |
| 231 | + Status string `json:"status"` | |
| 232 | + Result UnlockEmjResult `json:"result"` | |
| 233 | +} | |
| 234 | + | |
| 204 | 235 | type InviteWorkReq struct { |
| 205 | 236 | Uuid int `json:"uuid"` |
| 206 | 237 | } |
| ... | ... | @@ -372,7 +403,7 @@ type MsgCheckDesc struct { |
| 372 | 403 | } |
| 373 | 404 | |
| 374 | 405 | type MsgCheckResp struct { |
| 375 | - Errcode string `json:"errcode"` | |
| 406 | + Errcode int `json:"errcode"` | |
| 376 | 407 | Errmsg string `json:"errmsg"` |
| 377 | 408 | } |
| 378 | 409 | ... | ... |
src/HttpServer/logic/function.go
| ... | ... | @@ -841,7 +841,7 @@ func GetdagongList(uuid int) (*WorkList, []InviteWorkOffDesc, error) { |
| 841 | 841 | //加入打工列表 |
| 842 | 842 | func AddDagongList(uuid int, masteruuid int, list WorkList) error { |
| 843 | 843 | |
| 844 | - nickname, headurl, err := mysql.QueryNameAndHead(uuid) | |
| 844 | + nickname, headurl, _, err := mysql.QueryNameAndHead(uuid) | |
| 845 | 845 | if err != nil { |
| 846 | 846 | logger.Error("AddDagongList err=%v", err) |
| 847 | 847 | return err |
| ... | ... | @@ -886,17 +886,45 @@ func QueryUserTeamId(uuid int) (int, error) { |
| 886 | 886 | return tmp.Team_id, nil |
| 887 | 887 | } |
| 888 | 888 | |
| 889 | -func GetChatEmojInfo(uuid int) []int { | |
| 889 | +func GetChatEmojInfo(uuid int) *EmojunlockInfo { | |
| 890 | 890 | var tmp EmojunlockInfo |
| 891 | 891 | vv, err := redishandler.GetRedisClient().HGet(redis.USER_CHAT_EMOJUNLOCK_KEY, strconv.Itoa(uuid)) |
| 892 | 892 | if err != nil { |
| 893 | - return nil | |
| 893 | + //return nil | |
| 894 | + //如果还没有则做一个初始化 | |
| 895 | + tmp.Emojinfo = append(tmp.Emojinfo, 0) | |
| 896 | + tmp.Emojinfo = append(tmp.Emojinfo, 0) | |
| 897 | + tmp.Emojinfo = append(tmp.Emojinfo, 0) | |
| 898 | + tmp.Emojinfo = append(tmp.Emojinfo, 0) | |
| 899 | + savestr, err := json.Marshal(&tmp) | |
| 900 | + if err != nil { | |
| 901 | + logger.Error("GetChatEmojInfo err=%v", err) | |
| 902 | + } | |
| 903 | + err = redishandler.GetRedisClient().HSet(redis.USER_CHAT_EMOJUNLOCK_KEY, strconv.Itoa(uuid), string(savestr)) | |
| 904 | + if err != nil { | |
| 905 | + logger.Error("GetChatEmojInfo err=%v", err) | |
| 906 | + } | |
| 907 | + return &tmp | |
| 894 | 908 | } |
| 895 | 909 | err = json.Unmarshal([]byte(vv), &tmp) |
| 896 | 910 | if err != nil { |
| 897 | 911 | return nil |
| 898 | 912 | } |
| 899 | - return tmp.Emojinfo | |
| 913 | + return &tmp | |
| 914 | +} | |
| 915 | + | |
| 916 | +func SaveChatEmojInfo(uuid int, save *EmojunlockInfo) error { | |
| 917 | + savestr, err := json.Marshal(save) | |
| 918 | + if err != nil { | |
| 919 | + logger.Error("SaveChatEmojInfo err=%v") | |
| 920 | + return err | |
| 921 | + } | |
| 922 | + err = redishandler.GetRedisClient().HSet(redis.USER_CHAT_EMOJUNLOCK_KEY, strconv.Itoa(uuid), string(savestr)) | |
| 923 | + if err != nil { | |
| 924 | + logger.Error("SaveChatEmojInfo err=%v", err) | |
| 925 | + return err | |
| 926 | + } | |
| 927 | + return nil | |
| 900 | 928 | } |
| 901 | 929 | |
| 902 | 930 | func CheckTeamHasNewMessage(uuid int) (bool, error) { |
| ... | ... | @@ -976,7 +1004,7 @@ func GetPrivateBriefList(uuid int) []QueryBrifeMessageData { |
| 976 | 1004 | tmp.Uuid = val |
| 977 | 1005 | tmp.Isnew = 1 |
| 978 | 1006 | tmp.Ctype = 2 |
| 979 | - heads, names, err := mysql.QueryNameAndHead(val) | |
| 1007 | + heads, names, _, err := mysql.QueryNameAndHead(val) | |
| 980 | 1008 | if err != nil { |
| 981 | 1009 | logger.Error("GetPrivateBriefList err=%v", err) |
| 982 | 1010 | } |
| ... | ... | @@ -998,7 +1026,7 @@ func GetPrivateBriefList(uuid int) []QueryBrifeMessageData { |
| 998 | 1026 | tmp.Uuid = val |
| 999 | 1027 | tmp.Isnew = 0 |
| 1000 | 1028 | tmp.Ctype = 2 |
| 1001 | - heads, names, err := mysql.QueryNameAndHead(val) | |
| 1029 | + heads, names, _, err := mysql.QueryNameAndHead(val) | |
| 1002 | 1030 | if err != nil { |
| 1003 | 1031 | logger.Error("GetPrivateBriefList err=%v", err) |
| 1004 | 1032 | } |
| ... | ... | @@ -1119,3 +1147,159 @@ func GetPrivateChatMessage(uuid, taduid int) []QueryChatMessageData { |
| 1119 | 1147 | sort.Sort(rtsl) |
| 1120 | 1148 | return rtsl |
| 1121 | 1149 | } |
| 1150 | + | |
| 1151 | +func WorldChat(message string, uuid int) (int, string) { | |
| 1152 | + length, err := redishandler.GetRedisClient().LLen(redis.WORLD_CHAT_INFO_KEY) | |
| 1153 | + if err == nil { | |
| 1154 | + if length >= CHATLIMITNUM { | |
| 1155 | + //需要先把多余的聊天记录删除 | |
| 1156 | + delcnt := length - CHATLIMITNUM | |
| 1157 | + for i := 0; i < delcnt; i++ { | |
| 1158 | + _, err = redishandler.GetRedisClient().RPop(redis.WORLD_CHAT_INFO_KEY) | |
| 1159 | + if err != nil { | |
| 1160 | + logger.Error("WorldChat failed err=%v", err) | |
| 1161 | + } | |
| 1162 | + } | |
| 1163 | + } | |
| 1164 | + } | |
| 1165 | + | |
| 1166 | + //构建新的结构 | |
| 1167 | + var chats QueryChatMessageData | |
| 1168 | + chats.Message = message | |
| 1169 | + chats.Uuid = uuid | |
| 1170 | + chats.Chattime = int(time.Now().Unix()) | |
| 1171 | + name, head, sex, err := mysql.QueryNameAndHead(uuid) | |
| 1172 | + if err != nil { | |
| 1173 | + logger.Error("WorldChat err=%v", err) | |
| 1174 | + } | |
| 1175 | + chats.Headurl = head | |
| 1176 | + chats.Nickname = name | |
| 1177 | + chats.Sex = sex | |
| 1178 | + | |
| 1179 | + savestr, err := json.Marshal(&chats) | |
| 1180 | + if err != nil { | |
| 1181 | + logger.Error("WorldChat err=%v", err) | |
| 1182 | + return 1, "json failed" | |
| 1183 | + } | |
| 1184 | + | |
| 1185 | + err = redishandler.GetRedisClient().LPush(redis.WORLD_CHAT_INFO_KEY, string(savestr)) | |
| 1186 | + if err != nil { | |
| 1187 | + logger.Error("WorldChat err=%v", err) | |
| 1188 | + return 2, "redis failed" | |
| 1189 | + } | |
| 1190 | + return 0, "success" | |
| 1191 | +} | |
| 1192 | + | |
| 1193 | +func TeamChat(message string, uuid int) (int, string) { | |
| 1194 | + tid, err := QueryUserTeamId(uuid) | |
| 1195 | + if err != nil { | |
| 1196 | + logger.Error("TeamChat err=%v", err) | |
| 1197 | + return 1, "getteamid failed" | |
| 1198 | + } | |
| 1199 | + rkey := redis.USER_CHAT_TEAM_INFO_KEY + ":" + strconv.Itoa(tid) | |
| 1200 | + length, err := redishandler.GetRedisClient().LLen(rkey) | |
| 1201 | + if err == nil { | |
| 1202 | + if length >= CHATLIMITNUM { | |
| 1203 | + //需要先把多余的聊天记录删除 | |
| 1204 | + delcnt := length - CHATLIMITNUM | |
| 1205 | + for i := 0; i < delcnt; i++ { | |
| 1206 | + _, err = redishandler.GetRedisClient().RPop(rkey) | |
| 1207 | + if err != nil { | |
| 1208 | + logger.Error("TeamChat failed err=%v", err) | |
| 1209 | + } | |
| 1210 | + } | |
| 1211 | + } | |
| 1212 | + } | |
| 1213 | + | |
| 1214 | + //构建新的结构 | |
| 1215 | + var chats QueryChatMessageData | |
| 1216 | + chats.Message = message | |
| 1217 | + chats.Uuid = uuid | |
| 1218 | + chats.Chattime = int(time.Now().Unix()) | |
| 1219 | + name, head, sex, err := mysql.QueryNameAndHead(uuid) | |
| 1220 | + if err != nil { | |
| 1221 | + logger.Error("TeamChat err=%v", err) | |
| 1222 | + } | |
| 1223 | + chats.Headurl = head | |
| 1224 | + chats.Nickname = name | |
| 1225 | + chats.Sex = sex | |
| 1226 | + | |
| 1227 | + savestr, err := json.Marshal(&chats) | |
| 1228 | + if err != nil { | |
| 1229 | + logger.Error("TeamChat err=%v", err) | |
| 1230 | + return 1, "json failed" | |
| 1231 | + } | |
| 1232 | + | |
| 1233 | + err = redishandler.GetRedisClient().LPush(rkey, string(savestr)) | |
| 1234 | + if err != nil { | |
| 1235 | + logger.Error("TeamChat err=%v", err) | |
| 1236 | + return 2, "redis failed" | |
| 1237 | + } | |
| 1238 | + return 0, "" | |
| 1239 | +} | |
| 1240 | + | |
| 1241 | +func PrivateChat(message string, uuid int, taruid int) (int, string) { | |
| 1242 | + //存入待收人的列表 | |
| 1243 | + rkey := redis.USER_CHAT_PRIVATE_INFO_KEY + ":" + strconv.Itoa(taruid) + ":" + strconv.Itoa(uuid) | |
| 1244 | + length, err := redishandler.GetRedisClient().LLen(rkey) | |
| 1245 | + if err == nil { | |
| 1246 | + if length >= CHATLIMITNUM { | |
| 1247 | + //需要先把多余的聊天记录删除 | |
| 1248 | + delcnt := length - CHATLIMITNUM | |
| 1249 | + for i := 0; i < delcnt; i++ { | |
| 1250 | + _, err = redishandler.GetRedisClient().RPop(rkey) | |
| 1251 | + if err != nil { | |
| 1252 | + logger.Error("PrivateChat failed err=%v", err) | |
| 1253 | + } | |
| 1254 | + } | |
| 1255 | + } | |
| 1256 | + } | |
| 1257 | + | |
| 1258 | + //构建新的结构 | |
| 1259 | + var chats QueryChatMessageData | |
| 1260 | + chats.Message = message | |
| 1261 | + chats.Uuid = uuid | |
| 1262 | + chats.Chattime = int(time.Now().Unix()) | |
| 1263 | + name, head, sex, err := mysql.QueryNameAndHead(uuid) | |
| 1264 | + if err != nil { | |
| 1265 | + logger.Error("PrivateChat err=%v", err) | |
| 1266 | + } | |
| 1267 | + chats.Headurl = head | |
| 1268 | + chats.Nickname = name | |
| 1269 | + chats.Sex = sex | |
| 1270 | + | |
| 1271 | + savestr, err := json.Marshal(&chats) | |
| 1272 | + if err != nil { | |
| 1273 | + logger.Error("PrivateChat err=%v", err) | |
| 1274 | + return 1, "json failed" | |
| 1275 | + } | |
| 1276 | + | |
| 1277 | + err = redishandler.GetRedisClient().LPush(rkey, string(savestr)) | |
| 1278 | + if err != nil { | |
| 1279 | + logger.Error("PrivateChat err=%v", err) | |
| 1280 | + return 2, "redis failed" | |
| 1281 | + } | |
| 1282 | + | |
| 1283 | + //存入自己的聊天记录 | |
| 1284 | + rkey = redis.USER_CHAT_PRIVATE_INFO_KEY + ":" + strconv.Itoa(uuid) + ":" + strconv.Itoa(taruid) | |
| 1285 | + length, err = redishandler.GetRedisClient().LLen(rkey) | |
| 1286 | + if err == nil { | |
| 1287 | + if length >= CHATLIMITNUM { | |
| 1288 | + //需要先把多余的聊天记录删除 | |
| 1289 | + delcnt := length - CHATLIMITNUM | |
| 1290 | + for i := 0; i < delcnt; i++ { | |
| 1291 | + _, err = redishandler.GetRedisClient().RPop(rkey) | |
| 1292 | + if err != nil { | |
| 1293 | + logger.Error("PrivateChat failed err=%v", err) | |
| 1294 | + } | |
| 1295 | + } | |
| 1296 | + } | |
| 1297 | + } | |
| 1298 | + | |
| 1299 | + err = redishandler.GetRedisClient().LPush(rkey, string(savestr)) | |
| 1300 | + if err != nil { | |
| 1301 | + logger.Error("PrivateChat err=%v", err) | |
| 1302 | + return 2, "redis failed" | |
| 1303 | + } | |
| 1304 | + return 0, "" | |
| 1305 | +} | ... | ... |
src/HttpServer/logic/httpserver.go
| ... | ... | @@ -96,11 +96,35 @@ func startServerHttpServe() { |
| 96 | 96 | http.HandleFunc("/catcafe/chat/queryNewMessage", queryNewMessage) //查询红点请求 |
| 97 | 97 | http.HandleFunc("/catcafe/chat/queryBrifeMessage", queryBrifeMessage) //获取聊天页签请求 |
| 98 | 98 | http.HandleFunc("/catcafe/chat/queryChatMessage", queryChatMessage) //获取详细聊天信息 |
| 99 | + http.HandleFunc("/catcafe/chat/unlockEmj", UnlockEmj) //获取详细聊天信息 | |
| 100 | + http.HandleFunc("/catcafe/chat/doChat", DoChat) //请求聊天 | |
| 99 | 101 | |
| 100 | 102 | err := http.ListenAndServe(conf.GetServerHttpAddrConf(), nil) |
| 101 | 103 | CheckErr(err) |
| 102 | 104 | } |
| 103 | 105 | |
| 106 | +func DoChat(w http.ResponseWriter, r *http.Request) { | |
| 107 | + | |
| 108 | + result, _ := ioutil.ReadAll(r.Body) | |
| 109 | + r.Body.Close() | |
| 110 | + | |
| 111 | + s := string(result) | |
| 112 | + logger.Info("DoChat , body:%v", s) | |
| 113 | + | |
| 114 | + HandleDoChat(w, s) | |
| 115 | +} | |
| 116 | + | |
| 117 | +func UnlockEmj(w http.ResponseWriter, r *http.Request) { | |
| 118 | + | |
| 119 | + result, _ := ioutil.ReadAll(r.Body) | |
| 120 | + r.Body.Close() | |
| 121 | + | |
| 122 | + s := string(result) | |
| 123 | + logger.Info("UnlockEmj , body:%v", s) | |
| 124 | + | |
| 125 | + HandleUnlockEmj(w, s) | |
| 126 | +} | |
| 127 | + | |
| 104 | 128 | func queryChatMessage(w http.ResponseWriter, r *http.Request) { |
| 105 | 129 | |
| 106 | 130 | result, _ := ioutil.ReadAll(r.Body) | ... | ... |
src/HttpServer/logic/logic.go
| ... | ... | @@ -271,6 +271,121 @@ func HandleQueryInvite(w http.ResponseWriter, data string) { |
| 271 | 271 | fmt.Fprint(w, string(respstr)) |
| 272 | 272 | } |
| 273 | 273 | |
| 274 | +func HandleDoChat(w http.ResponseWriter, data string) { | |
| 275 | + | |
| 276 | + SetHeader(w) | |
| 277 | + var resp DoChatResp | |
| 278 | + resp.Status = "true" | |
| 279 | + var rdata DoChatReq | |
| 280 | + err := json.Unmarshal([]byte(data), &rdata) | |
| 281 | + for { | |
| 282 | + if err != nil { | |
| 283 | + logger.Error("HandleDoChat json unmarshal failed=%v", err) | |
| 284 | + resp.Result.Code = ERROR_JSONUNMASHFAILED | |
| 285 | + break | |
| 286 | + } | |
| 287 | + | |
| 288 | + //需要验证敏感词 | |
| 289 | + msgtoken := GetAccessToken() | |
| 290 | + msgurl := URL_WEIXINMSG_CHECK + "?access_token=" + msgtoken | |
| 291 | + var check MsgCheckDesc | |
| 292 | + check.Content = rdata.Message | |
| 293 | + bys, err := json.Marshal(&check) | |
| 294 | + if err != nil { | |
| 295 | + logger.Error("HandleDoChat json failed=%v", err) | |
| 296 | + resp.Result.Code = ERROR_JSONUNMASHFAILED | |
| 297 | + break | |
| 298 | + } | |
| 299 | + | |
| 300 | + body := bytes.NewBuffer(bys) | |
| 301 | + res, err := http.Post(msgurl, "application/json;charset=utf-8", body) | |
| 302 | + if err != nil { | |
| 303 | + logger.Error(" HandleDoChat ERROR_HTTPPOSTFAILED err=%v", err) | |
| 304 | + resp.Result.Code = ERROR_HTTPPOSTFAILED | |
| 305 | + return | |
| 306 | + } | |
| 307 | + | |
| 308 | + result, _ := ioutil.ReadAll(res.Body) | |
| 309 | + defer res.Body.Close() | |
| 310 | + | |
| 311 | + var msgresp MsgCheckResp | |
| 312 | + _ = json.Unmarshal(result, &msgresp) | |
| 313 | + | |
| 314 | + if msgresp.Errcode != 0 { | |
| 315 | + resp.Result.Code = msgresp.Errcode | |
| 316 | + resp.Result.Data = msgresp.Errmsg | |
| 317 | + break | |
| 318 | + } | |
| 319 | + | |
| 320 | + if rdata.Ctype == 0 { | |
| 321 | + resp.Result.Code, resp.Result.Data = WorldChat(rdata.Message, rdata.Uuid) | |
| 322 | + } else if rdata.Ctype == 1 { | |
| 323 | + resp.Result.Code, resp.Result.Data = TeamChat(rdata.Message, rdata.Uuid) | |
| 324 | + } else if rdata.Ctype == 2 { | |
| 325 | + resp.Result.Code, resp.Result.Data = PrivateChat(rdata.Message, rdata.Uuid, rdata.Taruuid) | |
| 326 | + } else { | |
| 327 | + logger.Error("HandleDoChat failed err ctypr") | |
| 328 | + resp.Result.Code = ERROR_CHATPARAMFAILED | |
| 329 | + resp.Result.Data = "ctypr failed" | |
| 330 | + break | |
| 331 | + } | |
| 332 | + break | |
| 333 | + } | |
| 334 | + | |
| 335 | + //回包 | |
| 336 | + respstr, _ := json.Marshal(&resp) | |
| 337 | + fmt.Fprint(w, string(respstr)) | |
| 338 | +} | |
| 339 | + | |
| 340 | +func HandleUnlockEmj(w http.ResponseWriter, data string) { | |
| 341 | + | |
| 342 | + SetHeader(w) | |
| 343 | + var resp UnlockEmjResp | |
| 344 | + resp.Status = "true" | |
| 345 | + var rdata UnlockEmjReq | |
| 346 | + err := json.Unmarshal([]byte(data), &rdata) | |
| 347 | + for { | |
| 348 | + if err != nil { | |
| 349 | + logger.Error("HandleUnlockEmj json unmarshal failed=%v", err) | |
| 350 | + resp.Result.Code = ERROR_JSONUNMASHFAILED | |
| 351 | + break | |
| 352 | + } | |
| 353 | + | |
| 354 | + if rdata.Pos < 0 { | |
| 355 | + logger.Error("HandleUnlockEmj param failed=%v", rdata) | |
| 356 | + resp.Result.Code = ERROR_JSONUNMASHFAILED | |
| 357 | + break | |
| 358 | + } | |
| 359 | + | |
| 360 | + emjs := GetChatEmojInfo(rdata.Uuid) | |
| 361 | + if emjs == nil { | |
| 362 | + logger.Error("HandleUnlockEmj redis failed=%v", rdata) | |
| 363 | + resp.Result.Code = ERROR_GETUSERMAPBYUIDFAILED | |
| 364 | + break | |
| 365 | + } | |
| 366 | + | |
| 367 | + if rdata.Pos > len(emjs.Emojinfo)-1 { | |
| 368 | + logger.Error("HandleUnlockEmj param failed=%v", rdata) | |
| 369 | + resp.Result.Code = ERROR_JSONUNMASHFAILED | |
| 370 | + break | |
| 371 | + } | |
| 372 | + | |
| 373 | + emjs.Emojinfo[rdata.Pos] = 1 | |
| 374 | + err = SaveChatEmojInfo(rdata.Uuid, emjs) | |
| 375 | + if err != nil { | |
| 376 | + logger.Error("HandleUnlockEmj redis failed=%v", rdata) | |
| 377 | + resp.Result.Code = ERROR_GETUSERMAPBYUIDFAILED | |
| 378 | + break | |
| 379 | + } | |
| 380 | + resp.Result.Data.Emjinfo = append(resp.Result.Data.Emjinfo, emjs.Emojinfo...) | |
| 381 | + break | |
| 382 | + } | |
| 383 | + | |
| 384 | + //回包 | |
| 385 | + respstr, _ := json.Marshal(&resp) | |
| 386 | + fmt.Fprint(w, string(respstr)) | |
| 387 | +} | |
| 388 | + | |
| 274 | 389 | func HandlequeryChatMessage(w http.ResponseWriter, data string) { |
| 275 | 390 | |
| 276 | 391 | SetHeader(w) |
| ... | ... | @@ -331,7 +446,9 @@ func HandlequeryBrifeMessage(w http.ResponseWriter, data string) { |
| 331 | 446 | |
| 332 | 447 | //先查询表情信息 |
| 333 | 448 | emjs := GetChatEmojInfo(rdata.Uuid) |
| 334 | - resp.Result.Data.Emojinfo = append(resp.Result.Data.Emojinfo, emjs...) | |
| 449 | + if emjs != nil { | |
| 450 | + resp.Result.Data.Emojinfo = append(resp.Result.Data.Emojinfo, emjs.Emojinfo...) | |
| 451 | + } | |
| 335 | 452 | |
| 336 | 453 | //世界频道 |
| 337 | 454 | var world QueryBrifeMessageData |
| ... | ... | @@ -1425,8 +1542,8 @@ func HandleTextCheck(w http.ResponseWriter, data string) { |
| 1425 | 1542 | var msgresp MsgCheckResp |
| 1426 | 1543 | _ = json.Unmarshal(result, &msgresp) |
| 1427 | 1544 | |
| 1428 | - code, _ := strconv.Atoi(msgresp.Errcode) | |
| 1429 | - resp.Result.Code = code | |
| 1545 | + //code, _ := strconv.Atoi(msgresp.Errcode) | |
| 1546 | + resp.Result.Code = msgresp.Errcode | |
| 1430 | 1547 | resp.Result.Data = msgresp.Errmsg |
| 1431 | 1548 | |
| 1432 | 1549 | resp.Result.Code = ERROR_OK | ... | ... |
src/common/redis/redis.go
| ... | ... | @@ -324,6 +324,16 @@ func (client *RedisClient) LPop(listName string) (string, error) { |
| 324 | 324 | return value, err |
| 325 | 325 | } |
| 326 | 326 | |
| 327 | +func (client *RedisClient) RPop(listName string) (string, error) { | |
| 328 | + conn := client.m_pool.Get() | |
| 329 | + defer conn.Close() | |
| 330 | + value, err := redis.String(conn.Do("RPOP", listName)) | |
| 331 | + if err != nil { | |
| 332 | + //fmt.Println("LPop redis get failed:", err) | |
| 333 | + } | |
| 334 | + return value, err | |
| 335 | +} | |
| 336 | + | |
| 327 | 337 | func (client *RedisClient) LRem(listName string, count int, value string) error { |
| 328 | 338 | conn := client.m_pool.Get() |
| 329 | 339 | defer conn.Close() |
| ... | ... | @@ -345,6 +355,16 @@ func (client *RedisClient) RPush(listName string, element string) error { |
| 345 | 355 | return err |
| 346 | 356 | } |
| 347 | 357 | |
| 358 | +func (client *RedisClient) LPush(listName string, element string) error { | |
| 359 | + conn := client.m_pool.Get() | |
| 360 | + defer conn.Close() | |
| 361 | + _, err := redis.Int(conn.Do("LPUSH", listName, element)) | |
| 362 | + if err != nil { | |
| 363 | + //fmt.Println("RPush redis get failed:", err) | |
| 364 | + } | |
| 365 | + return err | |
| 366 | +} | |
| 367 | + | |
| 348 | 368 | func (client *RedisClient) LLen(listName string) (int, error) { |
| 349 | 369 | conn := client.m_pool.Get() |
| 350 | 370 | defer conn.Close() | ... | ... |
src/mysql/dbmysql.go
| ... | ... | @@ -14,13 +14,13 @@ import ( |
| 14 | 14 | ) |
| 15 | 15 | |
| 16 | 16 | var ( |
| 17 | - m_game_db *sql.DB | |
| 17 | + m_game_db *sql.DB | |
| 18 | 18 | ) |
| 19 | 19 | |
| 20 | 20 | type QuerInviteDesc struct { |
| 21 | - Uuid int | |
| 22 | - NickName string | |
| 23 | - HeadUrl string | |
| 21 | + Uuid int | |
| 22 | + NickName string | |
| 23 | + HeadUrl string | |
| 24 | 24 | IsFecthed int |
| 25 | 25 | } |
| 26 | 26 | |
| ... | ... | @@ -55,7 +55,7 @@ func ExcuteCmd(cmd string) error { |
| 55 | 55 | return err |
| 56 | 56 | } |
| 57 | 57 | |
| 58 | -func TestClearData(uid int) (int,error) { | |
| 58 | +func TestClearData(uid int) (int, error) { | |
| 59 | 59 | cmd := fmt.Sprintf("select coin from b_user_ext_04 where user_id=%d", uid) |
| 60 | 60 | |
| 61 | 61 | rows, err := m_game_db.Query(cmd) |
| ... | ... | @@ -64,52 +64,51 @@ func TestClearData(uid int) (int,error) { |
| 64 | 64 | } |
| 65 | 65 | if err != nil { |
| 66 | 66 | logger.Notic("TestClearData mysql select error:%v", err) |
| 67 | - return 0,err | |
| 67 | + return 0, err | |
| 68 | 68 | } |
| 69 | 69 | |
| 70 | - | |
| 71 | 70 | var value int |
| 72 | 71 | for rows.Next() { |
| 73 | 72 | |
| 74 | 73 | err = rows.Scan(&value) |
| 75 | 74 | if err != nil { |
| 76 | 75 | logger.Notic("TestClearData mysql handle result error:%v", err) |
| 77 | - return 0,err | |
| 76 | + return 0, err | |
| 78 | 77 | } |
| 79 | - logger.Info("TestClearData coin=%v",value) | |
| 78 | + logger.Info("TestClearData coin=%v", value) | |
| 80 | 79 | |
| 81 | 80 | break |
| 82 | 81 | } |
| 83 | - return value,nil | |
| 82 | + return value, nil | |
| 84 | 83 | } |
| 85 | 84 | |
| 86 | -func DoAddGold(uuid,gold,love int) error { | |
| 87 | - for i:=0;i<10;i++ { | |
| 85 | +func DoAddGold(uuid, gold, love int) error { | |
| 86 | + for i := 0; i < 10; i++ { | |
| 88 | 87 | tablename := "b_user_ext_0" + strconv.Itoa(i) |
| 89 | 88 | cmd := "update " + tablename + " set coin = " + strconv.Itoa(gold) + " where user_id= " + strconv.Itoa(uuid) |
| 90 | 89 | err := ExcuteCmd(cmd) |
| 91 | 90 | if err != nil { |
| 92 | - logger.Error("DoAddGold err=%v,cmd=%v",err,cmd) | |
| 91 | + logger.Error("DoAddGold err=%v,cmd=%v", err, cmd) | |
| 93 | 92 | return err |
| 94 | 93 | } |
| 95 | 94 | cmd = "update " + tablename + " set love_exp = " + strconv.Itoa(love) + " where user_id= " + strconv.Itoa(uuid) |
| 96 | 95 | err = ExcuteCmd(cmd) |
| 97 | 96 | if err != nil { |
| 98 | - logger.Error("DoAddGold err=%v,cmd=%v",err,cmd) | |
| 97 | + logger.Error("DoAddGold err=%v,cmd=%v", err, cmd) | |
| 99 | 98 | return err |
| 100 | 99 | } |
| 101 | 100 | } |
| 102 | 101 | return nil |
| 103 | 102 | } |
| 104 | 103 | |
| 105 | -func DoClearData(uuid int) error{ | |
| 104 | +func DoClearData(uuid int) error { | |
| 106 | 105 | //先删除十张分表的数据 |
| 107 | - for i:=0;i<10;i++ { | |
| 106 | + for i := 0; i < 10; i++ { | |
| 108 | 107 | tablename := "b_base_data_0" + strconv.Itoa(i) |
| 109 | 108 | cmd := "DELETE from " + tablename + " where data_uid= " + strconv.Itoa(uuid) |
| 110 | 109 | err := ExcuteCmd(cmd) |
| 111 | 110 | if err != nil { |
| 112 | - logger.Error("DoClearData err=%v,cmd=%v",err,cmd) | |
| 111 | + logger.Error("DoClearData err=%v,cmd=%v", err, cmd) | |
| 113 | 112 | return err |
| 114 | 113 | } |
| 115 | 114 | } |
| ... | ... | @@ -117,12 +116,10 @@ func DoClearData(uuid int) error{ |
| 117 | 116 | |
| 118 | 117 | } |
| 119 | 118 | |
| 120 | - | |
| 121 | - | |
| 122 | -func QueryAllData(f *os.File) error{ | |
| 119 | +func QueryAllData(f *os.File) error { | |
| 123 | 120 | |
| 124 | 121 | //先查询十张分表的数据 |
| 125 | - for i:=0;i<10;i++ { | |
| 122 | + for i := 0; i < 10; i++ { | |
| 126 | 123 | tablename := "b_user_ext_0" + strconv.Itoa(i) |
| 127 | 124 | cmd := "SELECT user_id,lv,exp,login_time from " + tablename |
| 128 | 125 | rows, err := m_game_db.Query(cmd) |
| ... | ... | @@ -140,7 +137,7 @@ func QueryAllData(f *os.File) error{ |
| 140 | 137 | Ulv := 0 |
| 141 | 138 | Exp := 0 |
| 142 | 139 | LoginTime := 0 |
| 143 | - err = rows.Scan(&Uid, &Ulv, &Exp,&LoginTime) //不scan会导致连接不释放 | |
| 140 | + err = rows.Scan(&Uid, &Ulv, &Exp, &LoginTime) //不scan会导致连接不释放 | |
| 144 | 141 | if err != nil { |
| 145 | 142 | logger.Error("Scan failed,err:%v", err) |
| 146 | 143 | return err |
| ... | ... | @@ -154,10 +151,10 @@ func QueryAllData(f *os.File) error{ |
| 154 | 151 | tm := time.Unix(int64(LoginTime), 0) |
| 155 | 152 | //fmt.Println(tm.Format("2006-01-02 15:04:05")) |
| 156 | 153 | str := strconv.Itoa(Uid) + " " + strconv.Itoa(Ulv) + " " + strconv.Itoa(Exp) + " " + tm.Format("2006-01-02 15:04:05") + "\n" |
| 157 | - _,err = f.WriteString(str) | |
| 154 | + _, err = f.WriteString(str) | |
| 158 | 155 | //logger.Info("ddt str=%v",str) |
| 159 | 156 | if err != nil { |
| 160 | - logger.Error("WRITETOFILEFAILED ERR=%v",err) | |
| 157 | + logger.Error("WRITETOFILEFAILED ERR=%v", err) | |
| 161 | 158 | return err |
| 162 | 159 | } |
| 163 | 160 | //fmt.Fprintln(w, str) |
| ... | ... | @@ -168,42 +165,39 @@ func QueryAllData(f *os.File) error{ |
| 168 | 165 | |
| 169 | 166 | } |
| 170 | 167 | |
| 171 | - | |
| 172 | - | |
| 173 | - | |
| 174 | -func QueryInvite(uuid int) ([]QuerInviteDesc,error){ | |
| 168 | +func QueryInvite(uuid int) ([]QuerInviteDesc, error) { | |
| 175 | 169 | var rtslice []QuerInviteDesc |
| 176 | 170 | |
| 177 | 171 | //首先取出邀请关系id |
| 178 | 172 | rkey := redis.USER_INVITEREWARD_FETCH_REWARD + ":" + strconv.Itoa(uuid) |
| 179 | - vv,err := redishandler.GetRedisClient().HGetAllKeys(rkey) | |
| 173 | + vv, err := redishandler.GetRedisClient().HGetAllKeys(rkey) | |
| 180 | 174 | if err != nil { |
| 181 | - logger.Error("QueryInvite err=%v",err) | |
| 182 | - return nil,err | |
| 175 | + logger.Error("QueryInvite err=%v", err) | |
| 176 | + return nil, err | |
| 183 | 177 | } |
| 184 | 178 | |
| 185 | - for _,val := range vv { | |
| 179 | + for _, val := range vv { | |
| 186 | 180 | var tmp QuerInviteDesc |
| 187 | 181 | |
| 188 | 182 | bytestr := string(val.([]byte)) |
| 189 | - bytenum,_ := strconv.Atoi(bytestr) | |
| 190 | - tmp.Uuid =bytenum | |
| 191 | - val,err :=redishandler.GetRedisClient().HGet(rkey,bytestr) | |
| 183 | + bytenum, _ := strconv.Atoi(bytestr) | |
| 184 | + tmp.Uuid = bytenum | |
| 185 | + val, err := redishandler.GetRedisClient().HGet(rkey, bytestr) | |
| 192 | 186 | if err != nil { |
| 193 | 187 | tmp.IsFecthed = 1 |
| 194 | - logger.Error("QueryInvite failed err=%v",err) | |
| 188 | + logger.Error("QueryInvite failed err=%v", err) | |
| 195 | 189 | continue |
| 196 | 190 | } |
| 197 | 191 | |
| 198 | - stat,_ := strconv.Atoi(val) | |
| 192 | + stat, _ := strconv.Atoi(val) | |
| 199 | 193 | tmp.IsFecthed = stat |
| 200 | 194 | |
| 201 | - rtslice = append(rtslice,tmp) | |
| 195 | + rtslice = append(rtslice, tmp) | |
| 202 | 196 | } |
| 203 | 197 | |
| 204 | 198 | //需要查询对应的数据 |
| 205 | - for k,val := range rtslice { | |
| 206 | - for i:=0;i<10;i++ { | |
| 199 | + for k, val := range rtslice { | |
| 200 | + for i := 0; i < 10; i++ { | |
| 207 | 201 | tablename := "b_user_ext_0" + strconv.Itoa(i) |
| 208 | 202 | cmd := "SELECT nickname,avatar_url from " + tablename + " where user_id= " + strconv.Itoa(val.Uuid) |
| 209 | 203 | rows, err := m_game_db.Query(cmd) |
| ... | ... | @@ -229,15 +223,16 @@ func QueryInvite(uuid int) ([]QuerInviteDesc,error){ |
| 229 | 223 | } |
| 230 | 224 | } |
| 231 | 225 | |
| 232 | - return rtslice,nil | |
| 226 | + return rtslice, nil | |
| 233 | 227 | } |
| 234 | 228 | |
| 235 | -func QueryNameAndHead(uuid int) (string,string,error) { | |
| 229 | +func QueryNameAndHead(uuid int) (string, string, int, error) { | |
| 236 | 230 | var nickname string |
| 237 | 231 | var headurl string |
| 238 | - for i:=0;i<10;i++ { | |
| 232 | + var gender int | |
| 233 | + for i := 0; i < 10; i++ { | |
| 239 | 234 | tablename := "b_user_ext_0" + strconv.Itoa(i) |
| 240 | - cmd := "SELECT nickname,avatar_url from " + tablename + " where user_id= " + strconv.Itoa(uuid) | |
| 235 | + cmd := "SELECT nickname,avatar_url,gender from " + tablename + " where user_id= " + strconv.Itoa(uuid) | |
| 241 | 236 | rows, err := m_game_db.Query(cmd) |
| 242 | 237 | defer func() { |
| 243 | 238 | if rows != nil { |
| ... | ... | @@ -247,17 +242,17 @@ func QueryNameAndHead(uuid int) (string,string,error) { |
| 247 | 242 | |
| 248 | 243 | if err != nil { |
| 249 | 244 | logger.Error("Query failed,err:%v", err) |
| 250 | - return "","",err | |
| 245 | + return "", "", 1, err | |
| 251 | 246 | } |
| 252 | 247 | for rows.Next() { |
| 253 | 248 | |
| 254 | - err = rows.Scan(&nickname, &headurl) //不scan会导致连接不释放 | |
| 249 | + err = rows.Scan(&nickname, &headurl, &gender) //不scan会导致连接不释放 | |
| 255 | 250 | if err != nil { |
| 256 | 251 | logger.Error("Scan failed,err:%v", err) |
| 257 | - return "","",err | |
| 252 | + return "", "", 1, err | |
| 258 | 253 | } |
| 259 | 254 | } |
| 260 | 255 | } |
| 261 | 256 | |
| 262 | - return nickname,headurl,nil | |
| 263 | -} | |
| 264 | 257 | \ No newline at end of file |
| 258 | + return nickname, headurl, gender, nil | |
| 259 | +} | ... | ... |