From 47c90e45669e127ab8d9e7be60fadaad4729dfab Mon Sep 17 00:00:00 2001 From: taoshihan1991 <630892807@qq.com> Date: Wed, 3 Jun 2020 12:44:30 +0800 Subject: [PATCH] =?UTF-8?q?=E8=81=8A=E5=A4=A9=E7=95=8C=E9=9D=A2=E5=92=8C?= =?UTF-8?q?=E8=8E=B7=E5=8F=96=E5=9C=A8=E7=BA=BF=E7=94=A8=E6=88=B7=E6=8E=A5?= =?UTF-8?q?=E5=8F=A3?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- controller/chat.go | 114 +++++++++++++++++++++++++++++++++++++ server.go | 99 +------------------------------- static/html/chat_main.html | 59 ++++++++++++++++--- 3 files changed, 167 insertions(+), 105 deletions(-) diff --git a/controller/chat.go b/controller/chat.go index 71d7b1b..36e2262 100644 --- a/controller/chat.go +++ b/controller/chat.go @@ -1,11 +1,125 @@ package controller import ( + "encoding/json" "github.com/taoshihan1991/imaptool/tmpl" + "github.com/taoshihan1991/imaptool/tools" + "golang.org/x/net/websocket" + "log" "net/http" + "time" ) //聊天主界面 func ActionChatMain(w http.ResponseWriter, r *http.Request){ render:=tmpl.NewRender(w) render.Display("chat_main",nil) } +//获取在线用户 +func ChatUsers(w http.ResponseWriter, r *http.Request){ + w.Header().Set("content-type", "text/json;charset=utf-8;") + result:=make([]map[string]string,0) + for uid,_:=range clientList{ + userInfo:=make(map[string]string) + userInfo["uid"]=uid + result=append(result,userInfo) + } + msg, _ := json.Marshal(tools.JsonListResult{ + JsonResult: tools.JsonResult{Code: 200, Msg: "获取成功"}, + Result: result, + }) + w.Write(msg) +} +//兼容之前的聊天服务 +func ChatServer(w *websocket.Conn){ + var error error + for { + //接受消息 + var receive string + if error = websocket.Message.Receive(w, &receive); error != nil { + log.Println("接受消息失败", error) + break + } + message := Message{} + err := json.Unmarshal([]byte(receive), &message) + if err != nil { + log.Println(err) + } + chat := ChatUserMessage{} + json.Unmarshal([]byte(receive), &chat) + log.Println("客户端:", message) + kfMessageData := KfMessageData{ + Kf_name: "客服小美", + Avatar: "https://ss2.bdstatic.com/70cFvnSh_Q1YnxGkpoWK1HF6hhy/it/u=4217138672,2588039002&fm=26&gp=0.jpg", + Kf_id: "KF2", + Time: time.Now().Format("2006-01-02 15:04:05"), + Content: chat.Data.Content, + } + switch message.Type.(string) { + //用户初始化 + case "userInit": + clientList[message.Uid.(string)] = w + sendMsg := ChatKfMessage{ + Message_type: "kf_online", + Data: kfMessageData, + } + jsonStrByte, _ := json.Marshal(sendMsg) + log.Println("服务端:", string(jsonStrByte)) + websocket.Message.Send(w, string(jsonStrByte)) + //正常发送消息 + case "chatMessage": + + sendMsg := ChatKfMessage{ + Message_type: "chatMessage", + Data: kfMessageData, + } + jsonStrByte, _ := json.Marshal(sendMsg) + log.Println("服务端:", string(jsonStrByte)) + websocket.Message.Send(w, string(jsonStrByte)) + //回应ping + case "ping": + + sendMsg := PingMessage{ + Type: "pong", + } + jsonStrByte, _ := json.Marshal(sendMsg) + log.Println("服务端:", string(jsonStrByte)) + websocket.Message.Send(w, string(jsonStrByte)) + } + } +} + +type Message struct { + Type interface{} + Uid interface{} + Name interface{} + Avatar interface{} + Group interface{} +} +type KfMessageData struct { + Kf_name interface{} `json:"kf_name"` + Avatar interface{} `json:"avatar"` + Kf_id interface{} `json:"kf_id"` + Time interface{} `json:"time"` + Content interface{} `json:"content"` +} +type UserMessageData struct { + From_avatar interface{} `json:"from_avatar"` + From_id interface{} `json:"from_id"` + From_name interface{} `json:"from_name"` + To_id interface{} `json:"to_id"` + To_name interface{} `json:"to_name"` + Content interface{} `json:"content"` +} +type ChatKfMessage struct { + Message_type interface{} `json:"message_type"` + Data KfMessageData `json:"data"` +} +type ChatUserMessage struct { + Message_type interface{} `json:"message_type"` + Data UserMessageData `json:"data"` +} +type PingMessage struct { + Type interface{} `json:"type"` +} + +var clientList =make(map[string]*websocket.Conn) \ No newline at end of file diff --git a/server.go b/server.go index 3b7acbc..4a6aa18 100644 --- a/server.go +++ b/server.go @@ -1,7 +1,6 @@ package main import ( - "encoding/json" "github.com/taoshihan1991/imaptool/controller" "golang.org/x/net/websocket" "log" @@ -43,7 +42,9 @@ func main() { //新邮件提醒服务 mux.HandleFunc("/push_mail", controller.PushMailServer) //聊天服务 - mux.Handle("/chat_server",websocket.Handler(ChatServer)) + mux.Handle("/chat_server",websocket.Handler(controller.ChatServer)) + //获取在线用户 + mux.HandleFunc("/chat_users", controller.ChatUsers) //监听端口 //http.ListenAndServe(":8080", nil) //var myHandler http.Handler @@ -56,97 +57,3 @@ func main() { } s.ListenAndServe() } -//兼容之前的聊天服务 -func ChatServer(w *websocket.Conn){ - var error error - for { - //接受消息 - var receive string - if error = websocket.Message.Receive(w, &receive); error != nil { - log.Println("接受消息失败", error) - break - } - message := Message{} - err := json.Unmarshal([]byte(receive), &message) - if err != nil { - log.Println(err) - } - chat := ChatUserMessage{} - json.Unmarshal([]byte(receive), &chat) - log.Println("客户端:", message) - kfMessageData := KfMessageData{ - Kf_name: "客服小美", - Avatar: "https://ss2.bdstatic.com/70cFvnSh_Q1YnxGkpoWK1HF6hhy/it/u=4217138672,2588039002&fm=26&gp=0.jpg", - Kf_id: "KF2", - Time: time.Now().Format("2006-01-02 15:04:05"), - Content: chat.Data.Content, - } - switch message.Type.(string) { - //用户初始化 - case "userInit": - clientList[message.Uid.(string)] = w - sendMsg := ChatKfMessage{ - Message_type: "kf_online", - Data: kfMessageData, - } - jsonStrByte, _ := json.Marshal(sendMsg) - log.Println("服务端:", string(jsonStrByte)) - websocket.Message.Send(w, string(jsonStrByte)) - //正常发送消息 - case "chatMessage": - - sendMsg := ChatKfMessage{ - Message_type: "chatMessage", - Data: kfMessageData, - } - jsonStrByte, _ := json.Marshal(sendMsg) - log.Println("服务端:", string(jsonStrByte)) - websocket.Message.Send(w, string(jsonStrByte)) - //回应ping - case "ping": - - sendMsg := PingMessage{ - Type: "pong", - } - jsonStrByte, _ := json.Marshal(sendMsg) - log.Println("服务端:", string(jsonStrByte)) - websocket.Message.Send(w, string(jsonStrByte)) - } - } -} - -type Message struct { - Type interface{} - Uid interface{} - Name interface{} - Avatar interface{} - Group interface{} -} -type KfMessageData struct { - Kf_name interface{} `json:"kf_name"` - Avatar interface{} `json:"avatar"` - Kf_id interface{} `json:"kf_id"` - Time interface{} `json:"time"` - Content interface{} `json:"content"` -} -type UserMessageData struct { - From_avatar interface{} `json:"from_avatar"` - From_id interface{} `json:"from_id"` - From_name interface{} `json:"from_name"` - To_id interface{} `json:"to_id"` - To_name interface{} `json:"to_name"` - Content interface{} `json:"content"` -} -type ChatKfMessage struct { - Message_type interface{} `json:"message_type"` - Data KfMessageData `json:"data"` -} -type ChatUserMessage struct { - Message_type interface{} `json:"message_type"` - Data UserMessageData `json:"data"` -} -type PingMessage struct { - Type interface{} `json:"type"` -} - -var clientList =make(map[string]*websocket.Conn) \ No newline at end of file diff --git a/static/html/chat_main.html b/static/html/chat_main.html index 75949fb..4f02bbf 100644 --- a/static/html/chat_main.html +++ b/static/html/chat_main.html @@ -12,8 +12,43 @@ @@ -21,7 +56,7 @@