SYMBOL INDEX (408 symbols across 41 files) FILE: cmd/scribblers/main.go function main (line 23) | func main() { FILE: internal/api/createparse.go function ParsePlayerName (line 17) | func ParsePlayerName(value string) (string, error) { function ParseLanguage (line 28) | func ParseLanguage(value string) (*game.LanguageData, string, error) { function ParseScoreCalculation (line 39) | func ParseScoreCalculation(value string) (game.ScoreCalculation, error) { function ParseDrawingTime (line 54) | func ParseDrawingTime(cfg *config.Config, value string) (int, error) { function ParseRounds (line 62) | func ParseRounds(cfg *config.Config, value string) (int, error) { function ParseMaxPlayers (line 70) | func ParseMaxPlayers(cfg *config.Config, value string) (int, error) { function ParseCustomWords (line 83) | func ParseCustomWords(lowercaser cases.Caser, value string) ([]string, e... function ParseClientsPerIPLimit (line 104) | func ParseClientsPerIPLimit(cfg *config.Config, value string) (int, erro... function ParseCustomWordsPerTurn (line 112) | func ParseCustomWordsPerTurn(cfg *config.Config, value string) (int, err... function ParseWordsPerTurn (line 116) | func ParseWordsPerTurn(cfg *config.Config, value string) (int, error) { function newIntOutOfBounds (line 120) | func newIntOutOfBounds(value, valueName string, lower, upper int) error { function parseIntValue (line 127) | func parseIntValue(toParse string, lower, upper int, valueName string) (... function ParseBoolean (line 145) | func ParseBoolean(valueName, value string) (bool, error) { FILE: internal/api/createparse_test.go function Test_parsePlayerName (line 13) | func Test_parsePlayerName(t *testing.T) { function Test_parseDrawingTime (line 44) | func Test_parseDrawingTime(t *testing.T) { function Test_parseRounds (line 77) | func Test_parseRounds(t *testing.T) { function Test_parseMaxPlayers (line 110) | func Test_parseMaxPlayers(t *testing.T) { function Test_parseCustomWords (line 143) | func Test_parseCustomWords(t *testing.T) { function Test_parseCustomWordsPerTurn (line 178) | func Test_parseCustomWordsPerTurn(t *testing.T) { function Test_parseWordsPerTurn (line 219) | func Test_parseWordsPerTurn(t *testing.T) { function Test_parseBoolean (line 258) | func Test_parseBoolean(t *testing.T) { FILE: internal/api/http.go method SetupRoutes (line 12) | func (handler *V1Handler) SetupRoutes(rootPath string, register func(str... function remoteAddressToSimpleIP (line 42) | func remoteAddressToSimpleIP(input string) string { function GetIPAddressFromRequest (line 54) | func GetIPAddressFromRequest(request *http.Request) string { FILE: internal/api/v1.go type V1Handler (line 24) | type V1Handler struct method getLobbies (line 63) | func (handler *V1Handler) getLobbies(writer http.ResponseWriter, _ *ht... method postLobby (line 95) | func (handler *V1Handler) postLobby(writer http.ResponseWriter, reques... method postPlayer (line 225) | func (handler *V1Handler) postPlayer(writer http.ResponseWriter, reque... method patchLobby (line 346) | func (handler *V1Handler) patchLobby(writer http.ResponseWriter, reque... method getStats (line 457) | func (handler *V1Handler) getStats(writer http.ResponseWriter, _ *http... function NewHandler (line 28) | func NewHandler(cfg *config.Config) *V1Handler { function marshalToHTTPWriter (line 34) | func marshalToHTTPWriter(data any, writer http.ResponseWriter) (bool, er... type LobbyEntries (line 46) | type LobbyEntries type LobbyEntry (line 49) | type LobbyEntry struct function GetDiscordInstanceId (line 272) | func GetDiscordInstanceId(request *http.Request) string { constant discordDomain (line 283) | discordDomain = "1320396325925163070.discordsays.com" function SetDiscordCookies (line 285) | func SetDiscordCookies(w http.ResponseWriter, request *http.Request) { function SetGameplayCookies (line 302) | func SetGameplayCookies( type GameConstants (line 473) | type GameConstants struct type LobbyData (line 504) | type LobbyData struct function CreateLobbyData (line 513) | func CreateLobbyData(cfg *config.Config, lobby *game.Lobby) *LobbyData { function GetUserSession (line 525) | func GetUserSession(request *http.Request) (uuid.UUID, error) { function GetPlayer (line 547) | func GetPlayer(lobby *game.Lobby, request *http.Request) *game.Player { function GetPlayername (line 563) | func GetPlayername(request *http.Request) string { function GetLobbyId (line 581) | func GetLobbyId(request *http.Request) string { FILE: internal/api/ws.go method websocketUpgrade (line 30) | func (handler *V1Handler) websocketUpgrade(writer http.ResponseWriter, r... constant pingInterval (line 83) | pingInterval = 10 * time.Second constant pingWait (line 84) | pingWait = 5 * time.Second type socketHandler (line 87) | type socketHandler struct method resetDeadline (line 89) | func (c *socketHandler) resetDeadline(socket *gws.Conn) { method OnOpen (line 95) | func (c *socketHandler) OnOpen(socket *gws.Conn) { method OnClose (line 103) | func (c *socketHandler) OnClose(socket *gws.Conn, _ error) { method OnPing (line 121) | func (c *socketHandler) OnPing(socket *gws.Conn, _ []byte) { method OnPong (line 126) | func (c *socketHandler) OnPong(socket *gws.Conn, _ []byte) { method OnMessage (line 130) | func (c *socketHandler) OnMessage(socket *gws.Conn, message *gws.Messa... function extract (line 99) | func extract(x any, _ bool) any { function handleIncommingEvent (line 147) | func handleIncommingEvent(lobby *game.Lobby, player *game.Player, data [... function WriteObject (line 173) | func WriteObject(player *game.Player, object any) error { function WritePreparedMessage (line 194) | func WritePreparedMessage(player *game.Player, message *gws.Broadcaster)... FILE: internal/config/config.go type LobbySettingDefaults (line 17) | type LobbySettingDefaults struct type CORS (line 30) | type CORS struct type LobbyCleanup (line 35) | type LobbyCleanup struct type Config (line 45) | type Config struct function Load (line 118) | func Load() (*Config, error) { FILE: internal/frontend/http.go function init (line 27) | func init() { type BasePageConfig (line 37) | type BasePageConfig struct method Hash (line 65) | func (baseConfig *BasePageConfig) Hash(key string, bytes []byte) error { method withCacheBust (line 81) | func (baseConfig *BasePageConfig) withCacheBust(file string) string { method WithCacheBust (line 90) | func (baseConfig *BasePageConfig) WithCacheBust(file string) template.... method cspMiddleware (line 94) | func (handler *SSRHandler) cspMiddleware(handleFunc http.HandlerFunc) ht... method SetupRoutes (line 102) | func (handler *SSRHandler) SetupRoutes(register func(string, string, htt... type errorPageData (line 161) | type errorPageData struct method userFacingError (line 171) | func (handler *SSRHandler) userFacingError(w http.ResponseWriter, errorM... function isHumanAgent (line 183) | func isHumanAgent(userAgent string) bool { FILE: internal/frontend/index.go type indexJsData (line 31) | type indexJsData struct type SSRHandler (line 40) | type SSRHandler struct method indexJs (line 112) | func (handler *SSRHandler) indexJs(writer http.ResponseWriter, request... method indexPageHandler (line 131) | func (handler *SSRHandler) indexPageHandler(writer http.ResponseWriter... method createDefaultIndexPageData (line 156) | func (handler *SSRHandler) createDefaultIndexPageData() *IndexPageData { method ssrCreateLobby (line 181) | func (handler *SSRHandler) ssrCreateLobby(writer http.ResponseWriter, ... function NewHandler (line 47) | func NewHandler(cfg *config.Config) (*SSRHandler, error) { type IndexPageData (line 167) | type IndexPageData struct FILE: internal/frontend/index.js function getCookie (line 235) | function getCookie(name) { FILE: internal/frontend/lobby.go type lobbyPageData (line 15) | type lobbyPageData struct type lobbyJsData (line 23) | type lobbyJsData struct method lobbyJs (line 31) | func (handler *SSRHandler) lobbyJs(writer http.ResponseWriter, request *... method ssrEnterLobby (line 50) | func (handler *SSRHandler) ssrEnterLobby(writer http.ResponseWriter, req... method ssrEnterLobbyNoChecks (line 71) | func (handler *SSRHandler) ssrEnterLobbyNoChecks( function determineTranslation (line 127) | func determineTranslation(r *http.Request) (*translations.Translation, s... FILE: internal/frontend/lobby.js function showReconnectDialogIfNotShown (line 13) | function showReconnectDialogIfNotShown() { function showTextDialog (line 84) | function showTextDialog(id, title, message) { function hideMenu (line 91) | function hideMenu() { function showDialog (line 95) | function showDialog(id, title, contentNode, buttonBar) { function showInfoDialog (line 124) | function showInfoDialog(title, message, buttonText) { function createDialogButton (line 144) | function createDialogButton(text) { function createDialogButtonBar (line 151) | function createDialogButtonBar(...buttons) { function closeDialog (line 158) | function closeDialog(id) { function showHelpDialog (line 169) | function showHelpDialog() { function showKickDialog (line 216) | function showKickDialog() { function hideKickDialog (line 241) | function hideKickDialog() { function showNameChangeDialog (line 248) | function showNameChangeDialog() { function hideNameChangeDialog (line 258) | function hideNameChangeDialog() { function changeName (line 265) | function changeName(name) { function setUsernameLocally (line 288) | function setUsernameLocally(name) { function toggleFullscreen (line 294) | function toggleFullscreen() { function showLobbySettingsDialog (line 305) | function showLobbySettingsDialog() { function hideLobbySettingsDialog (line 311) | function hideLobbySettingsDialog() { function saveLobbySettings (line 318) | function saveLobbySettings() { function toggleSound (line 362) | function toggleSound() { function updateSoundIcon (line 371) | function updateSoundIcon() { function togglePenPressure (line 379) | function togglePenPressure() { function updateTogglePenIcon (line 388) | function updateTogglePenIcon() { function scaleUpFactor (line 416) | function scaleUpFactor() { function convertToServerCoordinate (line 427) | function convertToServerCoordinate(value) { function setColor (line 475) | function setColor(index) { function setColorNoUpdate (line 504) | function setColorNoUpdate(index) { function setLineWidth (line 515) | function setLineWidth(value) { function setLineWidthNoUpdate (line 548) | function setLineWidthNoUpdate(value) { function chooseTool (line 552) | function chooseTool(value) { function chooseToolNoUpdate (line 578) | function chooseToolNoUpdate(value) { function rgbColorObjectToHexString (line 587) | function rgbColorObjectToHexString(color) { function numberTo16BitHexadecimal (line 596) | function numberTo16BitHexadecimal(number) { function updateDrawingStateUI (line 602) | function updateDrawingStateUI() { function updateCursor (line 613) | function updateCursor() { function getComplementaryCursorColor (line 651) | function getComplementaryCursorColor(innerColor) { function setCircleCursor (line 665) | function setCircleCursor(innerColor, size) { function generateSVGCircle (line 682) | function generateSVGCircle(circleSize, innerColor, outerColor) { function toggleSpectate (line 703) | function toggleSpectate() { function setSpectateMode (line 714) | function setSpectateMode(requestedValue, spectatingValue) { function toggleReadiness (line 763) | function toggleReadiness() { function forceStartGame (line 777) | function forceStartGame() { function clearCanvasAndSendEvent (line 787) | function clearCanvasAndSendEvent() { function undoAndSendEvent (line 802) | function undoAndSendEvent() { function sendMessage (line 819) | function sendMessage(event) { function setAllowDrawing (line 867) | function setAllowDrawing(value) { function chooseWord (line 878) | function chooseWord(index) { function onVotekickPlayer (line 889) | function onVotekickPlayer(playerId) { function showRoundEndMessage (line 1193) | function showRoundEndMessage(previousWord) { function getCachedPlayer (line 1209) | function getCachedPlayer(playerID) { function setRoundTimeLeft (line 1236) | function setRoundTimeLeft(timeLeftMs) { function updateButtonVisibilities (line 1354) | function updateButtonVisibilities() { function promptWords (line 1362) | function promptWords(data) { function playWav (line 1376) | function playWav(file) { function appendMessage (line 1397) | function appendMessage(styleClass, author, message, attrs) { function applyPlayers (line 1439) | function applyPlayers(players) { function createPlayerStateImageNode (line 1589) | function createPlayerStateImageNode(path) { function updateRoundsDisplay (line 1596) | function updateRoundsDisplay() { function onTouchStart (line 1705) | function onTouchStart(event) { function onTouchMove (line 1718) | function onTouchMove(event) { function onTouchEnd (line 1743) | function onTouchEnd(event) { function onMouseDown (line 1757) | function onMouseDown(event) { function pressureToLineWidth (line 1770) | function pressureToLineWidth(event) { function onMouseLeave (line 1790) | function onMouseLeave(event) { function onMouseMove (line 1812) | function onMouseMove(event) { function onMouseClick (line 1836) | function onMouseClick(event) { function onGlobalMouseMove (line 1865) | function onGlobalMouseMove(event) { function isAnyDialogVisible (line 1883) | function isAnyDialogVisible() { function onKeyDown (line 1893) | function onKeyDown(event) { function debounce (line 1940) | function debounce(func, timeout) { function clear (line 1950) | function clear(context) { function fillAndSendEvent (line 1965) | function fillAndSendEvent(context, x, y, colorIndex) { function drawLineAndSendEvent (line 1992) | function drawLineAndSendEvent( function getCookie (line 2032) | function getCookie(name) { function isString (line 2041) | function isString(obj) { function isObject (line 2045) | function isObject(obj) { FILE: internal/frontend/lobby_test.go function TestCreateLobby (line 11) | func TestCreateLobby(t *testing.T) { FILE: internal/frontend/resources/draw.js function floodfillData (line 7) | function floodfillData(data, x, y, fillcolor, width, height) { function pixelCompare (line 58) | function pixelCompare(i, targetcolor, data) { function pixelCompareAndSet (line 66) | function pixelCompareAndSet(i, targetcolor, fillcolor, data) { function floodfillUint8ClampedArray (line 76) | function floodfillUint8ClampedArray(data, x, y, color, width, height) { function drawLine (line 92) | function drawLine(context, imageData, x1, y1, x2, y2, color, width) { function drawLineNoPut (line 102) | function drawLineNoPut(context, imageData, x1, y1, x2, y2, color, width) { function _drawLineNoPut (line 106) | function _drawLineNoPut(imageData, coords, color, width) { function prepareDrawLineCoords (line 130) | function prepareDrawLineCoords(context, x1, y1, x2, y2, width) { function drawBresenhamLine (line 155) | function drawBresenhamLine(imageData, x1, y1, x2, y2, color) { function generateCircleMap (line 186) | function generateCircleMap(radius) { function setPixel (line 213) | function setPixel(imageData, x, y, color) { function hexStringToRgbColorObject (line 221) | function hexStringToRgbColorObject(hexString) { function indexToHexColor (line 259) | function indexToHexColor(index) { function indexToRgbColor (line 263) | function indexToRgbColor(index) { FILE: internal/frontend/templating_test.go function Test_templateLobbyPage (line 13) | func Test_templateLobbyPage(t *testing.T) { function Test_templateErrorPage (line 33) | func Test_templateErrorPage(t *testing.T) { function Test_templateIndexPage (line 49) | func Test_templateIndexPage(t *testing.T) { FILE: internal/game/data.go constant slotReservationTime (line 16) | slotReservationTime = time.Minute * 1 type roundEndReason (line 18) | type roundEndReason constant drawerDisconnected (line 21) | drawerDisconnected roundEndReason = "drawer_disconnected" constant guessersDisconnected (line 22) | guessersDisconnected roundEndReason = "guessers_disconnected" type Lobby (line 27) | type Lobby struct method GetPlayerByID (line 153) | func (lobby *Lobby) GetPlayerByID(id uuid.UUID) *Player { method GetPlayerBySession (line 163) | func (lobby *Lobby) GetPlayerBySession(userSession uuid.UUID) *Player { method GetOwner (line 173) | func (lobby *Lobby) GetOwner() *Player { method ClearDrawing (line 177) | func (lobby *Lobby) ClearDrawing() { method AppendLine (line 185) | func (lobby *Lobby) AppendLine(line *LineEvent) { method AppendFill (line 192) | func (lobby *Lobby) AppendFill(fill *FillEvent) { method GetConnectedPlayerCount (line 217) | func (lobby *Lobby) GetConnectedPlayerCount() int { method HasConnectedPlayers (line 228) | func (lobby *Lobby) HasConnectedPlayers() bool { method CanIPConnect (line 244) | func (lobby *Lobby) CanIPConnect(address string) bool { method IsPublic (line 258) | func (lobby *Lobby) IsPublic() bool { method GetPlayers (line 262) | func (lobby *Lobby) GetPlayers() []*Player { method GetOccupiedPlayerSlots (line 271) | func (lobby *Lobby) GetOccupiedPlayerSlots() int { method HasFreePlayerSlot (line 296) | func (lobby *Lobby) HasFreePlayerSlot() bool { method Synchronized (line 307) | func (lobby *Lobby) Synchronized(logic func()) { constant MaxPlayerNameLength (line 113) | MaxPlayerNameLength int = 30 method GetLastKnownAddress (line 116) | func (player *Player) GetLastKnownAddress() string { method SetLastKnownAddress (line 122) | func (player *Player) SetLastKnownAddress(address string) { method GetWebsocket (line 129) | func (player *Player) GetWebsocket() *gws.Conn { method SetWebsocket (line 134) | func (player *Player) SetWebsocket(socket *gws.Conn) { method GetUserSession (line 139) | func (player *Player) GetUserSession() uuid.UUID { type PlayerState (line 143) | type PlayerState constant Guessing (line 146) | Guessing PlayerState = "guessing" constant Drawing (line 147) | Drawing PlayerState = "drawing" constant Standby (line 148) | Standby PlayerState = "standby" constant Ready (line 149) | Ready PlayerState = "ready" constant Spectating (line 150) | Spectating PlayerState = "spectating" function SanitizeName (line 198) | func SanitizeName(name string) string { FILE: internal/game/data_test.go function TestOccupiedPlayerCount (line 8) | func TestOccupiedPlayerCount(t *testing.T) { FILE: internal/game/lobby.go constant DrawingBoardBaseWidth (line 45) | DrawingBoardBaseWidth = 1600 constant DrawingBoardBaseHeight (line 46) | DrawingBoardBaseHeight = 900 constant MinBrushSize (line 47) | MinBrushSize = 8 constant MaxBrushSize (line 48) | MaxBrushSize = 32 type SettingBounds (line 53) | type SettingBounds struct method HandleEvent (line 69) | func (lobby *Lobby) HandleEvent(eventType string, payload []byte, player... method handleToggleReadinessEvent (line 209) | func (lobby *Lobby) handleToggleReadinessEvent(player *Player) { method readyToStart (line 225) | func (lobby *Lobby) readyToStart() bool { function isRatelimited (line 244) | func isRatelimited(sender *Player) bool { function handleMessage (line 259) | func handleMessage(message string, sender *Player, lobby *Lobby) { method wasLastDrawEventFill (line 339) | func (lobby *Lobby) wasLastDrawEventFill() bool { method isAnyoneStillGuessing (line 347) | func (lobby *Lobby) isAnyoneStillGuessing() bool { function ExcludePlayer (line 357) | func ExcludePlayer(toExclude *Player) func(*Player) bool { function IsAllowedToSeeRevealedHints (line 363) | func IsAllowedToSeeRevealedHints(player *Player) bool { function IsAllowedToSeeHints (line 367) | func IsAllowedToSeeHints(player *Player) bool { function newMessageEvent (line 371) | func newMessageEvent(messageType, message string, sender *Player) *Event { method broadcastMessage (line 379) | func (lobby *Lobby) broadcastMessage(message string, sender *Player) { method Broadcast (line 383) | func (lobby *Lobby) Broadcast(data any) { method broadcastConditional (line 396) | func (lobby *Lobby) broadcastConditional(data any, condition func(*Playe... method startGame (line 417) | func (lobby *Lobby) startGame() { function handleKickVoteEvent (line 434) | func handleKickVoteEvent(lobby *Lobby, player *Player, toKickID uuid.UUI... function kickPlayer (line 491) | func kickPlayer(lobby *Lobby, playerToKick *Player, playerToKickIndex in... method Drawer (line 548) | func (lobby *Lobby) Drawer() *Player { function calculateVotesNeededToKick (line 557) | func calculateVotesNeededToKick(lobby *Lobby) int { function handleNameChangeEvent (line 576) | func handleNameChangeEvent(caller *Player, lobby *Lobby, name string) { method calculateGuesserScore (line 594) | func (lobby *Lobby) calculateGuesserScore() int { method calculateDrawerScore (line 598) | func (lobby *Lobby) calculateDrawerScore() int { function advanceLobbyPredefineDrawer (line 604) | func advanceLobbyPredefineDrawer(lobby *Lobby, roundOver bool, newDrawer... function advanceLobby (line 719) | func advanceLobby(lobby *Lobby) { method desiresToDraw (line 724) | func (player *Player) desiresToDraw() bool { function determineNextDrawer (line 736) | func determineNextDrawer(lobby *Lobby) (*Player, bool) { function startTurnTimeTicker (line 770) | func startTurnTimeTicker(lobby *Lobby, ticker *time.Ticker) { constant disconnectGrace (line 780) | disconnectGrace = 8 * time.Second method tickLogic (line 786) | func (lobby *Lobby) tickLogic(expectedTicker *time.Ticker) bool { method shouldEndEarlyDueToDisconnectedDrawer (line 864) | func (lobby *Lobby) shouldEndEarlyDueToDisconnectedDrawer() bool { method shouldEndEarlyDueToDisconnectedGuessers (line 880) | func (lobby *Lobby) shouldEndEarlyDueToDisconnectedGuessers() bool { function getTimeAsMillis (line 915) | func getTimeAsMillis() int64 { function recalculateRanks (line 921) | func recalculateRanks(lobby *Lobby) { method selectWord (line 949) | func (lobby *Lobby) selectWord(index int) error { function CreateLobby (line 1035) | func CreateLobby( function generatePlayerName (line 1087) | func generatePlayerName() string { function generateReadyData (line 1091) | func generateReadyData(lobby *Lobby, player *Player) *ReadyEvent { method SendYourTurnEvent (line 1117) | func (lobby *Lobby) SendYourTurnEvent(player *Player) { method OnPlayerConnectUnsynchronized (line 1128) | func (lobby *Lobby) OnPlayerConnectUnsynchronized(player *Player) { method OnPlayerDisconnect (line 1150) | func (lobby *Lobby) OnPlayerDisconnect(player *Player) { method GetAvailableWordHints (line 1193) | func (lobby *Lobby) GetAvailableWordHints(player *Player) []*WordHint { method JoinPlayer (line 1206) | func (lobby *Lobby) JoinPlayer(name string) *Player { method canDraw (line 1227) | func (lobby *Lobby) canDraw(player *Player) bool { method Shutdown (line 1234) | func (lobby *Lobby) Shutdown() { type ScoreCalculation (line 1243) | type ScoreCalculation interface type adjustableScoringAlgorithm (line 1265) | type adjustableScoringAlgorithm struct method Identifier (line 1273) | func (s *adjustableScoringAlgorithm) Identifier() string { method CalculateGuesserScore (line 1277) | func (s *adjustableScoringAlgorithm) CalculateGuesserScore(lobby *Lobb... method MaxScore (line 1281) | func (s *adjustableScoringAlgorithm) MaxScore() int { method CalculateGuesserScoreInternal (line 1285) | func (s *adjustableScoringAlgorithm) CalculateGuesserScoreInternal( method CalculateDrawerScore (line 1303) | func (s *adjustableScoringAlgorithm) CalculateDrawerScore(lobby *Lobby... FILE: internal/game/lobby_test.go function createLobbyWithDemoPlayers (line 16) | func createLobbyWithDemoPlayers(playercount int) *Lobby { function noOpWriteObject (line 30) | func noOpWriteObject(_ *Player, _ any) error { function noOpWritePreparedMessage (line 34) | func noOpWritePreparedMessage(_ *Player, _ *gws.Broadcaster) error { function Test_Locking (line 38) | func Test_Locking(t *testing.T) { function Test_CalculateVotesNeededToKick (line 48) | func Test_CalculateVotesNeededToKick(t *testing.T) { function Test_RemoveAccents (line 74) | func Test_RemoveAccents(t *testing.T) { function Test_simplifyText (line 106) | func Test_simplifyText(t *testing.T) { function Test_recalculateRanks (line 144) | func Test_recalculateRanks(t *testing.T) { function Test_chillScoring_calculateGuesserScore (line 187) | func Test_chillScoring_calculateGuesserScore(t *testing.T) { function Test_handleNameChangeEvent (line 212) | func Test_handleNameChangeEvent(t *testing.T) { function getUnexportedField (line 228) | func getUnexportedField(field reflect.Value) any { function Test_wordSelectionEvent (line 232) | func Test_wordSelectionEvent(t *testing.T) { function Test_kickDrawer (line 330) | func Test_kickDrawer(t *testing.T) { function Test_lobby_calculateDrawerScore (line 391) | func Test_lobby_calculateDrawerScore(t *testing.T) { function Test_NoPrematureGameOver (line 532) | func Test_NoPrematureGameOver(t *testing.T) { FILE: internal/game/shared.go constant EventTypeStart (line 16) | EventTypeStart = "start" constant EventTypeToggleReadiness (line 17) | EventTypeToggleReadiness = "toggle-readiness" constant EventTypeToggleSpectate (line 18) | EventTypeToggleSpectate = "toggle-spectate" constant EventTypeRequestDrawing (line 19) | EventTypeRequestDrawing = "request-drawing" constant EventTypeChooseWord (line 20) | EventTypeChooseWord = "choose-word" constant EventTypeUndo (line 21) | EventTypeUndo = "undo" constant EventTypeUpdatePlayers (line 26) | EventTypeUpdatePlayers = "update-players" constant EventTypeUpdateWordHint (line 27) | EventTypeUpdateWordHint = "update-wordhint" constant EventTypeWordChosen (line 28) | EventTypeWordChosen = "word-chosen" constant EventTypeCorrectGuess (line 29) | EventTypeCorrectGuess = "correct-guess" constant EventTypeCloseGuess (line 30) | EventTypeCloseGuess = "close-guess" constant EventTypeSystemMessage (line 31) | EventTypeSystemMessage = "system-message" constant EventTypeNonGuessingPlayerMessage (line 32) | EventTypeNonGuessingPlayerMessage = "non-guessing-player-message" constant EventTypeReady (line 33) | EventTypeReady = "ready" constant EventTypeGameOver (line 34) | EventTypeGameOver = "game-over" constant EventTypeYourTurn (line 35) | EventTypeYourTurn = "your-turn" constant EventTypeNextTurn (line 36) | EventTypeNextTurn = "next-turn" constant EventTypeDrawing (line 37) | EventTypeDrawing = "drawing" constant EventTypeDrawerKicked (line 38) | EventTypeDrawerKicked = "drawer-kicked" constant EventTypeOwnerChange (line 39) | EventTypeOwnerChange = "owner-change" constant EventTypeLobbySettingsChanged (line 40) | EventTypeLobbySettingsChanged = "lobby-settings-changed" constant EventTypeShutdown (line 41) | EventTypeShutdown = "shutdown" constant EventTypeKeepAlive (line 42) | EventTypeKeepAlive = "keep-alive" type State (line 55) | type State constant Unstarted (line 59) | Unstarted State = "unstarted" constant Ongoing (line 61) | Ongoing State = "ongoing" constant GameOver (line 64) | GameOver State = "gameOver" type Event (line 68) | type Event struct type StringDataEvent (line 73) | type StringDataEvent struct type EventTypeOnly (line 77) | type EventTypeOnly struct type IntDataEvent (line 81) | type IntDataEvent struct type WordHint (line 88) | type WordHint struct type LineEvent (line 97) | type LineEvent struct type FillEvent (line 116) | type FillEvent struct type KickVote (line 131) | type KickVote struct type OwnerChangeEvent (line 138) | type OwnerChangeEvent struct type NameChangeEvent (line 143) | type NameChangeEvent struct type GameOverEvent (line 153) | type GameOverEvent struct type WordChosen (line 159) | type WordChosen struct type YourTurn (line 164) | type YourTurn struct type NextTurn (line 173) | type NextTurn struct type OutgoingMessage (line 185) | type OutgoingMessage struct type ReadyEvent (line 197) | type ReadyEvent struct type Ring (line 212) | type Ring struct function NewRing (line 218) | func NewRing[T any](cap int) *Ring[T] { method Push (line 222) | func (r *Ring[T]) Push(v T) { method Oldest (line 230) | func (r *Ring[T]) Oldest() T { method Latest (line 238) | func (r *Ring[T]) Latest() T { type Player (line 248) | type Player struct type EditableLobbySettings (line 289) | type EditableLobbySettings struct FILE: internal/game/words.go type LanguageData (line 16) | type LanguageData struct function getLanguageIdentifier (line 86) | func getLanguageIdentifier(language string) string { function readWordListInternal (line 93) | func readWordListInternal( function readDefaultWordList (line 119) | func readDefaultWordList(lowercaser cases.Caser, chosenLanguage string) ... function reloadLobbyWords (line 132) | func reloadLobbyWords(lobby *Lobby) ([]string, error) { function GetRandomWords (line 139) | func GetRandomWords(wordCount int, lobby *Lobby) []string { function getRandomWords (line 146) | func getRandomWords(wordCount int, lobby *Lobby, reloadWords func(lobby ... function popCustomWord (line 174) | func popCustomWord(lobby *Lobby) string { function popWordpackWord (line 184) | func popWordpackWord(lobby *Lobby, reloadWords func(lobby *Lobby) ([]str... function shuffleWordList (line 201) | func shuffleWordList(wordlist []string) { constant EqualGuess (line 208) | EqualGuess = 0 constant CloseGuess (line 209) | CloseGuess = 1 constant DistantGuess (line 210) | DistantGuess = 2 function CheckGuess (line 221) | func CheckGuess(a, b string) int { FILE: internal/game/words_test.go function Test_wordListsContainNoCarriageReturns (line 15) | func Test_wordListsContainNoCarriageReturns(t *testing.T) { function Test_readWordList (line 29) | func Test_readWordList(t *testing.T) { function testWordList (line 50) | func testWordList(t *testing.T, chosenLanguage string) { function Test_getRandomWords (line 80) | func Test_getRandomWords(t *testing.T) { function Test_getRandomWordsReloading (line 164) | func Test_getRandomWordsReloading(t *testing.T) { function Benchmark_proximity_custom (line 248) | func Benchmark_proximity_custom(b *testing.B) { function Test_CheckGuess_Negative (line 273) | func Test_CheckGuess_Negative(t *testing.T) { function Test_CheckGuess_Positive (line 353) | func Test_CheckGuess_Positive(t *testing.T) { FILE: internal/metrics/metrics.go function init (line 15) | func init() { function TrackPlayerConnect (line 26) | func TrackPlayerConnect() { function TrackPlayerDisconnect (line 30) | func TrackPlayerDisconnect() { function SetupRoute (line 34) | func SetupRoute(registerFunc func(http.HandlerFunc)) { FILE: internal/sanitize/sanitize.go function CleanText (line 88) | func CleanText(str string) string { FILE: internal/state/lobbies.go function LaunchCleanupRoutine (line 27) | func LaunchCleanupRoutine(cfg config.LobbyCleanup) { function cleanupRoutineLogic (line 40) | func cleanupRoutineLogic(cfg *config.LobbyCleanup) { function AddLobby (line 63) | func AddLobby(lobby *game.Lobby) { function GetLobby (line 72) | func GetLobby(id string) *game.Lobby { function ShutdownLobbiesGracefully (line 88) | func ShutdownLobbiesGracefully() { function GetActiveLobbyCount (line 107) | func GetActiveLobbyCount() int { function GetPublicLobbies (line 117) | func GetPublicLobbies() []*game.Lobby { function RemoveLobby (line 132) | func RemoveLobby(id string) { function removeLobby (line 139) | func removeLobby(id string) { function removeLobbyByIndex (line 148) | func removeLobbyByIndex(index int) { type PageStats (line 161) | type PageStats struct function Stats (line 170) | func Stats() *PageStats { FILE: internal/state/lobbies_test.go function TestAddAndRemove (line 12) | func TestAddAndRemove(t *testing.T) { FILE: internal/translations/ar.go function initArabicTranslation (line 3) | func initArabicTranslation() *Translation { FILE: internal/translations/de_DE.go function initGermanTranslation (line 3) | func initGermanTranslation() { FILE: internal/translations/en_us.go function initEnglishTranslation (line 3) | func initEnglishTranslation() *Translation { FILE: internal/translations/es_ES.go function initSpainTranslation (line 3) | func initSpainTranslation() { FILE: internal/translations/fa.go function initPersianTranslation (line 3) | func initPersianTranslation() *Translation { FILE: internal/translations/fr_FR.go function initFrenchTranslation (line 3) | func initFrenchTranslation() *Translation { FILE: internal/translations/he.go function initHebrewTranslation (line 3) | func initHebrewTranslation() { FILE: internal/translations/pl.go function initPolishTranslation (line 3) | func initPolishTranslation() { FILE: internal/translations/translations.go function init (line 12) | func init() { type Translation (line 33) | type Translation struct method Get (line 40) | func (translation Translation) Get(key string) string { method put (line 56) | func (translation Translation) put(key, value string) { function GetLanguage (line 75) | func GetLanguage(locale string) *Translation { function RegisterTranslation (line 82) | func RegisterTranslation(locale string, translation *Translation) { function createTranslation (line 105) | func createTranslation() *Translation { FILE: internal/translations/translations_test.go function Test_noObsoleteKeys (line 10) | func Test_noObsoleteKeys(t *testing.T) { FILE: internal/version/version.go function init (line 15) | func init() { FILE: tools/sanitizer/main.go function main (line 15) | func main() { FILE: tools/simulate/main.go type body (line 19) | type body struct function request (line 24) | func request(method, url string, body *body, queryParameters map[string]... function PostLobby (line 50) | func PostLobby() (*api.LobbyData, error) { type SimPlayer (line 80) | type SimPlayer struct method WriteJSON (line 87) | func (s *SimPlayer) WriteJSON(value any) error { method SendRandomStroke (line 96) | func (s *SimPlayer) SendRandomStroke() { method SendRandomMessage (line 113) | func (s *SimPlayer) SendRandomMessage() { function JoinPlayer (line 122) | func JoinPlayer(lobbyId string) (*SimPlayer, error) { function main (line 176) | func main() { FILE: tools/skribbliohintsconverter/main.go function main (line 10) | func main() { FILE: tools/statcollector/main.go type Stat (line 13) | type Stat struct function main (line 18) | func main() {