mirror of https://github.com/kone-net/go-chat.git
You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
68 lines
1.4 KiB
68 lines
1.4 KiB
package server |
|
|
|
import ( |
|
"chat-room/config" |
|
"chat-room/internal/kafka" |
|
"chat-room/pkg/common/constant" |
|
"chat-room/pkg/global/log" |
|
"chat-room/pkg/protocol" |
|
|
|
"github.com/gogo/protobuf/proto" |
|
"github.com/gorilla/websocket" |
|
) |
|
|
|
type Client struct { |
|
Conn *websocket.Conn |
|
Name string |
|
Send chan []byte |
|
} |
|
|
|
func (c *Client) Read() { |
|
defer func() { |
|
MyServer.Ungister <- c |
|
c.Conn.Close() |
|
}() |
|
|
|
for { |
|
c.Conn.PongHandler() |
|
_, message, err := c.Conn.ReadMessage() |
|
if err != nil { |
|
log.Error("client read message error", log.Any("client read message error", err.Error())) |
|
MyServer.Ungister <- c |
|
c.Conn.Close() |
|
break |
|
} |
|
|
|
msg := &protocol.Message{} |
|
proto.Unmarshal(message, msg) |
|
|
|
// pong |
|
if msg.Type == constant.HEAT_BEAT { |
|
pong := &protocol.Message{ |
|
Content: constant.PONG, |
|
Type: constant.HEAT_BEAT, |
|
} |
|
pongByte, err2 := proto.Marshal(pong) |
|
if nil != err2 { |
|
log.Error("client marshal message error", log.Any("client marshal message error", err2.Error())) |
|
} |
|
c.Conn.WriteMessage(websocket.BinaryMessage, pongByte) |
|
} else { |
|
if config.GetConfig().MsgChannelType.ChannelType == constant.KAFKA { |
|
kafka.Send(message) |
|
} else { |
|
MyServer.Broadcast <- message |
|
} |
|
} |
|
} |
|
} |
|
|
|
func (c *Client) Write() { |
|
defer func() { |
|
c.Conn.Close() |
|
}() |
|
|
|
for message := range c.Send { |
|
c.Conn.WriteMessage(websocket.BinaryMessage, message) |
|
} |
|
}
|
|
|