dcss-api 0.4.0

A DCSS Webtile API for Rust.
Documentation
# dcss-api

`dcss-api` is an easy to use Rust wrapper for [Dungeon Crawl Stone Soup's (DCSS) Webtile](https://crawl.develz.org/) websocket API. It supports logging in, starting a game and sending commands during game play. It works for DCSS `0.29`, `0.30`, `0.31`, `0.32` and `0.33`.

## Documentation

The documentation for the `dcss-api` can be found [here](https://docs.rs/dcss-api/latest/dcss_api/index.html). The best way to start is to look at the examples [here](https://github.com/EricFecteau/dcss-api/tree/main/dcss-api/examples). Please see the [setup on GitHub](https://github.com/EricFecteau/dcss-api?tab=readme-ov-file#server--testing) in order to be able to run these examples. In depth documentation about the DCSS websocket API can also be found [here](https://ericfecteau.ca/dcss/dcss-api-docs/).

## Example

This example connects to DCSS on `localhost:8080`, logs in as `Username`, starts a random game as a minotaur berserker with a mace, moves up and then back, then quits the game and disconnects.

```Rust
// Connect to DCSS Webtile
let mut webtile = Webtile::connect("ws://localhost:8080/socket", 100)?;

// Empty message queue;
while webtile.get_message().is_some() {}

// Log in (to a user called "Username", with a password "Password")
let gameid = webtile.login_with_credentials("Username", "Password")?;

// Print the game id's that can be started
println!("{:?}", gameid);

// Empty message queue;
while webtile.get_message().is_some() {}

// Start a random game (seed `0`) for Minotaur berserker with a mace.
webtile.start_game_seeded(&gameid[0], "0", false, "b", "f", "b")?;

// Print the messages you get upon starting the game (should be processed)
while let Some(message) = webtile.get_message() {
    println!("{:?}", message)
}

// Move up and back
webtile.write_key("key_dir_n")?;
webtile.write_key("key_dir_s")?;

// Print the messages you while moving (should be processed)
while let Some(message) = webtile.get_message() {
    println!("{:?}", message)
}

// Quit game (same as dying)
webtile.quit_game()?;

// Print the messages after you quit game
while let Some(message) = webtile.get_message() {
    println!("{:?}", message)
}

// Disconnect from webtile
webtile.disconnect()?;
```