/
message_signin.go
57 lines (47 loc) · 1.18 KB
/
message_signin.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
package message
import (
"fmt"
"github.com/gobwas/ws"
"log"
"net"
"sync"
)
type DataSignIn struct {
UUID string `json:"uuid"`
Username string `json:"username"`
Password string `json:"password,omitempty"`
}
var usersConn = map[string]net.Conn{}
var usersConnSync = &sync.RWMutex{}
func (p Controller) SignIn(sessionUUID string, conn net.Conn, op ws.OpCode, write Write, message *Message) IError {
log.Println("SignIn", sessionUUID, fmt.Sprintf("%+v", message))
user, err := p.r.UserAuthorize(message.SignIn.Username, message.SignIn.Password)
if err != nil {
log.Println("SignIn", err)
return newError(errCodeSignIn, err)
}
err = write(conn, op, &Message{
Type: DataTypeAuthorized,
Authorized: &DataAuthorized{
UserUUID: user.UUID,
AccessKey: user.AccessKey,
},
})
if err != nil {
return newError(0, err)
}
err = p.r.UserSetOnline(user.UUID)
if err != nil {
log.Println(fmt.Errorf("%s:%w", errUserSetOnline, err), sessionUUID, message)
}
usersConnSync.Lock()
usersConn[message.UserUUID] = conn
for _, conn := range usersConn {
err := write(conn, op, p.SysSignIn(user))
if err != nil {
log.Println(err)
}
}
usersConnSync.Unlock()
return nil
}