Skip to content

A bot written in Scala 3 to stress test text-based MMORPGs (MUDs).

License

Notifications You must be signed in to change notification settings

ryanberckmans/noric-bot

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 

History

16 Commits
 
 
 
 
 
 
 
 
 
 
 
 
 
 

Repository files navigation

noric-bot

A bot written in Scala 3 to stress test text-based MMORPGs.

Join us on the MUD discord!

OSX Quickstart

  • git clone
  • run the precompiled OSX binary that was added to git repo
    • $ HOST=yourmud.com PORT=4000 bin/osx-noric-bot 17
    • 👉 17 bots will connect to yourmud.com:4000 and spam one cmd every 450ms
  • this program scales gracefully to 1000+ bots

How to support your MUD

  • PRs welcome!
  • MUD-specific support is provided by each MUD implementing LoginCmds and NextCmds for each MUD.
  • See NoricMud.scala, the cmds for the author's closed-source MUD.

Technology

noric-bot is written in Scala 3 and compiled to native using graalvm. Scala 3 has lots of new features and most aren't yet used in noric-bot.

(noric-bot uses some Java APIs in lieu of Scala libraries because the latter aren't yet available for Scala 3. It may be possible to use libraries compiled with Scala 2 within a Scala 3 codebase using libraryDependencies += ("a" %% "b" % "c").withDottyCompat(scalaVersion.value), see here.)

Are you a Scala expert? I'd greatly appreciate PRs that improve the "Scala-ness" of this project :-)

IDE support for this toolchain is provided by atom-ide-scala and Dotty's implementation of the Language Server Protocol.

Scala is my favorite language and I'm excited for Scala 3. I think Scala is the best mainstream language with a sophisticated type system. Sophisticated type systems are money in the bank. For me, from a type system perspective, going from TypeScript to Scala is like going from JavaScript to TypeScript. (I love TypeScript and write a lot of it!)

Scala 3 launches in 2020 after a new compiler was written over a five year period. The new compiler is named "Dotty".

See A Tour of Scala 3.

Roadmap

I'd like to improve the level of documentation/comments in the code.

Native compilation is cool. The binary starts up instantly, unlike the jvm. The current roadmap is to expand Config.scala to allow greater custom behavior without recompilation.

Compile & Run

  • install Scala brew install scala sbt lampepfl/brew/dotty
  • install graalvm and ensure native-image is on your PATH
    • 👉 you can skip this step and run non-natively with sbt run
  • compile sbt compile
  • compile to native sbt show graalvm-native-image:packageBin or the alias sbt b
  • run with bin/noric-bot which is a symlink to the binary produced by the build

Personal notes from the author to himself

noric-bot is a port of noricmud's ruby bot.rb.

On my macbook pro use alias graalvm-enable and then run sbt b.

how to run a noricmud stress test

  1. compile noricmud with sanity checks disabled
  2. run noricmud locally outside of sbt:
run packaged MUD (without sbt) on OSX without using docker
    build in sbt with
        universal:packageBin
    run with
        cd target/universal && unzip noricmud-*zip && cd noricmud-*/
        JAVA_OPTS="-Xmx512m -Xms512m -Dgame.storage.init=init -Dcom.sun.management.jmxremote.port=9090 -Dcom.sun.management.jmxremote.ssl=false -Dcom.sun.management.jmxremote.authenticate=false" bin/noricmud
  1. run bin/noric-bot <# of bots to run>

  2. or use parallel: seq 100 | parallel --ungroup -j 100 -n0 bin/noric-bot 1 > /dev/null

gotchas

problem: hit limit of max open file handles

parallel: Warning: Only enough file handles to run 60 jobs in parallel.
parallel: Warning: Running 'parallel -j0 -N 60 --pipe parallel -j0' or
parallel: Warning: raising 'ulimit -n' or 'nofile' in /etc/security/limits.conf
parallel: Warning: or /proc/sys/fs/file-max may help.

solutions:

About

A bot written in Scala 3 to stress test text-based MMORPGs (MUDs).

Topics

Resources

License

Stars

Watchers

Forks

Releases

No releases published

Packages

No packages published

Languages