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 | package logic | 1 | package logic |
2 | 2 | ||
3 | var ( | 3 | var ( |
4 | - WETCHATAPPID="wx572a2a5ec4538f33" | 4 | + WETCHATAPPID = "wx572a2a5ec4538f33" |
5 | WETCHATSERCRT = "b31e2e7406af88fe7395cd178bdb64fc" | 5 | WETCHATSERCRT = "b31e2e7406af88fe7395cd178bdb64fc" |
6 | ) | 6 | ) |
7 | 7 | ||
8 | const ( | 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 | VERSION_CONFIG = "version/v1.9.json" | 13 | VERSION_CONFIG = "version/v1.9.json" |
13 | ) | 14 | ) |
14 | 15 | ||
15 | const ( | 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 | \ No newline at end of file | 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,6 +201,37 @@ type QueryNewMessageResp struct { | ||
201 | Result QueryNewMessageResult `json:"result"` | 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 | type InviteWorkReq struct { | 235 | type InviteWorkReq struct { |
205 | Uuid int `json:"uuid"` | 236 | Uuid int `json:"uuid"` |
206 | } | 237 | } |
@@ -372,7 +403,7 @@ type MsgCheckDesc struct { | @@ -372,7 +403,7 @@ type MsgCheckDesc struct { | ||
372 | } | 403 | } |
373 | 404 | ||
374 | type MsgCheckResp struct { | 405 | type MsgCheckResp struct { |
375 | - Errcode string `json:"errcode"` | 406 | + Errcode int `json:"errcode"` |
376 | Errmsg string `json:"errmsg"` | 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,7 +841,7 @@ func GetdagongList(uuid int) (*WorkList, []InviteWorkOffDesc, error) { | ||
841 | //加入打工列表 | 841 | //加入打工列表 |
842 | func AddDagongList(uuid int, masteruuid int, list WorkList) error { | 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 | if err != nil { | 845 | if err != nil { |
846 | logger.Error("AddDagongList err=%v", err) | 846 | logger.Error("AddDagongList err=%v", err) |
847 | return err | 847 | return err |
@@ -886,17 +886,45 @@ func QueryUserTeamId(uuid int) (int, error) { | @@ -886,17 +886,45 @@ func QueryUserTeamId(uuid int) (int, error) { | ||
886 | return tmp.Team_id, nil | 886 | return tmp.Team_id, nil |
887 | } | 887 | } |
888 | 888 | ||
889 | -func GetChatEmojInfo(uuid int) []int { | 889 | +func GetChatEmojInfo(uuid int) *EmojunlockInfo { |
890 | var tmp EmojunlockInfo | 890 | var tmp EmojunlockInfo |
891 | vv, err := redishandler.GetRedisClient().HGet(redis.USER_CHAT_EMOJUNLOCK_KEY, strconv.Itoa(uuid)) | 891 | vv, err := redishandler.GetRedisClient().HGet(redis.USER_CHAT_EMOJUNLOCK_KEY, strconv.Itoa(uuid)) |
892 | if err != nil { | 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 | err = json.Unmarshal([]byte(vv), &tmp) | 909 | err = json.Unmarshal([]byte(vv), &tmp) |
896 | if err != nil { | 910 | if err != nil { |
897 | return nil | 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 | func CheckTeamHasNewMessage(uuid int) (bool, error) { | 930 | func CheckTeamHasNewMessage(uuid int) (bool, error) { |
@@ -976,7 +1004,7 @@ func GetPrivateBriefList(uuid int) []QueryBrifeMessageData { | @@ -976,7 +1004,7 @@ func GetPrivateBriefList(uuid int) []QueryBrifeMessageData { | ||
976 | tmp.Uuid = val | 1004 | tmp.Uuid = val |
977 | tmp.Isnew = 1 | 1005 | tmp.Isnew = 1 |
978 | tmp.Ctype = 2 | 1006 | tmp.Ctype = 2 |
979 | - heads, names, err := mysql.QueryNameAndHead(val) | 1007 | + heads, names, _, err := mysql.QueryNameAndHead(val) |
980 | if err != nil { | 1008 | if err != nil { |
981 | logger.Error("GetPrivateBriefList err=%v", err) | 1009 | logger.Error("GetPrivateBriefList err=%v", err) |
982 | } | 1010 | } |
@@ -998,7 +1026,7 @@ func GetPrivateBriefList(uuid int) []QueryBrifeMessageData { | @@ -998,7 +1026,7 @@ func GetPrivateBriefList(uuid int) []QueryBrifeMessageData { | ||
998 | tmp.Uuid = val | 1026 | tmp.Uuid = val |
999 | tmp.Isnew = 0 | 1027 | tmp.Isnew = 0 |
1000 | tmp.Ctype = 2 | 1028 | tmp.Ctype = 2 |
1001 | - heads, names, err := mysql.QueryNameAndHead(val) | 1029 | + heads, names, _, err := mysql.QueryNameAndHead(val) |
1002 | if err != nil { | 1030 | if err != nil { |
1003 | logger.Error("GetPrivateBriefList err=%v", err) | 1031 | logger.Error("GetPrivateBriefList err=%v", err) |
1004 | } | 1032 | } |
@@ -1119,3 +1147,159 @@ func GetPrivateChatMessage(uuid, taduid int) []QueryChatMessageData { | @@ -1119,3 +1147,159 @@ func GetPrivateChatMessage(uuid, taduid int) []QueryChatMessageData { | ||
1119 | sort.Sort(rtsl) | 1147 | sort.Sort(rtsl) |
1120 | return rtsl | 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,11 +96,35 @@ func startServerHttpServe() { | ||
96 | http.HandleFunc("/catcafe/chat/queryNewMessage", queryNewMessage) //查询红点请求 | 96 | http.HandleFunc("/catcafe/chat/queryNewMessage", queryNewMessage) //查询红点请求 |
97 | http.HandleFunc("/catcafe/chat/queryBrifeMessage", queryBrifeMessage) //获取聊天页签请求 | 97 | http.HandleFunc("/catcafe/chat/queryBrifeMessage", queryBrifeMessage) //获取聊天页签请求 |
98 | http.HandleFunc("/catcafe/chat/queryChatMessage", queryChatMessage) //获取详细聊天信息 | 98 | http.HandleFunc("/catcafe/chat/queryChatMessage", queryChatMessage) //获取详细聊天信息 |
99 | + http.HandleFunc("/catcafe/chat/unlockEmj", UnlockEmj) //获取详细聊天信息 | ||
100 | + http.HandleFunc("/catcafe/chat/doChat", DoChat) //请求聊天 | ||
99 | 101 | ||
100 | err := http.ListenAndServe(conf.GetServerHttpAddrConf(), nil) | 102 | err := http.ListenAndServe(conf.GetServerHttpAddrConf(), nil) |
101 | CheckErr(err) | 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 | func queryChatMessage(w http.ResponseWriter, r *http.Request) { | 128 | func queryChatMessage(w http.ResponseWriter, r *http.Request) { |
105 | 129 | ||
106 | result, _ := ioutil.ReadAll(r.Body) | 130 | result, _ := ioutil.ReadAll(r.Body) |
src/HttpServer/logic/logic.go
@@ -271,6 +271,121 @@ func HandleQueryInvite(w http.ResponseWriter, data string) { | @@ -271,6 +271,121 @@ func HandleQueryInvite(w http.ResponseWriter, data string) { | ||
271 | fmt.Fprint(w, string(respstr)) | 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 | func HandlequeryChatMessage(w http.ResponseWriter, data string) { | 389 | func HandlequeryChatMessage(w http.ResponseWriter, data string) { |
275 | 390 | ||
276 | SetHeader(w) | 391 | SetHeader(w) |
@@ -331,7 +446,9 @@ func HandlequeryBrifeMessage(w http.ResponseWriter, data string) { | @@ -331,7 +446,9 @@ func HandlequeryBrifeMessage(w http.ResponseWriter, data string) { | ||
331 | 446 | ||
332 | //先查询表情信息 | 447 | //先查询表情信息 |
333 | emjs := GetChatEmojInfo(rdata.Uuid) | 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 | var world QueryBrifeMessageData | 454 | var world QueryBrifeMessageData |
@@ -1425,8 +1542,8 @@ func HandleTextCheck(w http.ResponseWriter, data string) { | @@ -1425,8 +1542,8 @@ func HandleTextCheck(w http.ResponseWriter, data string) { | ||
1425 | var msgresp MsgCheckResp | 1542 | var msgresp MsgCheckResp |
1426 | _ = json.Unmarshal(result, &msgresp) | 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 | resp.Result.Data = msgresp.Errmsg | 1547 | resp.Result.Data = msgresp.Errmsg |
1431 | 1548 | ||
1432 | resp.Result.Code = ERROR_OK | 1549 | resp.Result.Code = ERROR_OK |
src/common/redis/redis.go
@@ -324,6 +324,16 @@ func (client *RedisClient) LPop(listName string) (string, error) { | @@ -324,6 +324,16 @@ func (client *RedisClient) LPop(listName string) (string, error) { | ||
324 | return value, err | 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 | func (client *RedisClient) LRem(listName string, count int, value string) error { | 337 | func (client *RedisClient) LRem(listName string, count int, value string) error { |
328 | conn := client.m_pool.Get() | 338 | conn := client.m_pool.Get() |
329 | defer conn.Close() | 339 | defer conn.Close() |
@@ -345,6 +355,16 @@ func (client *RedisClient) RPush(listName string, element string) error { | @@ -345,6 +355,16 @@ func (client *RedisClient) RPush(listName string, element string) error { | ||
345 | return err | 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 | func (client *RedisClient) LLen(listName string) (int, error) { | 368 | func (client *RedisClient) LLen(listName string) (int, error) { |
349 | conn := client.m_pool.Get() | 369 | conn := client.m_pool.Get() |
350 | defer conn.Close() | 370 | defer conn.Close() |
src/mysql/dbmysql.go
@@ -14,13 +14,13 @@ import ( | @@ -14,13 +14,13 @@ import ( | ||
14 | ) | 14 | ) |
15 | 15 | ||
16 | var ( | 16 | var ( |
17 | - m_game_db *sql.DB | 17 | + m_game_db *sql.DB |
18 | ) | 18 | ) |
19 | 19 | ||
20 | type QuerInviteDesc struct { | 20 | type QuerInviteDesc struct { |
21 | - Uuid int | ||
22 | - NickName string | ||
23 | - HeadUrl string | 21 | + Uuid int |
22 | + NickName string | ||
23 | + HeadUrl string | ||
24 | IsFecthed int | 24 | IsFecthed int |
25 | } | 25 | } |
26 | 26 | ||
@@ -55,7 +55,7 @@ func ExcuteCmd(cmd string) error { | @@ -55,7 +55,7 @@ func ExcuteCmd(cmd string) error { | ||
55 | return err | 55 | return err |
56 | } | 56 | } |
57 | 57 | ||
58 | -func TestClearData(uid int) (int,error) { | 58 | +func TestClearData(uid int) (int, error) { |
59 | cmd := fmt.Sprintf("select coin from b_user_ext_04 where user_id=%d", uid) | 59 | cmd := fmt.Sprintf("select coin from b_user_ext_04 where user_id=%d", uid) |
60 | 60 | ||
61 | rows, err := m_game_db.Query(cmd) | 61 | rows, err := m_game_db.Query(cmd) |
@@ -64,52 +64,51 @@ func TestClearData(uid int) (int,error) { | @@ -64,52 +64,51 @@ func TestClearData(uid int) (int,error) { | ||
64 | } | 64 | } |
65 | if err != nil { | 65 | if err != nil { |
66 | logger.Notic("TestClearData mysql select error:%v", err) | 66 | logger.Notic("TestClearData mysql select error:%v", err) |
67 | - return 0,err | 67 | + return 0, err |
68 | } | 68 | } |
69 | 69 | ||
70 | - | ||
71 | var value int | 70 | var value int |
72 | for rows.Next() { | 71 | for rows.Next() { |
73 | 72 | ||
74 | err = rows.Scan(&value) | 73 | err = rows.Scan(&value) |
75 | if err != nil { | 74 | if err != nil { |
76 | logger.Notic("TestClearData mysql handle result error:%v", err) | 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 | break | 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 | tablename := "b_user_ext_0" + strconv.Itoa(i) | 87 | tablename := "b_user_ext_0" + strconv.Itoa(i) |
89 | cmd := "update " + tablename + " set coin = " + strconv.Itoa(gold) + " where user_id= " + strconv.Itoa(uuid) | 88 | cmd := "update " + tablename + " set coin = " + strconv.Itoa(gold) + " where user_id= " + strconv.Itoa(uuid) |
90 | err := ExcuteCmd(cmd) | 89 | err := ExcuteCmd(cmd) |
91 | if err != nil { | 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 | return err | 92 | return err |
94 | } | 93 | } |
95 | cmd = "update " + tablename + " set love_exp = " + strconv.Itoa(love) + " where user_id= " + strconv.Itoa(uuid) | 94 | cmd = "update " + tablename + " set love_exp = " + strconv.Itoa(love) + " where user_id= " + strconv.Itoa(uuid) |
96 | err = ExcuteCmd(cmd) | 95 | err = ExcuteCmd(cmd) |
97 | if err != nil { | 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 | return err | 98 | return err |
100 | } | 99 | } |
101 | } | 100 | } |
102 | return nil | 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 | tablename := "b_base_data_0" + strconv.Itoa(i) | 107 | tablename := "b_base_data_0" + strconv.Itoa(i) |
109 | cmd := "DELETE from " + tablename + " where data_uid= " + strconv.Itoa(uuid) | 108 | cmd := "DELETE from " + tablename + " where data_uid= " + strconv.Itoa(uuid) |
110 | err := ExcuteCmd(cmd) | 109 | err := ExcuteCmd(cmd) |
111 | if err != nil { | 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 | return err | 112 | return err |
114 | } | 113 | } |
115 | } | 114 | } |
@@ -117,12 +116,10 @@ func DoClearData(uuid int) error{ | @@ -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 | tablename := "b_user_ext_0" + strconv.Itoa(i) | 123 | tablename := "b_user_ext_0" + strconv.Itoa(i) |
127 | cmd := "SELECT user_id,lv,exp,login_time from " + tablename | 124 | cmd := "SELECT user_id,lv,exp,login_time from " + tablename |
128 | rows, err := m_game_db.Query(cmd) | 125 | rows, err := m_game_db.Query(cmd) |
@@ -140,7 +137,7 @@ func QueryAllData(f *os.File) error{ | @@ -140,7 +137,7 @@ func QueryAllData(f *os.File) error{ | ||
140 | Ulv := 0 | 137 | Ulv := 0 |
141 | Exp := 0 | 138 | Exp := 0 |
142 | LoginTime := 0 | 139 | LoginTime := 0 |
143 | - err = rows.Scan(&Uid, &Ulv, &Exp,&LoginTime) //不scan会导致连接不释放 | 140 | + err = rows.Scan(&Uid, &Ulv, &Exp, &LoginTime) //不scan会导致连接不释放 |
144 | if err != nil { | 141 | if err != nil { |
145 | logger.Error("Scan failed,err:%v", err) | 142 | logger.Error("Scan failed,err:%v", err) |
146 | return err | 143 | return err |
@@ -154,10 +151,10 @@ func QueryAllData(f *os.File) error{ | @@ -154,10 +151,10 @@ func QueryAllData(f *os.File) error{ | ||
154 | tm := time.Unix(int64(LoginTime), 0) | 151 | tm := time.Unix(int64(LoginTime), 0) |
155 | //fmt.Println(tm.Format("2006-01-02 15:04:05")) | 152 | //fmt.Println(tm.Format("2006-01-02 15:04:05")) |
156 | str := strconv.Itoa(Uid) + " " + strconv.Itoa(Ulv) + " " + strconv.Itoa(Exp) + " " + tm.Format("2006-01-02 15:04:05") + "\n" | 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 | //logger.Info("ddt str=%v",str) | 155 | //logger.Info("ddt str=%v",str) |
159 | if err != nil { | 156 | if err != nil { |
160 | - logger.Error("WRITETOFILEFAILED ERR=%v",err) | 157 | + logger.Error("WRITETOFILEFAILED ERR=%v", err) |
161 | return err | 158 | return err |
162 | } | 159 | } |
163 | //fmt.Fprintln(w, str) | 160 | //fmt.Fprintln(w, str) |
@@ -168,42 +165,39 @@ func QueryAllData(f *os.File) error{ | @@ -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 | var rtslice []QuerInviteDesc | 169 | var rtslice []QuerInviteDesc |
176 | 170 | ||
177 | //首先取出邀请关系id | 171 | //首先取出邀请关系id |
178 | rkey := redis.USER_INVITEREWARD_FETCH_REWARD + ":" + strconv.Itoa(uuid) | 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 | if err != nil { | 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 | var tmp QuerInviteDesc | 180 | var tmp QuerInviteDesc |
187 | 181 | ||
188 | bytestr := string(val.([]byte)) | 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 | if err != nil { | 186 | if err != nil { |
193 | tmp.IsFecthed = 1 | 187 | tmp.IsFecthed = 1 |
194 | - logger.Error("QueryInvite failed err=%v",err) | 188 | + logger.Error("QueryInvite failed err=%v", err) |
195 | continue | 189 | continue |
196 | } | 190 | } |
197 | 191 | ||
198 | - stat,_ := strconv.Atoi(val) | 192 | + stat, _ := strconv.Atoi(val) |
199 | tmp.IsFecthed = stat | 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 | tablename := "b_user_ext_0" + strconv.Itoa(i) | 201 | tablename := "b_user_ext_0" + strconv.Itoa(i) |
208 | cmd := "SELECT nickname,avatar_url from " + tablename + " where user_id= " + strconv.Itoa(val.Uuid) | 202 | cmd := "SELECT nickname,avatar_url from " + tablename + " where user_id= " + strconv.Itoa(val.Uuid) |
209 | rows, err := m_game_db.Query(cmd) | 203 | rows, err := m_game_db.Query(cmd) |
@@ -229,15 +223,16 @@ func QueryInvite(uuid int) ([]QuerInviteDesc,error){ | @@ -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 | var nickname string | 230 | var nickname string |
237 | var headurl string | 231 | var headurl string |
238 | - for i:=0;i<10;i++ { | 232 | + var gender int |
233 | + for i := 0; i < 10; i++ { | ||
239 | tablename := "b_user_ext_0" + strconv.Itoa(i) | 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 | rows, err := m_game_db.Query(cmd) | 236 | rows, err := m_game_db.Query(cmd) |
242 | defer func() { | 237 | defer func() { |
243 | if rows != nil { | 238 | if rows != nil { |
@@ -247,17 +242,17 @@ func QueryNameAndHead(uuid int) (string,string,error) { | @@ -247,17 +242,17 @@ func QueryNameAndHead(uuid int) (string,string,error) { | ||
247 | 242 | ||
248 | if err != nil { | 243 | if err != nil { |
249 | logger.Error("Query failed,err:%v", err) | 244 | logger.Error("Query failed,err:%v", err) |
250 | - return "","",err | 245 | + return "", "", 1, err |
251 | } | 246 | } |
252 | for rows.Next() { | 247 | for rows.Next() { |
253 | 248 | ||
254 | - err = rows.Scan(&nickname, &headurl) //不scan会导致连接不释放 | 249 | + err = rows.Scan(&nickname, &headurl, &gender) //不scan会导致连接不释放 |
255 | if err != nil { | 250 | if err != nil { |
256 | logger.Error("Scan failed,err:%v", err) | 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 | \ No newline at end of file | 257 | \ No newline at end of file |
258 | + return nickname, headurl, gender, nil | ||
259 | +} |