error-handling

% Error-Handling Principles

Reviewed 2021-03-03 by japhb

NOTE: ASPIRATIONAL; ONLY WIP IN THIS RELEASE

  • All Server components (including game engines) throw exceptions for abnormal conditions/behaviors:

    • Syntactically, structurally, or semantically invalid client requests

    • Server or game logic internal errors

    • Server or game in invalid state

    • Backend failure

  • Exceptions are logged and one of:

    • Shutdown server (corrupted global state or otherwise unsafe to continue)

    • Stop game (corrupted game state)

    • Immediately close client session(s) (possible abuse/security issue)

    • Retried with backoff until success or timeout (transient failures)

    • Coerced to error codes to transmit to client (less critical exceptions)

  • Server and game engines return standard error codes for normal events that happen to be unavailable or incorrect; examples:

    • Can't do that right now

    • Out of required in-game resource

    • NPC does not agree (e.g. trying to sell an item)

    • Target of action or message has left the game

  • Client and utility components throw exceptions for abnormal conditions:

    • Server message unparseable

    • Config file corrupt

    • Server connection broken without normal session shutdown

  • Server error codes and client exceptions are converted to user-visible errors only in UI layer (app-wide or in-game)

  • Error messages are localized to player's preferred language whenever possible

The Camelia image is copyright 2009 by Larry Wall. "Raku" is trademark of the Yet Another Society. All rights reserved.