EN /HU | Belépés

RuBBS

A rubbs a Ruby gemünk telnetes üzenőfalak (BBS-ek) építéséhez: egy belépő párbeszéd tíz sorból, egy ablakos, menüs, egérrel kezelhető teljes képernyős board néhány százból, és ugyanaz a board Commodore 64-en, ugyanazon a porton. A BBS-hálózatunk mind a tizenegy boardja ezen fut. Ez a kézikönyv a rubbs 1.0.0-t írja le. Minden osztálya és metódusa dokumentálva van a forrásban: az API-referencia (RDoc) minden kiadási taggel újraépül belőle.

Amit kapsz

  • Három réteg egy hívásban — Flow a soronkénti párbeszédekhez (belépés, varázslók), Application egy asztalhoz ablakokkal, menükkel és widgetekkel, és a PETSCII Screen a Selector kurzoros menüivel egy soralapú boardhoz, Commodore 64-en vagy modern terminálon; a hívás szabadon jár köztük.
  • Turbo Vision telnetvonalon — mozgatható, méretezhető, nagyítható és váltható ablakok, menüsor gyorsbillentyűkkel, státuszsor, űrlapok, master-detail böngészők, chat-folyamok, öt színtéma és Markdown-renderelő, mind kattintható egérrel.
  • Commodore 64-es arc — a session.petscii! 40×25-ös PETSCII-re állítja a vonalat, a kód közben ugyanúgy UTF-8-at és ANSI-t ír; a BBS::Terminal minden hívótól megkérdezi, milyen terminálról hív, és a modern vagy a C64-es arcot indítja.
  • Doorok és gatewayek — szimulált gépek (FakeOS), flow-k és bármilyen program doorként, telnet-gatewayek, amik egy másik boardnak adják tovább a vonalat (egy C64 akár ASCII-boardot is felhívhat), ZMODEM- és XMODEM-letöltés.
  • AI-karakterek — egy YAML-fájlban leírt persona, ami bármilyen OpenAI-kompatibilis modellen beszél, szavanként streamelve, és beégetett válaszokkal, ha a modell nem elérhető.
  • Egy tartalmas board építőelemei — SQLite-fájl migrációkkal, korlátok közé szorított HTTP, cache, rate limit, ütemezett Wikipédia-kliens, egységes naplóformátum és újrapróbáló háttérmunka.
  • Az igazi vonalra készült — telnet-negotiation, ablakméret, SGR-egér, tétlenségi, hívásszám- és címenkénti korlátok, vezérlőkaraktermentes bemenet, csak nyilvános címet hívó gateway, és egy door összeomlása sosem bontja a hívást.

A kézikönyv

Oldal Mit találsz ott
Minimális projekt A legkisebb teljes projekt: kérdés-válasz board négy fájlban, Dockerfile, compose, futtatás Windowson, Linuxon és macOS-en
Első lépések Telepítés, az első board, a BBS.configure minden beállítása, a szerver, egy valódi board projektszerkezete, Docker
Flow A soronkénti párbeszéd DSL-je lépésről lépésre: ask, say, menu, confirm, gate, persist, call, screenek, bannerek, al-flow-k
Application Az asztal: az application DSL, menüsor, státuszsor, helperek és service-ek, a futási ciklus, események és fókusz
Window-k Window-k és a window DSL; Info, Form, MasterDetail, Stream; dialógusok; nagyítás, mozgatás, méretezés, váltás
Widgetek Minden widget és konténer, jelenetek, és saját widget írása
Rajzolás Témák és színszerepeik, a paletta, a FrameBuffer, a renderelő, Markdown
Doorok Doorok, szimulált gépek (FakeOS), telnet-gatewayek (Gateway), ZMODEM és XMODEM
AI-karakterek Personák, a modellkliens, chat előzményekkel és tartalékválaszokkal, az írógép
Commodore 64 PETSCII, a terminálkérdés, a PETSCII Screen és a Selector, és egy board modern és C64-es arccal
Rajzok és grafikus képernyők Rajzok YAML-ben mindkét arcra, a C64 grafikus vászna és kurzoros menü rajta, élő hotspotos jelenetek, évszak-rétegek, art-preview
Telnet és a store A session: negotiation, billentyűk, egér, sorok, korlátok; a BBS::Store SQLite-on
Adat és hálózat BBS.log, BBS.background, BBS::SQLite, HTTP, Cache, RateLimit, Wikipedia, Text, Address, és hogy hol kezeljük a hibát
Változásnapló Mit hozott az egyes verzió, és mit vett ki az 1.0

Az első board

A gem neve bbs. Figyel egy TCP-porton, minden hívóval lefolytatja a telnet-negotiationt, mindegyiknek ad egy Session-t, és futtatja a beállított flow-t:

RUBY
require 'bbs'

