You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

116 lines
2.0 KiB

3 years ago
/**
* Created by GoLand.
* User: link1st
* Date: 2019-07-25
* Time: 16:04
*/
package websocket
import (
"fmt"
"net/http"
"time"
"gowebsocket/helper"
"gowebsocket/models"
"github.com/gorilla/websocket"
"github.com/spf13/viper"
)
const (
defaultAppId = 101 // 默认平台Id
)
var (
clientManager = NewClientManager() // 管理者
appIds = []uint32{defaultAppId, 102, 103, 104} // 全部的平台
serverIp string
serverPort string
)
func GetAppIds() []uint32 {
return appIds
}
func GetServer() (server *models.Server) {
server = models.NewServer(serverIp, serverPort)
return
}
func IsLocal(server *models.Server) (isLocal bool) {
if server.Ip == serverIp && server.Port == serverPort {
isLocal = true
}
return
}
func InAppIds(appId uint32) (inAppId bool) {
for _, value := range appIds {
if value == appId {
inAppId = true
return
}
}
return
}
func GetDefaultAppId() (appId uint32) {
appId = defaultAppId
return
}
// 启动程序
func StartWebSocket() {
serverIp = helper.GetServerIp()
webSocketPort := viper.GetString("app.webSocketPort")
rpcPort := viper.GetString("app.rpcPort")
serverPort = rpcPort
http.HandleFunc("/acc", wsPage)
// 添加处理程序
go clientManager.start()
fmt.Println("WebSocket 启动程序成功", serverIp, serverPort)
http.ListenAndServe(":"+webSocketPort, nil)
}
func wsPage(w http.ResponseWriter, req *http.Request) {
// 升级协议
conn, err := (&websocket.Upgrader{CheckOrigin: func(r *http.Request) bool {
fmt.Println("升级协议", "ua:", r.Header["User-Agent"], "referer:", r.Header["Referer"])
return true
}}).Upgrade(w, req, nil)
if err != nil {
http.NotFound(w, req)
return
}
fmt.Println("webSocket 建立连接:", conn.RemoteAddr().String())
currentTime := uint64(time.Now().Unix())
client := NewClient(conn.RemoteAddr().String(), conn, currentTime)
go client.read()
go client.write()
// 用户连接事件
clientManager.Register <- client
}