test jobs main shops slaves
This commit is contained in:
parent
7aac758ac0
commit
38fdbb8c32
1
bot.go
1
bot.go
@ -791,6 +791,7 @@ func botShops(m *ChatWarsMessage) {
|
|||||||
Status: 0,
|
Status: 0,
|
||||||
ChatID64: m.ChatID64,
|
ChatID64: m.ChatID64,
|
||||||
MsgID64: m.ID64,
|
MsgID64: m.ID64,
|
||||||
|
Msgs: make([]ChatWarsMessage, 0),
|
||||||
}
|
}
|
||||||
b, err := json.Marshal(j)
|
b, err := json.Marshal(j)
|
||||||
logOnError(err, "botShops : Marshal")
|
logOnError(err, "botShops : Marshal")
|
||||||
|
14
def.go
14
def.go
@ -367,6 +367,11 @@ type ChatWarsMessageTributesStatsAck struct {
|
|||||||
Tributes []ChatWarsTribute `json:"tributes"`
|
Tributes []ChatWarsTribute `json:"tributes"`
|
||||||
}
|
}
|
||||||
|
|
||||||
|
type ChatWarsMessageShopMainReq struct {
|
||||||
|
Msg *ChatWarsMessage `json:"msg"`
|
||||||
|
Link string `json:"link"`
|
||||||
|
}
|
||||||
|
|
||||||
type ChatWarsMessageShopMainAck struct {
|
type ChatWarsMessageShopMainAck struct {
|
||||||
Msg *ChatWarsMessage `json:"msg"`
|
Msg *ChatWarsMessage `json:"msg"`
|
||||||
Name string `json:"name"`
|
Name string `json:"name"`
|
||||||
@ -558,11 +563,10 @@ type JobPayloadGetVault struct {
|
|||||||
}
|
}
|
||||||
|
|
||||||
type JobPayloadShops struct {
|
type JobPayloadShops struct {
|
||||||
MsgID64 int64 `json:"msg_id"`
|
MsgID64 int64 `json:"msg_id"`
|
||||||
ChatID64 int64 `json:"chat_id"`
|
ChatID64 int64 `json:"chat_id"`
|
||||||
Status int64 `json:"status"`
|
Status int64 `json:"status"`
|
||||||
ShopMainAckMsg []ChatWarsMessage `json:"shop_main_ack_msg"`
|
Msgs []ChatWarsMessage `json:"msgs"`
|
||||||
CleanupMsg []ChatWarsMessage `json:"cleanup_msg"`
|
|
||||||
}
|
}
|
||||||
|
|
||||||
type JobPayloadShopsSlave struct {
|
type JobPayloadShopsSlave struct {
|
||||||
|
123
job.go
123
job.go
@ -154,7 +154,23 @@ func setJobPayloadJSON(jobID64 int64, payload interface{}) error {
|
|||||||
return setJobPayload(jobID64, b)
|
return setJobPayload(jobID64, b)
|
||||||
}
|
}
|
||||||
|
|
||||||
|
func setJobPayloadJSONUnsafe(jobID64 int64, payload interface{}) error {
|
||||||
|
b, err := json.Marshal(payload)
|
||||||
|
logOnError(err, "setJobPayloadJSONUnsafe")
|
||||||
|
if err != nil {
|
||||||
|
return err
|
||||||
|
}
|
||||||
|
|
||||||
|
return setJobPayloadUnsafe(jobID64, b)
|
||||||
|
}
|
||||||
|
|
||||||
func setJobPayload(jobID64 int64, payload []byte) error {
|
func setJobPayload(jobID64 int64, payload []byte) error {
|
||||||
|
muxObjJob.Lock()
|
||||||
|
return setJobPayloadUnsafe(jobID64, payload)
|
||||||
|
defer muxObjJob.Unlock()
|
||||||
|
}
|
||||||
|
|
||||||
|
func setJobPayloadUnsafe(jobID64 int64, payload []byte) error {
|
||||||
var (
|
var (
|
||||||
zb bytes.Buffer
|
zb bytes.Buffer
|
||||||
zpayload []byte
|
zpayload []byte
|
||||||
@ -190,11 +206,9 @@ func setJobPayload(jobID64 int64, payload []byte) error {
|
|||||||
return err
|
return err
|
||||||
}
|
}
|
||||||
|
|
||||||
muxObjJob.Lock()
|
|
||||||
j := cacheObjJob[jobID64]
|
j := cacheObjJob[jobID64]
|
||||||
j.Payload = payload
|
j.Payload = payload
|
||||||
cacheObjJob[jobID64] = j
|
cacheObjJob[jobID64] = j
|
||||||
muxObjJob.Unlock()
|
|
||||||
|
|
||||||
//log.Printf("setJobPayload[%d] : %s\n", jobID64, string(payload))
|
//log.Printf("setJobPayload[%d] : %s\n", jobID64, string(payload))
|
||||||
|
|
||||||
@ -202,9 +216,13 @@ func setJobPayload(jobID64 int64, payload []byte) error {
|
|||||||
}
|
}
|
||||||
|
|
||||||
func getJobPayload(jobID64 int64) []byte {
|
func getJobPayload(jobID64 int64) []byte {
|
||||||
var b []byte
|
|
||||||
muxObjJob.Lock()
|
muxObjJob.Lock()
|
||||||
defer muxObjJob.Unlock()
|
defer muxObjJob.Unlock()
|
||||||
|
return getJobPayloadUnsafe(jobID64)
|
||||||
|
}
|
||||||
|
|
||||||
|
func getJobPayloadUnsafe(jobID64 int64) []byte {
|
||||||
|
var b []byte
|
||||||
if j, ok := cacheObjJob[jobID64]; ok {
|
if j, ok := cacheObjJob[jobID64]; ok {
|
||||||
b = j.Payload
|
b = j.Payload
|
||||||
return b
|
return b
|
||||||
@ -2180,16 +2198,111 @@ func jobCheckVaultLimit(j Job) {
|
|||||||
}
|
}
|
||||||
|
|
||||||
func jobShops(j Job) {
|
func jobShops(j Job) {
|
||||||
|
var p JobPayloadShops
|
||||||
|
|
||||||
err := setJobDone(j.ID64)
|
err := setJobStart(j.ID64)
|
||||||
|
logOnError(err, "jobShops : setJobStart")
|
||||||
|
|
||||||
|
err = json.Unmarshal(j.Payload, &p)
|
||||||
|
logOnError(err, "jobShops : Unmarshal payload")
|
||||||
|
|
||||||
|
c := TGCommand{
|
||||||
|
Type: commandReplyMsg,
|
||||||
|
Text: "Done",
|
||||||
|
FromMsgID64: p.MsgID64,
|
||||||
|
FromChatID64: p.ChatID64,
|
||||||
|
ParseMode: cmdParseModeHTML,
|
||||||
|
}
|
||||||
|
TGCmdQueue <- c
|
||||||
|
|
||||||
|
err = setJobDone(j.ID64)
|
||||||
logOnError(err, "jobShops : setJobDone")
|
logOnError(err, "jobShops : setJobDone")
|
||||||
|
|
||||||
return
|
return
|
||||||
}
|
}
|
||||||
|
|
||||||
func jobShopsSlave(j Job) {
|
func jobShopsSlave(j Job) {
|
||||||
|
var p JobPayloadShopsSlave
|
||||||
|
|
||||||
err := setJobDone(j.ID64)
|
err := setJobStart(j.ID64)
|
||||||
|
logOnError(err, "jobShopsSlave : setJobStart")
|
||||||
|
|
||||||
|
err = json.Unmarshal(j.Payload, &p)
|
||||||
|
logOnError(err, "jobShopsSlave : Unmarshal payload")
|
||||||
|
|
||||||
|
if j.Trigger != 0 {
|
||||||
|
id, err := getObjSubTypeId(j.Trigger)
|
||||||
|
logOnError(err, "jobShopsSlave : getObjSubType("+strconv.FormatInt(j.Trigger, 10)+")")
|
||||||
|
if err == nil {
|
||||||
|
m, err := getObjMsg(j.Trigger)
|
||||||
|
logOnError(err, "jobShopsSlave : getObjMsg")
|
||||||
|
rule, err := getMsgParsingRule(m)
|
||||||
|
logOnError(err, "jobShopsSlave : getMsgParsingRule")
|
||||||
|
|
||||||
|
switch id {
|
||||||
|
case cacheObjSubType[`msg_shop_main_req`]:
|
||||||
|
cwm, err := parseSubTypeMessageShopMainReq(m, rule.re)
|
||||||
|
logOnError(err, "jobShopsSlave : parseSubTypeMessageShopMainReq")
|
||||||
|
|
||||||
|
muxObjJob.Lock()
|
||||||
|
b2 := getJobPayloadUnsafe(p.JobCallbackID64)
|
||||||
|
var p2 JobPayloadShops
|
||||||
|
err = json.Unmarshal(b2, &p2)
|
||||||
|
p2.Msgs = append(p2.Msgs, m)
|
||||||
|
err = setJobPayloadJSONUnsafe(p.JobCallbackID64, p2)
|
||||||
|
logOnError(err, "jobShopsSlave : setJobPayloadJSONUnsafe")
|
||||||
|
muxObjJob.Unlock()
|
||||||
|
|
||||||
|
rescheduleJob(j.ID64, 0, time.Unix(maxUnixTimestamp, 0).UTC()) // reschedule so that it gets picked up by shop main ack callback
|
||||||
|
return
|
||||||
|
case cacheObjSubType[`msg_shop_main_ack`]:
|
||||||
|
cwm, err := parseSubTypeMessageShopMainAck(m, rule.re)
|
||||||
|
logOnError(err, "jobShopsSlave : parseSubTypeMessageShopMainAck")
|
||||||
|
|
||||||
|
muxObjJob.Lock()
|
||||||
|
b2 := getJobPayloadUnsafe(p.JobCallbackID64)
|
||||||
|
var p2 JobPayloadShops
|
||||||
|
err = json.Unmarshal(b2, &p2)
|
||||||
|
p2.Msgs = append(p2.Msgs, m)
|
||||||
|
err = setJobPayloadJSONUnsafe(p.JobCallbackID64, p2)
|
||||||
|
muxObjJob.Unlock()
|
||||||
|
|
||||||
|
for i, link := range p.Shops {
|
||||||
|
if cwm.Link == link {
|
||||||
|
p.Shops = append(p.Shops[:i], p.Shops[i+1:])
|
||||||
|
break
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
err = setJobPayloadJSON(j.ID64, p)
|
||||||
|
logOnError(err, "jobShopsSlave : setJobPayloadJSON")
|
||||||
|
default:
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
if len(p.Shops) != 0 {
|
||||||
|
rescheduleJob(j.ID64, 0, time.Unix(maxUnixTimestamp, 0).UTC()) // reschedule so that it gets picked up by shop main ack callback
|
||||||
|
setJobCallback(j.ID64, j.UserID64, cacheObjSubType[`msg_shop_main_req`])
|
||||||
|
setJobCallback(j.ID64, j.UserID64, cacheObjSubType[`msg_shop_main_ack`])
|
||||||
|
clientSendCWMsgDelay(j.UserID64, fmt.Sprintf("/ws_%s", p.Shops[0]), 4)
|
||||||
|
return
|
||||||
|
}
|
||||||
|
|
||||||
|
// we update the master status now that the slave job is done
|
||||||
|
muxObjJob.Lock()
|
||||||
|
b2 := getJobPayloadUnsafe(p.JobCallbackID64)
|
||||||
|
var p2 JobPayloadShops
|
||||||
|
err = json.Unmarshal(b2, &p2)
|
||||||
|
p2.Status += 1
|
||||||
|
err = setJobPayloadJSONUnsafe(p.JobCallbackID64, p2)
|
||||||
|
muxObjJob.Unlock()
|
||||||
|
|
||||||
|
// if last job to finish then we wake up the master
|
||||||
|
if p2.Status == p.Slaves {
|
||||||
|
rescheduleJob(j.JobCallbackID64, 0, time.Now().UTC())
|
||||||
|
}
|
||||||
|
|
||||||
|
err = setJobDone(j.ID64)
|
||||||
logOnError(err, "jobShopsSlave : setJobDone")
|
logOnError(err, "jobShopsSlave : setJobDone")
|
||||||
|
|
||||||
return
|
return
|
||||||
|
11
msg.go
11
msg.go
@ -298,6 +298,17 @@ func parseSubTypeMessageTributesStatsAck(m *ChatWarsMessage, r *regexp.Regexp) (
|
|||||||
return &cwm, nil
|
return &cwm, nil
|
||||||
}
|
}
|
||||||
|
|
||||||
|
func parseSubTypeMessageShopMainReq(m *ChatWarsMessage, r *regexp.Regexp) (*ChatWarsMessageShopMainReq, error) {
|
||||||
|
cwm := ChatWarsMessageShopMainReq{}
|
||||||
|
cwm.Msg = m
|
||||||
|
|
||||||
|
cwm.Link = r.ReplaceAllString(m.Text, "${Link}")
|
||||||
|
|
||||||
|
log.Printf("parseSubTypeMessageShopMainReq : Link : %s\n", cwm.Link)
|
||||||
|
|
||||||
|
return &cwm, nil
|
||||||
|
}
|
||||||
|
|
||||||
func parseSubTypeMessageShopMainAck(m *ChatWarsMessage, r *regexp.Regexp) (*ChatWarsMessageShopMainAck, error) {
|
func parseSubTypeMessageShopMainAck(m *ChatWarsMessage, r *regexp.Regexp) (*ChatWarsMessageShopMainAck, error) {
|
||||||
cwm := ChatWarsMessageShopMainAck{}
|
cwm := ChatWarsMessageShopMainAck{}
|
||||||
cwm.Msg = m
|
cwm.Msg = m
|
||||||
|
Loading…
Reference in New Issue
Block a user