BBS.configure do |c|
  c.log_tag = 'my-bbs'
  c.flow = BBS::Flow.define do
    big_banner 'My BBS'
    ask :name, prompt: 'Your name'
    say 'Welcome!', style: :success
  end
end

BBS.start

ruby bbs.rb, aztán telnet localhost 2323. Innen az Első lépések épít belőle ablakos, C64-es arcú boardot.

A három réteg

Réteg Mi ez Mire jó
BBS::Flow soronkénti párbeszéd, lépésenként deklarálva belépés, regisztráció, varázslók, a hívás ragasztója
BBS::Application asztal: menüsor, window-k, widgetek, egér egy egész board modern terminálon
BBS::Petscii::Screen + BBS::Selector soralapú képernyő 40×25-ben (vagy a modern terminál méretében): címsor, lapozás, kurzoros menük, promptok, szerkesztő egy board C64-es arca, vagy egy egész soralapú board

A hívás többnyire egy flow-val indul (a terminálkérdés, a belépés), és egy applicationben vagy egy PETSCII-képernyőn folytatódik; a doorok és gatewayek kilépnek belőle, majd visszatérnek. Az 1.0 előtt volt egy negyedik réteg is, a BBS::TUI, egyetlen teljes képernyős oldalakhoz; egyik board sem használta, és az 1.0 kivette (lásd a Változásnaplót).

MERMAID
flowchart LR
  S[TCP-szerver] --> SE[Session: telnet, ablakméret]
  SE --> F[Flow]
  F --> A[Application]
  F --> P[PETSCII Screen + Selector]
  A <--> D[Door: FakeOS, Flow, program]
  A <--> G[Gateway: egy másik board]
  P <--> G
  F --> F2[Al-flow]

Kik használják

Board Mit ad neki a rubbs
Teletype BBS :2323 az egész asztalt és a PETSCII-arcát; a SERMO és a Chat of Ra AI-karakteres FakeOS-door, a C64 és a Plus/4 door FakeOS-gép
Impostor BBS :2324 egy flow saját screenekkel, gemben, így egy másik board doorként is futtathatja
TTG Wiki BBS :2325 kétpaneles wikiböngésző a wiki JSON API-ja fölött
Alexandria BBS :2326 a Wikipédia (BBS::Wikipedia) master-detail window-kban, és PETSCII-ben
Feedia BBS :2327 RSS-olvasó űrlapokkal az adminoknak, és PETSCII-ben
TTG Blog BBS :2328 blog BBS::SQLite-on, soralapúan mindkét arcon
WarpEngine BBS :2329 a C64- és Plus/4-polc, ZMODEM- és XMODEM-letöltéssel
Scriptorium BBS :2330 a Project Gutenberg könyvei BBS::HTTP-n és BBS::Cache-en át
Commodex BBS :2331 C64-es játékok a Wikidatából és a Wikipédiából, a tippek BBS::RateLimit-tel korlátozva
Pixelia BBS :2332 ANSI- és PETSCII-galéria és egy közös vászon (Petscii::Canvas, Art)
TTG Gate BBS egy port az egész hálózathoz és a világ boardjainak telefonkönyve, mind BBS::Gateway-jel (translate:, ha egy C64 ASCII-boardot hív)

Egy soralapú board építőkövei

A 0.29.0 óta a rubbs-ban van, amit eddig minden soralapú boardunk maga írt meg. Mind benne van az API-referenciában; a Commodore 64 oldal munka közben mutatja őket.

Osztály Mi ez
BBS::Petscii::Screen egy C64-es hívás 40×25-ös képernyője: title (fordított sáv), say(text, color:), rule(color:), page (oldalanként 20 sor, RETURN-re a következő, kérésre 2/5 oldalszám), pick (számozott BBS::Selector-lista), menu, actions (egy sor billentyű), choose (egy billentyű néhány közül), ask (BBS::Field), edit (BBS::Editor, nil, ha a hívó kilép), pause, key, bell, plain. A board saját metódusaihoz leszármaztatható; a cols:/rows: megadásával modern terminálon is használható
BBS::Selector az egyetlen kurzoros menü: számozott, a kurzorbillentyűk és a számjegyek kijelölnek, a RETURN választ; a Flow menu-je, a Screen minden menüje és a vászon menüje is Selector, a színeit a Selector::COLORS adja
BBS::Petscii::Colors a BBS::Ansi paletta C64-es nevei: WH YE CY LG GR DG LB BL GN RD PU OR, valamint RV/RO a fordított mód be/ki. A board névtér-moduljában a Colors.install(self) minden benne fészkelt osztálynak megadja a puszta neveket
BBS::BlockFont a logók 3×5-ös blokkbetűje (A–Z, 0–9, szóköz és néhány jel): rows, half_blocks a modern archoz, petscii (fordított szóközök, soronként egy szín) a C64-hez; a NARROW_I és a WIDE_W a betűk másik alakja
BBS::Goodbye a hívás utolsó képernyője: modern („Thanks for calling …”, NO CARRIER) és petscii (fordított sáv, majd kis szünetekkel +++, ATH0, NO CARRIER)
BBS::DiscordWebhook Discord-webhookra posztol háttérszálon, mentionök nélkül, továbbítási korláttal (alapból 20 poszt 10 percenként), időkorláttal, a hibákat a board log tagje alatt naplózza; a require 'bbs/discord_webhook' önmagában tölti be, így egy board domainje is használhatja
RUBY
module UI
  module Petscii
    BBS::Petscii::Colors.install(self)

    class Screen < BBS::Petscii::Screen
    end

    LOGO = BBS::BlockFont.petscii('WARP', colors: [LB, LB, CY, CY, WH], indent: 10)
  end
