| @@ -95,6 +95,7 @@ func (ss *openIDSessionData) Delete() { | |||
| func (ss *openIDSessionData) Save() { | |||
| //invalid procedure | |||
| if isExpired(ss.Expire) || ss.Procedure == "" { | |||
| log.Printf("delete session [%s], %d, now=%d", ss.Procedure, ss.Expire, time.Now().Unix()) | |||
| ss.Delete() | |||
| } else { | |||
| ss.writeSession() | |||
| @@ -154,12 +155,14 @@ func (ss *openIDSessionData) incomingMsg(v InWechatMsg) { | |||
| openID := v.header.FromUserName | |||
| //kfSendTxtAs(openID, "信息收到"+v.header.MsgType, "孙鹏") | |||
| //are we in an existing procedure | |||
| log.Printf("current procedure = %s", ss.Procedure) | |||
| proc, found := AllProc[ss.Procedure] | |||
| if found { | |||
| proc.serve(ss, v) //transit to new state | |||
| } else { | |||
| processed := ss.serveCommand(v) //menu or txt command e.g. search | |||
| if !processed { // transfer to Customer Service (kf) | |||
| log.Printf("current procedure after command = %s", ss.Procedure) | |||
| if !processed { // transfer to Customer Service (kf) | |||
| //start transfer | |||
| ss.state.response, _ = BuildKFTransferAnyOneMsg(openID) | |||
| v.replyXML(ss.state.response) | |||
| @@ -37,7 +37,6 @@ func echoServe(ss *openIDSessionData, in InWechatMsg) { | |||
| if in.header.MsgType == "text" { | |||
| if in.body.(TextMsg).Content == "结束Echo" || in.body.(TextMsg).Content == "结束echo" { | |||
| stopEcho = true | |||
| return | |||
| } | |||
| } | |||
| if in.header.MsgType == "voice" { | |||
| @@ -2,6 +2,7 @@ package main | |||
| import ( | |||
| "fmt" | |||
| "log" | |||
| "strings" | |||
| "time" | |||
| ) | |||
| @@ -47,7 +48,9 @@ func (ss *openIDSessionData) serveTextCommand(in InWechatMsg) (processed bool) { | |||
| } | |||
| if cmd != "" { | |||
| if f, hasFunction := commandMap[cmd]; hasFunction { | |||
| return f(ss, in) | |||
| processed = f(ss, in) | |||
| log.Printf("cmd...%s", ss.Procedure) | |||
| return | |||
| } | |||
| if cmd == "所有命令" || cmd == "all command" { | |||
| return allCommand(ss, in) | |||
| @@ -114,7 +114,7 @@ func (m *SessionManager) destroySession(openID string) { | |||
| //save session data to disk | |||
| data := m.sessions[openID].data | |||
| data.Save() | |||
| log.Printf("procedure name when saving =%s", data.Procedure) | |||
| //close job channels | |||
| s := m.sessions[openID] | |||
| close(s.jobs) | |||
| @@ -135,6 +135,8 @@ func (m *SessionManager) startJob(openID string) { | |||
| m.checkOpenID(openID, v) | |||
| s := m.sessions[openID] | |||
| s.data.incomingMsg(v) //<=== main logic for processing each incoming message | |||
| log.Printf("after incoming message %s", s.data.Procedure) | |||
| m.sessions[openID] = s | |||
| jobFinished.consumed++ | |||
| default: | |||
| hasJob = false | |||