Architecture

From fCraft Wiki
Jump to: navigation, search

fCraft setup consists of two shared modules (fCraft.dll and fCraftGUI.dll), a visual configuration tool (ConfigGUI.exe), and a choice of front-ends (ServerGUI.exe and ServerCLI.exe).

Contents

Assembly Dependencies

FCraft Dependency Graph.png

Project Directory Structure

  • bin
    • Debug - binaries built in Debug, Debug_Events, Debug_IRC, and Debug_Scheduler configurations.
    • Release - binaries built in Release configuration.
  • ConfigCLI - experimental command-line config editor
  • ConfigGUI - graphical config editor
  • fCraft - shared components
    • AutoRank - fCraft.AutoRank namespace; AutoRankManager, conditions, and criteria.
    • Commands - fCraft, fCraft.Events namespaces; Command descriptors and handlers, Command/CommandDescriptor/CommandManager classes, CommandCategory enum.
    • Drawing - fCraft.Drawing, fCraft.Events namespaces; DrawOperation base class and Brush-related interfaces; BrushManager; copy/paste- and undo-related classes; Axis enum.
      • Brushes - fCraft.Drawing namespace; All brush implementations.
      • DrawOps - fCraft.Drawing namespace; All DrawOperation implementations.
    • MapConversion - fCraft.MapConversion namespace; MapUtility, class, MapFormat enum, IMapConverter implementations (importers and exporters), NBT and .INI utilities.
    • Network - fCraft, fCraft.Events namespaces; Heartbeat, IP bans, IRC, low-level network utilities, networking component of the Player class.
    • Player - fCraft, fCraft.Events namespaces; Permissions and ranks, player-related constants, PlayerDB and PlayerInfo, Player class, Chat.
    • System - fCraft, fCraft.Events namespaces; Config, Server central class, Logger, Scheduler.
    • Utils - fCraft, JetBrains.Annotations, System.IO.Compression namespaces; various utility classes, extension methods, Vector classes, code annotations.
    • World - fCraft namespace; World and WorldManager classes, Block enum, BlockDB classes, map generation, Zones.
  • fCraftGUI - fCraft.GUI namespace; graphical components shared by ServerGUI and ConfigGUI.
  • ServerCLI - fCraft.ServerCLI namespace; Command-line server front end.
  • ServerGUI - fCraft.ServerGUI namespace; Graphical server front end.
  • UpdateInstaller - fCraft.UpdateInstaller namespace; Self-extracting updater.
  • UpdateBuilder - fCraft.UpdateBuilder namespace; Zips files to include in the UpdateInstaller. Used only during the build process.

Headless operation

Headless servers needn't keep ServerGUI, ConfigGUI nor fCraftGUI, they cannot be ran and are not required by the CLI variants. The MapRenderer does need fCraftGUI.dll, even though it doesn't create such an interface.
A server update does re-install the deleted binaries, but those can be removed though a command in the post-update script.

Key Classes

  • fCraft.Command
fCraft/Commands/Command.cs
A text scanner that aids parsing chat commands and their arguments.
  • fCraft.CommandDescriptor
fCraft/Commands/CommandDescriptor.cs'
Describes a chat command. Defines properties, permission requirements, and usage information. Specifies a handler method. Used to add regular commands.
  • fCraft.Drawing.DrawOperation
fCraft/Drawing/DrawOperation.cs
Abstract class representing a drawing operation. Used to add draw commands.
  • fCraft.Chat
fCraft/Player/Chat.cs
Helper class for handling and broadcasting player-generated chat.
  • fCraft.Permission
fCraft/Player/Permission.cs
Enumeration of all permission types/categories. Every rank definition contains a combination of these.
  • fCraft.Player
fCraft/Network/Player.Networking.cs, fCraft/Player/Player.cs, fCraft/Player/Player.Events.cs
Object representing volatile state ("session") of a connected player. For persistent state of a known player account, see PlayerInfo. Use "Info" property of the Player class to access the associated PlayerInfo record.
  • fCraft.PlayerDB
fCraft/Player/PlayerDB.cs
Persistent database of player information. Can be used to look up online or offline players and to gather statistics.
  • fCraft.PlayerInfo
fCraft/Player/PlayerInfo.Actions.cs, fCraft/Player/PlayerInfo.cs, fCraft/Player/PlayerInfo.Events.cs
Object representing persistent state ("record") of a player, online or offline. There is exactly one PlayerInfo object for each known Minecraft account. All data is stored in the PlayerDB.
  • fCraft.Rank
fCraft/Player/Rank.cs
A rank that can be assigned to a player. Each player can only hold one rank at a time. Each rank has a name, a set of permissions, and a set of restrictions on those permissions.
  • fCraft.ConfigKey
fCraft/System/ConfigKey.cs
Enumeration of available configuration keys. Config.cs contains extension methods for getting/setting keys, resetting key values, and getting key metadata.
  • fCraft.Logger
fCraft/System/Logger.cs
Central logging class. Logs to file, relays messages to the frontend, submits crash reports.
  • fCraft.Scheduler
fCraft/System/Scheduler.cs
A general-purpose task scheduler. Can be used to run tasks at certain times, once or periodically. Usable to offloading intensive tasks to the background.
  • fCraft.Server
fCraft/System/Server.cs
Core of an fCraft server. Manages startup/shutdown, online player sessions, and global events and scheduled tasks.
  • fCraft.Block
fCraft/World/Block.cs
Enumeration of all standard Minecraft Classic block types.
  • fCraft.Map
fCraft/World/Map.cs
Represents a loaded map file. Provides methods to get/set blocks, metadata, and zones.
  • fCraft.World
fCraft/World/World.cs, 'fCraft/World/World.Events.cs
Represents an entry on the world list. May or may not have a map file loaded. Manages players, access/build security, various metadata, flushing, locking, saving and backups.


Event Sequences

Personal tools
Namespaces

Variants
Actions
Navigation
Toolbox
Google AdSense