end

screen = UI::Petscii::Screen.new(runner.session)
book   = screen.pick('the shelves', books, &:title)
screen.say('Downloading…', color: YE)
BBS::Goodbye.petscii(screen, title: 'warpengine bbs', color: LB)

Frissítés 0.x-ről

Az 1.0 a nagytakarítás kiadása: mindenre egyetlen út. Amit egy boardnak általában át kell írnia:

  • screen.say(text, GN) → screen.say(text, color: GN), screen.rule(DG) → screen.rule(color: DG);
  • screen.editor(max, title) → screen.edit(title: title, max: max).to_s;
  • Petscii::Screen::MENU → BBS::Selector::COLORS (vagy semmi: ez az alapértelmezés);
  • privát címen futó szomszéd boardra mutató gateway → public_only: false;
  • kikerült a BBS::TUI, a BBS::Color, a ProgressBar, Spinner, HBox, VBox, Panel, AnsiArt, a Flow-lépések többsége a call mellől, és a színekről elnevezett Flow-stílusok.

A Változásnapló röviden felsorolja mindezt; a repó UPGRADING.md-je minden eltávolított vagy átnevezett API-t megad a helyettesítőjével és egy greppel, amely megtalálja.

Telepítés

RUBY
gem 'bbs', git: 'https://git.teletypegames.org/engines/rubbs.git', tag: 'v1.0.0'

Ruby 3.2 vagy újabb (a socket időkorlátjaihoz IO#timeout= kell), a sqlite3 gemmel. A boardok taggel vagy git-revízióval rögzítik a rubbs-t a Gemfile.lock-jukban.

Forrásszerkezet

Fájl Feladat
lib/bbs.rb a nyilvános felület: BBS.configure, BBS.config, BBS.start, BBS.log, BBS.background
bbs/server.rb, bbs/session.rb, bbs/telnet.rb, bbs/telnet/ fogadó ciklus, hívónként egy szál; telnet (az egyetlen IAC-Parser), billentyűk, egér, sorok
bbs/petscii.rb, bbs/petscii/, bbs/terminal.rb a C64-es vonal, az egyetlen jeltáblája és kódolója, a Screen, a vászon; a modern-vagy-C64 kérdés
bbs/flow.rb, bbs/flow/, bbs/flow_runner.rb, bbs/banner.rb a Flow DSL, a lépésobjektumai és a futtatójuk; bannerek
bbs/selector.rb, bbs/selector/ a kurzoros menü
bbs/application.rb, bbs/menu.rb, bbs/statusbar.rb, bbs/focus_manager.rb, bbs/event.rb az Application-réteg
bbs/widget.rb, bbs/container.rb, bbs/widgets/ widgetek, fájlonként egy
bbs/window.rb, bbs/window_spec.rb, bbs/windows/*, bbs/dialogs.rb window-k, a window DSL, a kész window-k, dialógusok
bbs/ansi.rb, bbs/theme.rb, bbs/theme/presets.rb, bbs/frame_buffer.rb, bbs/renderer.rb, bbs/markdown.rb a paletta és a rajzolás
bbs/art.rb, bbs/season.rb, bin/art-preview rajzok mindkét arcra
bbs/door.rb, bbs/fake_os.rb, bbs/gateway.rb, bbs/gateway/, bbs/zmodem.rb, bbs/xmodem.rb doorok, szimulált gépek, gatewayek, letöltés
bbs/ai.rb AI-karakterek
bbs/block_font.rb, bbs/goodbye.rb, bbs/discord_webhook.rb logóbetű, búcsú, Discord-webhook posztok
bbs/sqlite.rb, bbs/store.rb, bbs/store/ SQLite migrációkkal; a rá épülő upsert-store
bbs/http.rb, bbs/cache.rb, bbs/rate_limit.rb, bbs/wikipedia.rb, bbs/background.rb, bbs/text.rb, bbs/address.rb egy tartalmas board közös építőelemei

Repó

engines/rubbs — MIT-licenc. A README.md-je az egyfájlos fejlesztői referencia, az UPGRADING.md az út 0.x-ről 1.0-ra; ez a kézikönyv a vezetett változat.