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
116 lines
2.0 KiB
/**
|
|
* 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
|
|
}
|