Files
goinim/send/send.go

80 lines
1.7 KiB
Go
Raw Normal View History

2025-11-24 11:20:33 +08:00
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)
}
}
}