Code Monkey home page Code Monkey logo

netwayste's Introduction

conwayste

Multiplayer Conway's Game of Life!

License: GPL v3 build status Discord

Life In Action Patterns!
conwayste.mp4
conwayste2.mp4

How to Play

Click on the desired menu option after the game boots. Start Game is a good place to... start ;).

Once in game:

  • Left click toggles a cell (by default).
  • The number keys control what left click does (whether it toggles a cell or drops a pattern).
  • If dropping a pattern, you can use Shift-left and Shift-right to rotate the pattern.
  • Enter to toggle chatbox focus.
  • + and - to zoom in and out
  • Press r to toggle running/paused (Will not work in multiplayer mode).
  • Space to single step (Will not work in multiplayer mode).
  • Esc to go back to the menu.

Setup

Conwayste has been developed with cross-platform support in mind since day one using the Rust programming language! Your dependencies will likely vary based on your choice of operating system.

The easiest way to get the Rust compiler and toolchain is using Rustup.

This has been validated as runnable on:

  • Ubuntu Linux (18.04 and 20.04)
  • Fedora Linux 32
  • Windows 10
  • OpenBSD
  • macOS Catalina (10.15.7)

There be dragons for any other operating system not listed above. Please tread carefully 馃槃.

Windows / MacOS

The Conwayste client and server compile and run right out of the box. Skip directly to Installation.

Linux

On Linux, the ALSA development files are required. These are provided as part of the libasound2-dev package on Debian and Ubuntu distributions and alsa-lib-devel on Fedora. For any other distribution, please refer to your package manager and/or compile them from source.

Also install OpenSSL development files with openssl-dev or openssl-devel (depending on your distro).

OpenBSD

doas pkg_add llvm

You will also need this environment variable. Add to your profile if desired:

export LIBCLANG_PATH=/usr/local/lib

Installation

Please clone this repository, and build the client and server using cargo. The build may take several minutes to complete, depending on your system specs.

$ git clone https://github.com/conwayste/conwayste --recurse-submodules
$ cd conwayste/

If you cloned this previously and want to update, note that you may need to run git submodule init then git submodule update after pulling.

Playing the Game

Running The Client

$ cargo run --bin client

Running the Server

$ cargo run --bin server --name "Example Server" --public-address yourserver.example.com:2016

If --public-address is specified, the server automatically registers itself with the Official Conwayste Registrar. Leave this off if you are running a private server.

An alternate registrar can be specified with the --registrar-url option:

$ cargo run --bin server --name "Example Server" --public-address yourserver.example.com:2016 --registrar-url https://yourregistrar.example.com/addServer

Use this if we didn't pay our server bills and someone else has their own registrar running. :)

FAQ

Did you write your own game engine?

Nope! We are using the ggez engine and give many thanks to its developers and contributers. Head over to their GitHub page to learn more about it.

When will this be ready?

The developers have busy lives and enjoy working on this in their spare time. If you are waiting for a release, then I encourage you to contribute 馃槃. This could take the form of bug reports or design feedback as well as lines of code.

My installation fails in Linux. What should I do?

It's likely that we have not kept the installation steps up-to-date. Please Check the Ubuntu section in .travis.yml for a guaranteed up-to-date list of packages if your installation fails. :)

I found a bug! What should I do?

It would help the developers a lot if you could submit an issue in GitHub describing the bug.

Contributors

  • aaronm04
  • manghi

Your name could be here! Pull requests are welcome!

netwayste's People

Contributors

manghi avatar

Stargazers

 avatar

Watchers

 avatar  avatar  avatar

netwayste's Issues

Add support for a DNS resolver

So that we can point to any.host.com and do not need to specify an IP.
Consider changing the default port to something else.

/quit does not terminate the netwayste client

Discovered on conwayste/conwayste branch (aaron/fix_bin_conflict)
Does not occur on conwayste/netwayste branch (reliability_part_3)
It's possible that I've already fixed it in the reliability_part_3 branch, but opening this for tracking purposes so I don't forget.

位 git checkout aaron/fix_bin_conflict
Switched to branch 'aaron/fix_bin_conflict'
Your branch is up to date with 'origin/aaron/fix_bin_conflict'.

位 cargo run --bin cli-client
    Finished dev [optimized + debuginfo] target(s) in 0.18s
     Running `target/debug/cli-client`
Connecting to V4(127.0.0.1:12345)
Accepting commands to remote V4(127.0.0.1:12345) from local V4(0.0.0.0:38653).
Type /help for more info...
/quit
Peace out!
/quit
Peace out!
^C

server panic when running /disconnect

I joined a room with the client, did a /list, then did a /disconnect, which caused the server to crash:

