| import ( | import ( | ||||
| "log" | "log" | ||||
| "time" | |||||
| ) | ) | ||||
| //openIDSession for a given openID | //openIDSession for a given openID | ||||
| s := openIDSession{} | s := openIDSession{} | ||||
| s.openID = openID | s.openID = openID | ||||
| s.count = 0 | s.count = 0 | ||||
| s.jobs = make(chan InWechatMsg, 200) | |||||
| s.jobs = make(chan InWechatMsg, 50) | |||||
| s.data, _ = getCurrentSesssion(openID) //either load or create new | s.data, _ = getCurrentSesssion(openID) //either load or create new | ||||
| m.sessions[openID] = s //register it to memory | m.sessions[openID] = s //register it to memory | ||||
| return s | return s | ||||
| for hasJob { | for hasJob { | ||||
| select { | select { | ||||
| case v := <-m.sessions[openID].jobs: | case v := <-m.sessions[openID].jobs: | ||||
| if v.header.FromUserName != openID { | |||||
| log.Println("Error: Weird Message below ...") | |||||
| log.Println(v) | |||||
| log.Fatalf("Error: worker thread for %s, see different id=%s \n", openID, v.header.FromUserName) | |||||
| } | |||||
| log.Println(" Processing job..") | |||||
| log.Println(v) | |||||
| time.Sleep(5 * time.Second) | |||||
| kfSendTxt(openID, "Job Processed "+v.body.(TextMsg).Content) | |||||
| m.checkOpenID(openID, v) | |||||
| s := m.sessions[openID] | |||||
| s.data.incomingMsg(v) //<=== main logic for processing each incoming message | |||||
| jobFinished.consumed++ | jobFinished.consumed++ | ||||
| default: | default: | ||||
| hasJob = false | hasJob = false | ||||
| m.done <- jobFinished //notify parent that we have done | m.done <- jobFinished //notify parent that we have done | ||||
| return | return | ||||
| } | } | ||||
| func (m *SessionManager) checkOpenID(openID string, v InWechatMsg) { | |||||
| if v.header.FromUserName != openID { | |||||
| log.Println("Error: Weird Message below ...") | |||||
| log.Println(v) | |||||
| log.Fatalf("Error: worker thread for %s, see different id=%s \n", openID, v.header.FromUserName) | |||||
| } | |||||
| } |