80 lines
1.7 KiB
Go
80 lines
1.7 KiB
Go
|
|
package send
|
||
|
|
|
||
|
|
import (
|
||
|
|
"encoding/json"
|
||
|
|
"fmt"
|
||
|
|
"log"
|
||
|
|
"net/http"
|
||
|
|
|
||
|
|
"github.com/gorilla/websocket"
|
||
|
|
)
|
||
|
|
|
||
|
|
var up = websocket.Upgrader{
|
||
|
|
CheckOrigin: func(r *http.Request) bool { return true },
|
||
|
|
}
|
||
|
|
var useronline = make(map[string]*websocket.Conn)
|
||
|
|
|
||
|
|
type Message struct {
|
||
|
|
Receiver string `json:"receiver"`
|
||
|
|
Poster string `json:"poster"`
|
||
|
|
Content string `json:"content"`
|
||
|
|
Time string `json:"time"`
|
||
|
|
}
|
||
|
|
|
||
|
|
func Fasong(w http.ResponseWriter, r *http.Request) {
|
||
|
|
|
||
|
|
connect, error := up.Upgrade(w, r, nil)
|
||
|
|
if error != nil {
|
||
|
|
log.Println(error)
|
||
|
|
return
|
||
|
|
}
|
||
|
|
defer func() {
|
||
|
|
connect.Close()
|
||
|
|
}()
|
||
|
|
|
||
|
|
Username := r.URL.Query().Get("username")
|
||
|
|
if Username == "" {
|
||
|
|
log.Println("没有该用户")
|
||
|
|
connect.Close()
|
||
|
|
return
|
||
|
|
}
|
||
|
|
|
||
|
|
fmt.Println("用户" + Username + "登录至服务器")
|
||
|
|
|
||
|
|
useronline[Username] = connect
|
||
|
|
|
||
|
|
for {
|
||
|
|
msgtype, msg, error := connect.ReadMessage()
|
||
|
|
if error != nil {
|
||
|
|
if websocket.IsUnexpectedCloseError(error, websocket.CloseGoingAway, websocket.CloseAbnormalClosure) {
|
||
|
|
fmt.Printf("错误:%s 用户:%s退出服务器\n", error, Username)
|
||
|
|
}
|
||
|
|
break
|
||
|
|
}
|
||
|
|
if msgtype == websocket.TextMessage {
|
||
|
|
var message Message
|
||
|
|
fmt.Println(message)
|
||
|
|
|
||
|
|
if error := json.Unmarshal(msg, &message); error != nil {
|
||
|
|
log.Println("解析失败:", error)
|
||
|
|
continue
|
||
|
|
}
|
||
|
|
fmt.Println(message)
|
||
|
|
|
||
|
|
if receiverconnect, ok := useronline[message.Receiver]; ok {
|
||
|
|
sendmessage, _ := json.Marshal(message)
|
||
|
|
if error := receiverconnect.WriteMessage(websocket.TextMessage, []byte(sendmessage)); error != nil {
|
||
|
|
log.Println("信息发送失败")
|
||
|
|
} else {
|
||
|
|
}
|
||
|
|
}
|
||
|
|
if msgtype == websocket.BinaryMessage {
|
||
|
|
fmt.Println(msg)
|
||
|
|
}
|
||
|
|
}
|
||
|
|
if msgtype == websocket.BinaryMessage {
|
||
|
|
fmt.Println(msg)
|
||
|
|
}
|
||
|
|
}
|
||
|
|
}
|