From 32a556ef6d8821b65a9907b8d8d865a1068aeb60 Mon Sep 17 00:00:00 2001 From: shoopea Date: Mon, 3 Feb 2020 14:18:17 +0800 Subject: [PATCH] test obj_tribute --- data/code_obj_sub_type.json | 5 +++ data/code_obj_type.json | 4 +++ msg.go | 5 +++ sql.go | 70 ++++++++++++++++++++++++++++--------- workers.go | 2 ++ 5 files changed, 70 insertions(+), 16 deletions(-) diff --git a/data/code_obj_sub_type.json b/data/code_obj_sub_type.json index 5d3d67c..10ba80a 100644 --- a/data/code_obj_sub_type.json +++ b/data/code_obj_sub_type.json @@ -824,6 +824,11 @@ "name": "Valley", "obj_type": "quest" }, + { + "intl_id": "tribute", + "name": "Tribute", + "obj_type": "tribute" + }, { "intl_id": "test", "name": "Test", diff --git a/data/code_obj_type.json b/data/code_obj_type.json index 59694ca..0fd3f00 100644 --- a/data/code_obj_type.json +++ b/data/code_obj_type.json @@ -51,6 +51,10 @@ "intl_id": "quest", "name": "Quest" }, + { + "intl_id": "tribute", + "name": "Tribute" + }, { "intl_id": "test", "name": "Test" diff --git a/msg.go b/msg.go index 292348c..a088fd4 100644 --- a/msg.go +++ b/msg.go @@ -285,6 +285,11 @@ func parseSubTypeMessageTributesStatsAck(m *ChatWarsMessage, r *regexp.Regexp) ( log.Printf("parseSubTypeMessageTributesStatsAck : Item : %s\n", re.ReplaceAllString(l[0], "${Item}")) log.Printf("parseSubTypeMessageTributesStatsAck : Quantity : %s\n", re.ReplaceAllString(l[0], "${Quantity}")) log.Printf("parseSubTypeMessageTributesStatsAck : Exp : %s\n", re.ReplaceAllString(l[0], "${Exp}")) + tribute.Date, err = fromChatWarsDate(re.ReplaceAllString(l[0], "${Date}")) + logOnError(err, "parseSubTypeMessageTributesStatsAck : fromChatWarsDate") + tribute.ItemID64 = getSilentObjItemID(``, re.ReplaceAllString(l[0], "${Item}")) + tribute.Quantity, _ = strconv.ParseInt(r.ReplaceAllString(l[0], "${Quantity}"), 10, 64) + tribute.Exp, _ = strconv.ParseInt(r.ReplaceAllString(l[0], "${Exp}"), 10, 64) cwm.Tributes = append(cwm.Tributes, tribute) } diff --git a/sql.go b/sql.go index 41c9d2a..71afc05 100644 --- a/sql.go +++ b/sql.go @@ -296,10 +296,38 @@ func initDB() { ,quantity INT NOT NULL ,FOREIGN KEY (obj_id) REFERENCES obj(id) ON DELETE CASCADE ,FOREIGN KEY (item_id) REFERENCES obj_item(obj_id) ON DELETE CASCADE + ,UNIQUE KEY (obj_id, item_id) ) ENGINE = InnoDB CHARSET=utf8mb4 COLLATE utf8mb4_bin;`) - failOnError(err, "initDB : create table obj_msg_gold") + failOnError(err, "initDB : create table obj_msg_item") log.Println("initDB : obj_msg_item created ...") + _, err = db.Exec(`CREATE TABLE obj_msg_tribute ( + obj_id BIGINT UNSIGNED NOT NULL + ,user_id BIGINT UNSIGNED NOT NULL + ,item_id BIGINT UNSIGNED NOT NULL + ,quantity SMALLINT NOT NULL + ,xp SMALLINT NOT NULL + ,date DATETIME NOT NULL + ,FOREIGN KEY (obj_id) REFERENCES obj(id) ON DELETE CASCADE + ,FOREIGN KEY (user_id) REFERENCES obj_user(obj_id) ON DELETE CASCADE + ,FOREIGN KEY (item_id) REFERENCES obj_item(obj_id) ON DELETE CASCADE + ,UNIQUE KEY (user_id, date) + ) ENGINE = InnoDB CHARSET=utf8mb4 COLLATE utf8mb4_bin;`) + failOnError(err, "initDB : create table obj_msg_tribute") + log.Println("initDB : obj_msg_tribute created ...") + + _, err = db.Exec(`CREATE TABLE obj_tribute ( + tg_user_id BIGINT UNSIGNED NOT NULL + ,item_id BIGINT UNSIGNED NOT NULL + ,quantity INT NOT NULL + ,exp INT NOT NULL + ,date DATETIME NOT NULL + ,FOREIGN KEY (item_id) REFERENCES obj_item(obj_id) ON DELETE CASCADE + ,UNIQUE KEY (tg_user_id, item_id, quantity, exp, date) + ) ENGINE = InnoDB CHARSET=utf8mb4 COLLATE utf8mb4_bin;`) + failOnError(err, "initDB : create table obj_tribute") + log.Println("initDB : obj_tribute created ...") + _, err = db.Exec(`CREATE TABLE msg_rules ( id SMALLINT UNSIGNED NOT NULL AUTO_INCREMENT ,prio SMALLINT NOT NULL @@ -313,21 +341,6 @@ func initDB() { failOnError(err, "initDB : create table msg_rules") log.Println("initDB : msg_rules created ...") - _, err = db.Exec(`CREATE TABLE obj_tribute ( - obj_id BIGINT UNSIGNED NOT NULL - ,user_id BIGINT UNSIGNED NOT NULL - ,item_id BIGINT UNSIGNED NOT NULL - ,quantity SMALLINT NOT NULL - ,xp SMALLINT NOT NULL - ,date DATETIME NOT NULL - ,FOREIGN KEY (obj_id) REFERENCES obj(id) ON DELETE CASCADE - ,FOREIGN KEY (user_id) REFERENCES obj_user(obj_id) ON DELETE CASCADE - ,FOREIGN KEY (item_id) REFERENCES obj_item(obj_id) ON DELETE CASCADE - ,UNIQUE KEY (user_id, date) - ) ENGINE = InnoDB CHARSET=utf8mb4 COLLATE utf8mb4_bin;`) - failOnError(err, "initDB : create table obj_tribute") - log.Println("initDB : obj_tribute created ...") - _, err = db.Exec(`CREATE TABLE obj_xp ( obj_id BIGINT UNSIGNED NOT NULL ,user_id BIGINT UNSIGNED NOT NULL @@ -627,6 +640,31 @@ func insertMsgDuelFight(m *ChatWarsMessageDuelFight) error { return nil } +func insertMsgTributesStats(m *ChatWarsMessageTributesStatsAck) error { + objSubTypeId, err := getObjSubTypeId(m.ObjID64) + if err != nil { + return err + } + if objSubTypeId != cacheObjSubType[`msg`] && objSubTypeId != cacheObjSubType[`msg_tributes_stats_ack`] { + return errors.New("Message type mismatch") + } + + stmt, err := db.Prepare(`INSERT INTO obj_tribute (tg_user_id, item_id, quantity, exp, date) + VALUES (?, ?, ?, ?, ?);`) + logOnError(err, "insertMsgTributesStats : Prepare") + if err != nil { + return err + } + defer stmt.Close() + + for _, t := range m.Tributes { + _, err = stmt.Exec(m.Msg.TGUserID64, t.ItemID64, t.Quantity, t.Exp, t.Date) + logOnError(err, "insertMsgTributesStats Exec") + } + + return nil +} + func insertMsgAuctionAnnounce(m *ChatWarsMessageAuctionAnnounce) error { objSubTypeId, err := getObjSubTypeId(m.ObjID64) if err != nil { diff --git a/workers.go b/workers.go index 4ccbbee..aa30967 100644 --- a/workers.go +++ b/workers.go @@ -518,6 +518,8 @@ func SQLIdentifyMsgWorker(id int, objIds <-chan int64) { case cacheObjSubType[`msg_tributes_stats_ack`]: _, err := parseSubTypeMessageTributesStatsAck(m, rule.re) logOnError(err, "SQLIdentifyMsgWorker["+strconv.Itoa(id)+"] : Parsing cacheObjSubType[`msg_tributes_stats_ack`]") + err = insertMsgTributesStats(cwm) + logOnError(err, "SQLIdentifyMsgWorker["+strconv.Itoa(id)+"] : insertMsgTributesStats") default: //log.Printf("SQLIdentifyMsgWorker["+strconv.Itoa(id)+"] : Unknwon message type in rule %d : %d (%d)\n%s\n", msgParsingRules[i].ID, msgParsingRules[i].MsgTypeID64, objId, m.Text) }