data

package
v1.5.0 Latest Latest
Warning

This package is not in the latest version of its module.

Go to latest
Published: May 27, 2022 License: MIT Imports: 3 Imported by: 0

Documentation

Index

Constants

This section is empty.

Variables

This section is empty.

Functions

This section is empty.

Types

type CommonGameSetting added in v1.4.0

type CommonGameSetting struct {
	GameName string
	MaxUser  int32
	MinUser  int32
}

type CommonProvider

type CommonProvider struct {
	// contains filtered or unexported fields
}

CommonProvider has the basic functionality of a 'provider'

func NewCommonProvider

func NewCommonProvider(conn interface{}, id string, gameSetting CommonGameSetting) *CommonProvider

func (*CommonProvider) AddRoom

func (cp *CommonProvider) AddRoom(r Room) error

func (*CommonProvider) DelRoom

func (cp *CommonProvider) DelRoom(r Room) error

func (*CommonProvider) GetConn

func (cp *CommonProvider) GetConn() (interface{}, error)

func (*CommonProvider) GetGameSetting added in v1.4.0

func (cp *CommonProvider) GetGameSetting() *CommonGameSetting

func (*CommonProvider) GetID

func (cp *CommonProvider) GetID() string

func (*CommonProvider) GetRoom

func (cp *CommonProvider) GetRoom(roomId int32) Room

func (*CommonProvider) GetRooms

func (cp *CommonProvider) GetRooms() []Room

type Provider

type Provider interface {
	GetConn() (interface{}, error)
	GetID() string
	GetGameSetting() *CommonGameSetting
	GetRooms() []Room
	GetRoom(int32) Room

	AddRoom(Room) error
	DelRoom(Room) error
}

Provider supports at least one kind of game, and connects to core server as there is a live connection, provider is always in-memory right now we just use CommonProvider. however, should we bind special methods to different provider? e.g. UnoProvider, TexasProvider are both derived from CommonProvider and they have some custom functions.

type Room

type Room interface {
	// concurrency control
	Lock()
	Unlock()
	GetRoomID() int32
	GetGameName() string
	GetUsers() []User
	SetProvider(Provider)
	GetProvider() Provider
	GetState() RoomState
	GetUserState(User) (UserState, error)
	GetCustomGameSetting() *anypb.Any
	SetCustomGameSetting(*anypb.Any)

	UserJoin(User) error
	UserReady(User, bool) error
	UserExit(User) (bool, error)

	Restart() error
}

type RoomState

type RoomState int32
const (
	RoomState_PREPARING RoomState = 0
	RoomState_PLAYING   RoomState = 1
)

type Storage

type Storage interface {
	CreateRoom() (Room, error)
	GetRooms() []Room
	GetRoomsWithFilter(func(Room) bool) []Room
	FindRoom(roomID int32) (Room, error)
	DelRoom(roomID int32) error

	IsUserExist(userName string) bool
	CreateUser(userName string, passwd string) error
	GetUsers() []User
	FindUser(userName string, passwd string) (User, error)
	DelUser(userName string) error

	CreateToken(user User) (Token, error)
	FindToken(key string) (Token, error)
	DelToken(key string) error

	RegisterProvider(Provider) error
	GetProviders() []Provider
	FindProvider(providerID string) (Provider, error)
	FindProviderByGame(gameName string) []Provider
	UnRegisterProvider(Provider) error
}

Storage is an abstract layer between data user and data store all the type is interface

type Token

type Token interface {
	GetKey() string
	GetUser() User
	GetUserName() string
}

type User

type User interface {
	// concurrency control
	Lock()
	Unlock()
	// user info
	GetUserName() string
	GetDisplayName() string
	SetDisplayName(string) error
	SetPasswd(oldPasswd string, newPasswd string) error

	// game
	GetConn() (interface{}, error)
	SetConn(interface{})
	GetRoom() (Room, error)
	SetRoom(Room) error
	GetTemporaryID() uint32 // avoid exposing the username to provider
	SetTemporaryID(uint32)
}

type UserState added in v1.1.0

type UserState int32
const (
	UserState_ERROR     UserState = 0
	UserState_PREPARING UserState = 1
	UserState_READY     UserState = 2
	UserState_PLAYING   UserState = 3
	// will be deleted after game over
	UserState_EXITED UserState = 4
)

Directories

Path Synopsis

Jump to

Keyboard shortcuts

? : This menu
/ : Search site
f or F : Jump to
y or Y : Canonical URL