Fri 2019-01-18 21:44:57.901163 [TRACE] - [Request] cookie: Some("1A0dJleB68pPuRIyCNVDlQ==") sequence: 11 resp_ack: Some(11) event: Disconnect
Fri 2019-01-18 21:44:57.901601 [TRACE] - [CAN PROCESS?] Ack: 10 Sqn: 11
Fri 2019-01-18 21:44:57.901869 [TRACE] - [PROCESS IMMEDIATE]
thread 'main' panicked at 'Player not found for PlayerID(4162779497) while handling request action Disconnect', src/server.rs:927:25
stack backtrace:
   0: std::sys::unix::backtrace::tracing::imp::unwind_backtrace
             at libstd/sys/unix/backtrace/tracing/gcc_s.rs:49
   1: std::sys_common::backtrace::print
             at libstd/sys_common/backtrace.rs:71
             at libstd/sys_common/backtrace.rs:59
   2: std::panicking::default_hook::{{closure}}
             at libstd/panicking.rs:211
   3: std::panicking::default_hook
             at libstd/panicking.rs:227
   4: std::panicking::rust_panic_with_hook
             at libstd/panicking.rs:476
   5: std::panicking::continue_panic_fmt
             at libstd/panicking.rs:390
   6: std::panicking::begin_panic_fmt
             at libstd/panicking.rs:345
   7: server::ServerState::handle_request_action
             at src/server.rs:927
   8: server::ServerState::process_player_request_action
             at src/server.rs:627
   9: server::ServerState::decode_packet
             at src/server.rs:861
  10: server::main::{{closure}}
             at src/server.rs:1207
  11: <futures::stream::fold::Fold<S, F, Fut, T> as futures::future::Future>::poll
             at /home/x/.cargo/registry/src/github.com-1ecc6299db9ec823/futures-0.1.17/src/stream/fold.rs:58
  12: <futures::future::map::Map<A, F> as futures::future::Future>::poll
             at /home/x/.cargo/registry/src/github.com-1ecc6299db9ec823/futures-0.1.17/src/future/map.rs:30
  13: <futures::future::map_err::MapErr<A, F> as futures::future::Future>::poll
             at /home/x/.cargo/registry/src/github.com-1ecc6299db9ec823/futures-0.1.17/src/future/map_err.rs:30
  14: <futures::future::map::Map<A, F> as futures::future::Future>::poll
             at /home/x/.cargo/registry/src/github.com-1ecc6299db9ec823/futures-0.1.17/src/future/map.rs:30
  15: <futures::future::select::Select<A, B> as futures::future::Future>::poll
             at /home/x/.cargo/registry/src/github.com-1ecc6299db9ec823/futures-0.1.17/src/future/select.rs:48
  16: <futures::future::map::Map<A, F> as futures::future::Future>::poll
             at /home/x/.cargo/registry/src/github.com-1ecc6299db9ec823/futures-0.1.17/src/future/map.rs:30
  17: <futures::task_impl::Spawn<T>>::poll_future_notify::{{closure}}
             at /home/x/.cargo/registry/src/github.com-1ecc6299db9ec823/futures-0.1.17/src/task_impl/mod.rs:288
  18: <futures::task_impl::Spawn<T>>::enter::{{closure}}
             at /home/x/.cargo/registry/src/github.com-1ecc6299db9ec823/futures-0.1.17/src/task_impl/mod.rs:362
  19: futures::task_impl::std::set
             at /home/x/.cargo/registry/src/github.com-1ecc6299db9ec823/futures-0.1.17/src/task_impl/std/mod.rs:78
  20: <futures::task_impl::Spawn<T>>::enter
             at /home/x/.cargo/registry/src/github.com-1ecc6299db9ec823/futures-0.1.17/src/task_impl/mod.rs:362
  21: <futures::task_impl::Spawn<T>>::poll_future_notify
             at /home/x/.cargo/registry/src/github.com-1ecc6299db9ec823/futures-0.1.17/src/task_impl/mod.rs:288
  22: tokio_core::reactor::Core::run::{{closure}}
             at /home/x/.cargo/registry/src/github.com-1ecc6299db9ec823/tokio-core-0.1.12/src/reactor/mod.rs:235
  23: <scoped_tls::ScopedKey<T>>::set
             at /home/x/.cargo/registry/src/github.com-1ecc6299db9ec823/scoped-tls-0.1.0/src/lib.rs:135
  24: tokio_core::reactor::Core::run
             at /home/x/.cargo/registry/src/github.com-1ecc6299db9ec823/tokio-core-0.1.12/src/reactor/mod.rs:234
  25: server::main
             at src/server.rs:1284
  26: std::rt::lang_start::{{closure}}
             at libstd/rt.rs:74
  27: std::panicking::try::do_call
             at libstd/rt.rs:59
             at libstd/panicking.rs:310
  28: __rust_maybe_catch_panic
             at libpanic_unwind/lib.rs:102
  29: std::rt::lang_start_internal
             at libstd/panicking.rs:289
             at libstd/panic.rs:392
             at libstd/rt.rs:58
  30: std::rt::lang_start
             at libstd/rt.rs:74
  31: main
  32: __libc_start_main
  33: _start

I'm on the reliability_part3 branch (commit 864bf51).

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    馃枛 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. 馃搳馃搱馃帀

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google 鉂わ笍 Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.