first commit
This commit is contained in:
79
send/send.go
Normal file
79
send/send.go
Normal file
@@ -0,0 +1,79 @@
|
||||
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)
|
||||
}
|
||||
}
|
||||
}
|
||||
Reference in New Issue
Block a user