|
@@ -0,0 +1,78 @@
|
|
|
+package jyutil
|
|
|
+
|
|
|
+import (
|
|
|
+ "jfw/config"
|
|
|
+ "jfw/public"
|
|
|
+ "log"
|
|
|
+ "qfw/util"
|
|
|
+ "sync"
|
|
|
+ "time"
|
|
|
+)
|
|
|
+
|
|
|
+type PushDetail struct {
|
|
|
+ Rid string `json:"rid"`
|
|
|
+ Oid string `json:"oid"`
|
|
|
+ DeviceId string `json:"deviceId"`
|
|
|
+ PhoneType string `json:"phoneType"`
|
|
|
+ Createtime int64 `json:"createtime"`
|
|
|
+}
|
|
|
+
|
|
|
+type UnLoginPushManager struct {
|
|
|
+ Lock sync.Mutex
|
|
|
+ Date map[string]*PushDetail
|
|
|
+}
|
|
|
+
|
|
|
+var UnLoginPush *UnLoginPushManager
|
|
|
+var mongodb = public.MQFW
|
|
|
+
|
|
|
+func init() {
|
|
|
+ UnLoginPush = &UnLoginPushManager{Date: make(map[string]*PushDetail)}
|
|
|
+ go UnLoginPush.Work()
|
|
|
+}
|
|
|
+
|
|
|
+func (u *UnLoginPushManager) SaveBuff(p *PushDetail) bool {
|
|
|
+ u.Lock.Lock()
|
|
|
+ defer u.Lock.Unlock()
|
|
|
+ u.Date[p.Rid] = p
|
|
|
+ return true
|
|
|
+}
|
|
|
+
|
|
|
+func (u *UnLoginPushManager) DeleteBuff(rid string) {
|
|
|
+ u.Lock.Lock()
|
|
|
+ defer u.Lock.Unlock()
|
|
|
+ delete(u.Date, rid)
|
|
|
+ log.Printf("DeleteBuff size %d ,this rid:%s\n", len(u.Date), rid)
|
|
|
+}
|
|
|
+
|
|
|
+func (u *UnLoginPushManager) savePushId(p *PushDetail) {
|
|
|
+ data := map[string]interface{}{
|
|
|
+ "s_rid": p.Rid,
|
|
|
+ }
|
|
|
+ if mongodb.Count("jyapp_pushId", data) == 0 {
|
|
|
+ log.Println("save", p.Rid)
|
|
|
+ data["i_cometime"] = p.Createtime
|
|
|
+ data["s_oid"] = p.Oid
|
|
|
+ data["phoneType"] = p.PhoneType
|
|
|
+ data["s_deviceId"] = p.DeviceId
|
|
|
+ data["i_lastTime"] = p.Createtime
|
|
|
+ mongodb.Save("jyapp_pushId", data)
|
|
|
+ } else {
|
|
|
+ log.Println("update", p.Rid)
|
|
|
+ mongodb.Update("jyapp_pushId", data, map[string]interface{}{"$set": map[string]interface{}{
|
|
|
+ "i_lastTime": p.Createtime,
|
|
|
+ }}, false, true)
|
|
|
+ }
|
|
|
+}
|
|
|
+
|
|
|
+func (u *UnLoginPushManager) Work() {
|
|
|
+ u.Lock.Lock()
|
|
|
+ defer u.Lock.Unlock()
|
|
|
+ log.Printf("Work----Buff size %d\n", len(u.Date))
|
|
|
+ for _, v := range u.Date {
|
|
|
+ if v.Createtime+util.Int64All(config.Seoconfig["aftefSavePushId"]) < time.Now().Unix() {
|
|
|
+ u.savePushId(v)
|
|
|
+ delete(u.Date, v.Rid)
|
|
|
+ }
|
|
|
+ }
|
|
|
+ time.AfterFunc(time.Minute, u.Work)
|
|
|
+}
|