本文整理汇总了Golang中github.com/TF2Stadium/wsevent.Server类的典型用法代码示例。如果您正苦于以下问题:Golang Server类的具体用法?Golang Server怎么用?Golang Server使用的例子?那么恭喜您, 这里精选的类代码示例或许可以为您提供帮助。
在下文中一共展示了Server类的13个代码示例,这些例子默认根据受欢迎程度排序。您可以为喜欢或者感觉有用的代码点赞,您的评价将有助于我们的系统推荐出更棒的Golang代码示例。
示例1: LobbySpectatorJoin
func (Lobby) LobbySpectatorJoin(server *wsevent.Server, so *wsevent.Client, data []byte) []byte {
reqerr := chelpers.FilterRequest(so, authority.AuthAction(0), true)
if reqerr != nil {
bytes, _ := json.Marshal(reqerr)
return bytes
}
var args struct {
Id *uint `json:"id"`
}
if err := chelpers.GetParams(data, &args); err != nil {
return helpers.NewTPErrorFromError(err).Encode()
}
var lob *models.Lobby
lob, tperr := models.GetLobbyById(*args.Id)
if tperr != nil {
return tperr.Encode()
}
player, tperr := models.GetPlayerBySteamId(chelpers.GetSteamId(so.Id()))
if tperr != nil {
return tperr.Encode()
}
var specSameLobby bool
arr, tperr := player.GetSpectatingIds()
if len(arr) != 0 {
for _, id := range arr {
if id == *args.Id {
specSameLobby = true
continue
}
lobby, _ := models.GetLobbyById(id)
lobby.RemoveSpectator(player, true)
server.RemoveClient(so.Id(), fmt.Sprintf("%d_public", id))
}
}
// If the player is already in the lobby (either joined a slot or is spectating), don't add them.
// Just Broadcast the lobby to them, so the frontend displays it.
if id, _ := player.GetLobbyId(); id != *args.Id && !specSameLobby {
tperr = lob.AddSpectator(player)
if tperr != nil {
return tperr.Encode()
}
chelpers.AfterLobbySpec(server, so, lob)
}
models.BroadcastLobbyToUser(lob, player.SteamId)
return chelpers.EmptySuccessJS
}
开发者ID:demipixel,项目名称:Helen,代码行数:60,代码来源:lobby.go
示例2: AfterLobbyJoin
func AfterLobbyJoin(server *wsevent.Server, so *wsevent.Client, lobby *models.Lobby, player *models.Player) {
room := fmt.Sprintf("%s_private", GetLobbyRoom(lobby.ID))
server.AddClient(so, room)
bytes, _ := json.Marshal(models.DecorateLobbyData(lobby, false))
broadcaster.SendMessage(player.SteamId, "lobbyJoined", string(bytes))
}
开发者ID:demipixel,项目名称:Helen,代码行数:7,代码来源:playerHelpers.go
示例3: SetupHTTPRoutes
func SetupHTTPRoutes(server *wsevent.Server, noauth *wsevent.Server) {
http.HandleFunc("/", controllers.MainHandler)
http.HandleFunc("/openidcallback", controllers.LoginCallbackHandler)
http.HandleFunc("/startLogin", controllers.LoginHandler)
http.HandleFunc("/logout", controllers.LogoutHandler)
if config.Constants.MockupAuth {
http.HandleFunc("/startMockLogin/", controllers.MockLoginHandler)
}
http.HandleFunc("/websocket/", func(w http.ResponseWriter, r *http.Request) {
if config.Constants.SteamIDWhitelist != "" {
session, err := chelpers.GetSessionHTTP(r)
allowed := true
if err == nil {
steamid, ok := session.Values["steam_id"]
if !ok {
allowed = false
} else if !chelpers.IsSteamIDWhitelisted(steamid.(string)) {
allowed = false
}
} else {
allowed = false
}
if !allowed {
http.Error(w, "Sorry, but you're not in the closed alpha", 403)
return
}
}
session, err := chelpers.GetSessionHTTP(r)
var so *wsevent.Client
if err == nil {
_, ok := session.Values["steam_id"]
if ok {
so, err = server.NewClient(upgrader, w, r)
} else {
so, err = noauth.NewClient(upgrader, w, r)
}
} else {
var estr = "Couldn't create WebSocket connection."
//estr = err.Error()
http.Error(w, estr, 500)
return
}
if err != nil || so == nil {
controllers.LogoutSession(w, r)
return
}
//helpers.Logger.Debug("Connected to Socket")
err = socket.SocketInit(server, noauth, so)
if err != nil {
controllers.LogoutSession(w, r)
}
})
}
开发者ID:demipixel,项目名称:Helen,代码行数:60,代码来源:routes.go
示例4: GetSocketInfo
func (Global) GetSocketInfo(server *wsevent.Server, so *wsevent.Client, data []byte) []byte {
socketinfo := struct {
ID string `json:"id"`
Rooms []string `json:"rooms"`
}{so.Id(), server.RoomsJoined(so.Id())}
bytes, _ := json.Marshal(socketinfo)
return bytes
}
开发者ID:demipixel,项目名称:Helen,代码行数:9,代码来源:global.go
示例5: AfterLobbyLeave
func AfterLobbyLeave(server *wsevent.Server, so *wsevent.Client, lobby *models.Lobby, player *models.Player) {
//pub := fmt.Sprintf("%s_public", GetLobbyRoom(lobby.ID))
// bytes, _ := json.Marshal(models.DecorateLobbyData(lobby, true))
// broadcaster.SendMessageToRoom(pub, "lobbyData", string(bytes))
bytes, _ := json.Marshal(models.DecorateLobbyLeave(lobby))
broadcaster.SendMessage(player.SteamId, "lobbyLeft", string(bytes))
server.RemoveClient(so.Id(), fmt.Sprintf("%s_private", GetLobbyRoom(lobby.ID)))
}
开发者ID:demipixel,项目名称:Helen,代码行数:11,代码来源:playerHelpers.go
示例6: AfterLobbySpec
func AfterLobbySpec(server *wsevent.Server, so *wsevent.Client, lobby *models.Lobby) {
//remove socket from room of the previous lobby the socket was spectating (if any)
lobbyID, ok := sessions.GetSpectating(so.ID)
if ok {
server.RemoveClient(so, fmt.Sprintf("%d_public", lobbyID))
sessions.RemoveSpectator(so.ID)
}
server.AddClient(so, fmt.Sprintf("%s_public", GetLobbyRoom(lobby.ID)))
chelpers.BroadcastScrollback(so, lobby.ID)
sessions.SetSpectator(so.ID, lobby.ID)
}
开发者ID:gpittarelli,项目名称:Helen,代码行数:12,代码来源:lobby.go
示例7: AfterConnect
func AfterConnect(server *wsevent.Server, so *wsevent.Client) {
server.AddClient(so, fmt.Sprintf("%s_public", config.GlobalChatRoom)) //room for global chat
var lobbies []models.Lobby
err := db.DB.Where("state = ?", models.LobbyStateWaiting).Order("id desc").Find(&lobbies).Error
if err != nil {
logrus.Error(err)
return
}
so.EmitJSON(helpers.NewRequest("lobbyListData", models.DecorateLobbyListData(lobbies)))
chelpers.BroadcastScrollback(so, 0)
so.EmitJSON(helpers.NewRequest("subListData", models.DecorateSubstituteList()))
}
开发者ID:gpittarelli,项目名称:Helen,代码行数:14,代码来源:player.go
示例8: AfterLobbySpec
func AfterLobbySpec(server *wsevent.Server, so *wsevent.Client, player *player.Player, lob *lobby.Lobby) {
//remove socket from room of the previous lobby the socket was spectating (if any)
lobbyID, ok := sessions.GetSpectating(so.ID)
if ok {
server.Leave(so, fmt.Sprintf("%d_public", lobbyID))
sessions.RemoveSpectator(so.ID)
if player != nil {
prevLobby, _ := lobby.GetLobbyByID(lobbyID)
prevLobby.RemoveSpectator(player, true)
}
}
server.Join(so, fmt.Sprintf("%d_public", lob.ID))
chelpers.BroadcastScrollback(so, lob.ID)
sessions.SetSpectator(so.ID, lob.ID)
}
开发者ID:TF2Stadium,项目名称:Helen,代码行数:16,代码来源:lobby.go
示例9: AfterConnect
func AfterConnect(server *wsevent.Server, so *wsevent.Client) {
server.AddClient(so, fmt.Sprintf("%s_public", config.Constants.GlobalChatRoom)) //room for global chat
var lobbies []models.Lobby
err := db.DB.Where("state = ?", models.LobbyStateWaiting).Order("id desc").Find(&lobbies).Error
if err != nil {
helpers.Logger.Critical("%s", err.Error())
return
}
bytes, _ := json.Marshal(models.DecorateLobbyListData(lobbies))
if err != nil {
helpers.Logger.Critical("Failed to send lobby list: %s", err.Error())
return
}
so.EmitJSON(helpers.NewRequest("lobbyListData", string(bytes)))
BroadcastScrollback(so, 0)
bytes, _ = json.Marshal(helpers.NewRequestFromObj("subListData", models.GetSubList()))
so.EmitJSON(helpers.NewRequest("subListData", string(bytes)))
}
开发者ID:demipixel,项目名称:Helen,代码行数:21,代码来源:playerHelpers.go
示例10: LobbyJoin
func (Lobby) LobbyJoin(server *wsevent.Server, so *wsevent.Client, data []byte) []byte {
reqerr := chelpers.FilterRequest(so, authority.AuthAction(0), true)
if reqerr != nil {
return reqerr.Encode()
}
var args struct {
Id *uint `json:"id"`
Class *string `json:"class"`
Team *string `json:"team" valid:"red,blu"`
}
if err := chelpers.GetParams(data, &args); err != nil {
return helpers.NewTPErrorFromError(err).Encode()
}
//helpers.Logger.Debug("id %d class %s team %s", *args.Id, *args.Class, *args.Team)
player, tperr := models.GetPlayerBySteamId(chelpers.GetSteamId(so.Id()))
if tperr != nil {
return tperr.Encode()
}
lob, tperr := models.GetLobbyById(*args.Id)
if tperr != nil {
return tperr.Encode()
}
if lob.State == models.LobbyStateEnded {
return helpers.NewTPError("Cannot join a closed lobby.", -1).Encode()
}
//Check if player is in the same lobby
var sameLobby bool
if id, err := player.GetLobbyId(); err == nil && id == *args.Id {
sameLobby = true
}
slot, tperr := models.LobbyGetPlayerSlot(lob.Type, *args.Team, *args.Class)
if tperr != nil {
return tperr.Encode()
}
if prevId, err := player.GetLobbyId(); err != nil {
server.RemoveClient(so.Id(), fmt.Sprintf("%d_public", prevId))
server.RemoveClient(so.Id(), fmt.Sprintf("%d_private", prevId))
}
tperr = lob.AddPlayer(player, slot, *args.Team, *args.Class)
if tperr != nil {
return tperr.Encode()
}
if !sameLobby {
chelpers.AfterLobbyJoin(server, so, lob, player)
}
if lob.IsFull() {
lob.State = models.LobbyStateReadyingUp
lob.ReadyUpTimestamp = time.Now().Unix() + 30
lob.Save()
tick := time.After(time.Second * 30)
id := lob.ID
stop := make(chan struct{})
go func() {
select {
case <-tick:
lobby := &models.Lobby{}
db.DB.First(lobby, id)
if lobby.State != models.LobbyStateInProgress {
err := lobby.RemoveUnreadyPlayers()
if err != nil {
helpers.Logger.Error("RemoveUnreadyPlayers: ", err.Error())
err = nil
}
err = lobby.UnreadyAllPlayers()
if err != nil {
helpers.Logger.Error("UnreadyAllPlayers: ", err.Error())
}
lobby.State = models.LobbyStateWaiting
lobby.Save()
}
case <-stop:
return
}
}()
room := fmt.Sprintf("%s_private",
chelpers.GetLobbyRoom(lob.ID))
//.........这里部分代码省略.........
开发者ID:demipixel,项目名称:Helen,代码行数:101,代码来源:lobby.go
示例11: AfterLobbySpecLeave
func AfterLobbySpecLeave(server *wsevent.Server, so *wsevent.Client, lobby *models.Lobby) {
server.RemoveClient(so.Id(), fmt.Sprintf("%s_public", GetLobbyRoom(lobby.ID)))
}
开发者ID:demipixel,项目名称:Helen,代码行数:3,代码来源:playerHelpers.go
示例12: AfterLobbySpec
func AfterLobbySpec(server *wsevent.Server, so *wsevent.Client, lobby *models.Lobby) {
server.AddClient(so, fmt.Sprintf("%s_public", GetLobbyRoom(lobby.ID)))
BroadcastScrollback(so, lobby.ID)
}
开发者ID:demipixel,项目名称:Helen,代码行数:4,代码来源:playerHelpers.go
示例13: ServerInit
func ServerInit(server *wsevent.Server, noAuthServer *wsevent.Server) {
server.OnDisconnect = onDisconnect
server.Extractor = getEvent
noAuthServer.OnDisconnect = onDisconnect
noAuthServer.Extractor = getEvent
server.On("authenticationTest", func(server *wsevent.Server, so *wsevent.Client, data []byte) []byte {
reqerr := chelpers.FilterRequest(so, 0, true)
if reqerr != nil {
bytes, _ := json.Marshal(reqerr)
return bytes
}
bytes, _ := json.Marshal(struct {
Message string `json:"message"`
}{"authenticated"})
return bytes
})
//Global Handlers
server.Register(handler.Global{})
//Lobby Handlers
server.Register(handler.Lobby{})
//server.On("lobbyCreate", handler.LobbyCreate)
//Player Handlers
server.Register(handler.Player{})
//Chat Handlers
server.Register(handler.Chat{})
//Admin Handlers
server.Register(handler.Admin{})
//Debugging handlers
// if config.Constants.ServerMockUp {
// server.On("debugLobbyFill", handler.DebugLobbyFill)
// server.On("debugLobbyReady", handler.DebugLobbyReady)
// server.On("debugUpdateStatsFilter", handler.DebugUpdateStatsFilter)
// server.On("debugPlayerSub", handler.DebugPlayerSub)
// }
noAuthServer.On("lobbySpectatorJoin", func(s *wsevent.Server, so *wsevent.Client, data []byte) []byte {
var args struct {
Id *uint `json:"id"`
}
if err := chelpers.GetParams(data, &args); err != nil {
return helpers.NewTPErrorFromError(err).Encode()
}
var lob *models.Lobby
lob, tperr := models.GetLobbyById(*args.Id)
if tperr != nil {
return tperr.Encode()
}
chelpers.AfterLobbySpec(s, so, lob)
bytes, _ := json.Marshal(models.DecorateLobbyData(lob, true))
so.EmitJSON(helpers.NewRequest("lobbyData", string(bytes)))
return chelpers.EmptySuccessJS
})
noAuthServer.On("getSocketInfo", (handler.Global{}).GetSocketInfo)
noAuthServer.DefaultHandler = func(_ *wsevent.Server, so *wsevent.Client, data []byte) []byte {
return helpers.NewTPError("Player isn't logged in.", -4).Encode()
}
}
开发者ID:demipixel,项目名称:Helen,代码行数:68,代码来源:socket.go
注:本文中的github.com/TF2Stadium/wsevent.Server类示例由纯净天空整理自Github/MSDocs等源码及文档管理平台,相关代码片段筛选自各路编程大神贡献的开源项目,源码版权归原作者所有,传播和使用请参考对应项目的License;未经允许,请勿转载。 |
请发表评论