-
Notifications
You must be signed in to change notification settings - Fork 0
/
Copy pathuserchat.go
50 lines (45 loc) · 1.23 KB
/
userchat.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
package internal
import (
"encoding/json"
"fmt"
"log"
"github.com/gorilla/websocket"
"github.com/sehogas/gosocket/models"
"github.com/sehogas/gosocket/utils"
)
type UserChat struct {
chanel *Channel
models.User
Connection *websocket.Conn
}
func NewUserChat(channel *Channel, UserName string, Connection *websocket.Conn) *UserChat {
return &UserChat{channel, models.User{UserName: UserName}, Connection}
}
func (u *UserChat) OnLine() {
for {
if _, message, err := u.Connection.ReadMessage(); err != nil {
log.Println("Error on read message::", err.Error())
break
} else {
sms := &models.Message{}
fmt.Println("Data: ", string(message))
if err := json.Unmarshal(message, sms); err != nil {
log.Printf("No se pudo leer el mensaje: user %s\n, err: %s", u.UserName, err.Error())
} else {
log.Println(sms)
u.chanel.messageChannel <- sms
}
}
}
u.chanel.leaveChannel <- u
}
func (u *UserChat) SendMessage(message *models.Message) error {
message.Id = utils.GetRandonInt()
if data, err := json.Marshal(message); err != nil {
return err
} else {
err = u.Connection.WriteMessage(websocket.TextMessage, data)
log.Printf("Message send: from %s to %s", message.Sender, message.Target)
return err
}
}