From e549468f9c333c00720ed892b47aedce769af025 Mon Sep 17 00:00:00 2001 From: shoopea Date: Sat, 17 Aug 2019 14:18:25 +0800 Subject: [PATCH] test callbacks --- def.go | 14 ++++++++++++-- job.go | 15 +++++++++++++++ main.go | 3 +++ sql.go | 1 + workers.go | 9 +++++++++ 5 files changed, 40 insertions(+), 2 deletions(-) diff --git a/def.go b/def.go index ae71f0c..1ee010c 100644 --- a/def.go +++ b/def.go @@ -235,8 +235,16 @@ type JobPayloadGStock struct { } type JobPayloadGDeposit struct { - MsgID64 int64 `json:"msg_id"` - ChatID64 int64 `json:"chat_id"` + MsgID64 int64 `json:"msg_id"` + ChatID64 int64 `json:"chat_id"` + ResObjID64 []int64 `json:"res_obj_id"` +} + +type JobPayloadSaveRes struct { + MsgID64 int64 `json:"msg_id"` + ChatID64 int64 `json:"chat_id"` + ResObjID64 int64 `json:"res_obj_id"` + BuyRes bool `json:"buy_res"` } type JobPayloadRescanMsg struct { @@ -383,6 +391,7 @@ const ( objSubTypeJobBackupExport = 610 objSubTypeJobBackupImport = 611 objSubTypeJobGDeposit = 612 + objSubTypeJobSaveRes = 613 objSubTypeItemResource = 701 objSubTypeItemAlch = 702 objSubTypeItemMisc = 703 @@ -399,6 +408,7 @@ const ( objSubTypeQuestSwamp = 1302 objSubTypeQuestValley = 1303 + objJobStatusCallBack = -1 objJobStatusNew = 0 objJobStatusPillageGo = 1 objJonStatusPending = 10 diff --git a/job.go b/job.go index 8d14907..8e302cc 100644 --- a/job.go +++ b/job.go @@ -54,6 +54,21 @@ func createJob(jobTypeID int32, priority int32, userID64 int64, schedule time.Ti return objId, nil } +func createJobCallback(jobTypeID int32, userID64 int64, msgTypeID64 int64, payload []byte) error { + jobID64, err := createJob(jobTypeID, userID64, time.Parse(time.RFC3339, "9999-12-31T00:00:00+00:00"), payload) + if err != nil { + return err + } + setJobCallback(jobID64, userID64, msgTypeID64) + return nil +} + +func setJobCallback(jobID64 int64, userID64 int64, msgTypeID64 int64) { + muxCallbacks.Lock() + callbacks = append(callbacks[userID64][msgTypeID64], jobID64) + muxCallbacks.Unlock() +} + func setJobDone(jobId int64) error { stmt, err := db.Prepare(`UPDATE obj_job j SET j.is_done = 1, j.in_work = 0, j.ended = ? WHERE j.obj_id = ?;`) logOnError(err, "setJobDone : prepare update obj_job") diff --git a/main.go b/main.go index 7d6421e..02613ab 100644 --- a/main.go +++ b/main.go @@ -63,6 +63,9 @@ var ( clients map[int64]*ChirpClient muxClients sync.RWMutex + + callbacks map[int64][int64][]int64 + muxCallbacks sync.Mutex ) func PrintText(m *tb.Message) { diff --git a/sql.go b/sql.go index abdbe56..fbc9037 100644 --- a/sql.go +++ b/sql.go @@ -495,6 +495,7 @@ func initDB() { ,(` + strconv.Itoa(objSubTypeJobBackupExport) + `, "job_backup_export", "Export Backup", ` + strconv.Itoa(objTypeJob) + `) ,(` + strconv.Itoa(objSubTypeJobBackupImport) + `, "job_backup_import", "Import Backup", ` + strconv.Itoa(objTypeJob) + `) ,(` + strconv.Itoa(objSubTypeJobGDeposit) + `, "job_gdeposit", "GDeposit job", ` + strconv.Itoa(objTypeJob) + `) + ,(` + strconv.Itoa(objSubTypeJobSaveRes) + `, "job_save_res", "Save resources job", ` + strconv.Itoa(objTypeJob) + `) ,(` + strconv.Itoa(objSubTypeItemResource) + `, "item_res", "Time", ` + strconv.Itoa(objTypeItem) + `) ,(` + strconv.Itoa(objSubTypeItemAlch) + `, "item_alch", "Time", ` + strconv.Itoa(objTypeItem) + `) ,(` + strconv.Itoa(objSubTypeItemMisc) + `, "item_misc", "Time", ` + strconv.Itoa(objTypeItem) + `) diff --git a/workers.go b/workers.go index 2915995..3cca178 100644 --- a/workers.go +++ b/workers.go @@ -468,6 +468,15 @@ func SQLIdentifyMsgWorker(id int, objIds <-chan int64) { default: log.Printf("SQLIdentifyMsgWorker["+strconv.Itoa(id)+"] : Unknwon message type in rule %d : %d (%d)\n%s\n", msgParsingRules[i].ID, msgParsingRules[i].MsgTypeID, objId, m.Text) } + muxCallbacks.Lock() + if len(callbacks[m.TGUserID64][msgParsingRules[i].MsgTypeID]) > 0 { + for jobID64 := range callbacks[m.TGUserID64][msgParsingRules[i].MsgTypeID] { + err := rescheduleJob(jobID64, objJobStatusNew, time.Now().UTC()) + logOnError(err, "SQLIdentifyMsgWorker["+strconv.Itoa(id)+"] : callbacks triggering") + } + callbacks[m.TGUserID64][msgParsingRules[i].MsgTypeID] = new([]int64) + } + muxCallbacks.Unlock() } } }