/
service.go
72 lines (62 loc) · 1.45 KB
/
service.go
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
package service
import (
"log"
"time"
"github.com/songtianyi/rrframework/logs"
"github.com/songtianyi/wechat-go/wxweb"
)
var (
session *wxweb.Session
SessionReady bool
readyReceiver = "xiubi" //notify ready
)
func SetReadyReceiver(receiver string) {
readyReceiver = receiver
return
}
func init() {
logs.Info("creating session...")
// create session
var err error
session, err = wxweb.CreateSession(nil, nil, wxweb.TERMINAL_MODE)
if err != nil {
logs.Error(err)
return
}
// load plugins for this session
Register(session)
// switcher.Register(session)
// config.Register(session)
// session.HandlerRegister.EnableByName("switcher")
go func() {
for {
if err := session.LoginAndServe(false); err != nil {
logs.Error("session exit, %s", err)
for i := 0; i < 3; i++ {
logs.Info("trying re-login with cache")
if err := session.LoginAndServe(true); err != nil {
logs.Error("re-login error, %s", err)
}
time.Sleep(3 * time.Second)
}
if session, err = wxweb.CreateSession(nil, session.HandlerRegister, wxweb.TERMINAL_MODE); err != nil {
logs.Error("create new sesion failed, %s", err)
break
}
} else {
logs.Info("closed by user")
break
}
}
}()
wait()
}
func wait() {
for session.Cm == nil {
time.Sleep(3 * time.Second)
log.Println("waiting session...")
}
SessionReady = true
log.Println("wx session logged in.")
SendText(readyReceiver, "xiubi is ready : )\n")
}