From 7d6600753da5046805bcff7bd9070a8b046ad127 Mon Sep 17 00:00:00 2001 From: Patrick Peng Sun Date: Mon, 29 May 2017 22:12:16 +1000 Subject: [PATCH] state needs to be in memory for access --- chatSession.go | 33 +++++++++++++++++++++++++++++++++ 1 file changed, 33 insertions(+) diff --git a/chatSession.go b/chatSession.go index b53f2ee..c27d9eb 100644 --- a/chatSession.go +++ b/chatSession.go @@ -30,6 +30,10 @@ type openIDSessionData struct { UpdateAt int32 `json:"UpdateAt"` //when is this session updated Expire int32 `json:"Expire"` //unix timestamp of when this Procedure expires KvPair map[string]string `json:"KvPair"` //key value pair persistant for this session + // + // + //current state for the prcedure + state chatState } func writeSession(ss openIDSessionData) (err error) { @@ -148,3 +152,32 @@ func (c *openIDSessionData) setKvPair(key, val string) { c.KvPair[key] = val c.UpdateAt = int32(time.Now().Unix()) } + +//main entry point for processing each incoming message +//this stage has session date available +func (c *openIDSessionData) incomingMsg(v InWechatMsg) { + openID := v.header.FromUserName + //are we in an existing procedure + inProc, state := isInProc(openID) //if inside a procedure, resume last saved state + if inProc { + c.state = serveProc(state, v) //transit to new state + } else { + state, processed := serveCommand(openID, v) //menu or txt command e.g. search + if !processed { // transfer to Customer Service (kf) + kfSendTxt(openID, "未识别的命令,已转接校友会理事会,稍后答复您") + } + c.state = state + } + + if !isEndingState(state) { + err := saveChatState(openID, state.Procedure, state) + if err != nil { + log.Println("Error Cannot Save chat sate") + log.Println(err) + log.Println(state) + } + } else { //state ending + cleanProcedure(openID, state.Procedure) + } + return +}