| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596 |
- package ws
- import (
- "encoding/json"
- "git.wanbits.cc/sin/flytalk/models"
- "github.com/gin-gonic/gin"
- "github.com/gorilla/websocket"
- "log"
- )
- func NewVisitorServer(c *gin.Context) {
- go kefuServerBackend()
- conn, err := upgrader.Upgrade(c.Writer, c.Request, nil)
- if err != nil {
- log.Print("upgrade:", err)
- return
- }
- //获取GET参数,创建WS
- vistorInfo := models.FindVisitorByVistorId(c.Query("visitor_id"))
- if vistorInfo.VisitorId == "" {
- c.JSON(200, gin.H{
- "code": 400,
- "msg": "访客不存在",
- })
- return
- }
- user := &User{
- Conn: conn,
- Name: vistorInfo.Name,
- Avator: vistorInfo.Avator,
- Id: vistorInfo.VisitorId,
- To_id: vistorInfo.ToId,
- }
- AddVisitorToList(user)
- for {
- //接受消息
- var receive []byte
- messageType, receive, err := conn.ReadMessage()
- if err != nil {
- for uid, visitor := range ClientList {
- if visitor.Conn == conn {
- log.Println("删除用户", uid)
- delete(ClientList, uid)
- models.UpdateVisitorStatus(uid, 0)
- userInfo := make(map[string]string)
- userInfo["uid"] = uid
- userInfo["name"] = visitor.Name
- msg := TypeMessage{
- Type: "userOffline",
- Data: userInfo,
- }
- str, _ := json.Marshal(msg)
- kefuConns := KefuList[visitor.To_id]
- if kefuConns != nil {
- for _, kefuConn := range kefuConns {
- kefuConn.Conn.WriteMessage(websocket.TextMessage, str)
- }
- }
- }
- }
- log.Println(err)
- return
- }
- message <- &Message{
- conn: conn,
- content: receive,
- context: c,
- messageType: messageType,
- }
- }
- }
- func AddVisitorToList(user *User) {
- //用户id对应的连接
- ClientList[user.Id] = user
- userInfo := make(map[string]string)
- userInfo["uid"] = user.Id
- userInfo["username"] = user.Name
- userInfo["avator"] = user.Avator
- msg := TypeMessage{
- Type: "userOnline",
- Data: userInfo,
- }
- str, _ := json.Marshal(msg)
- //新版
- mKefuConns := KefuList[user.To_id]
- if mKefuConns != nil {
- for _, kefu := range mKefuConns {
- kefu.Conn.WriteMessage(websocket.TextMessage, str)
- }
- }
- }
|