game.resource_manager, an Arc<RwLock<resources::Manager>>, sometimes hangs on write(), apparently a deadlock. Switch to using try_write() and continue the main game loop iteration if it fails, using the previous resource version and allow main loop tick if can't obtain a write lock. No warning is logged since this error is recoverable and seemingly intermittent. May not be the best fix, but unblocking iterative development.
Adds support for connecting to both 1.12.2 and 1.11.2 (protocols 340 and 316) servers
https://github.com/iceiix/steven/issues/18 Enhance protocol support
Closes https://github.com/iceiix/steven/pull/48 1.11.2 protocol support (316)
* Restore create_ids!() macro in packet identifiers
* Add translate_packet_id() function to map external 1.12.2 packet ids to internal sequential ids
* Implement translate_internal_packet_id() from a new protocol_packet_ids! macro
* Move packet IDs to separate file, v1_12_2.rs
* Change supported protocols constant to an array
* Add v1_11_2 protocol packet IDs (from https://github.com/iceiix/steven/pull/48)
* Add keep alive packet variants: _i64 (>=1.12.2) and _VarInt (<=1.11.2)
* Abstract protocol versions, can now connect to both 1.12.2 and 1.11.2
* Send protocol version in handshake packet
* Restore 1.11 (315) protocol support as in original (https://github.com/thinkofname/steven) Steven
The first step of https://github.com/iceiix/steven/issues/18 Enhance protocol support,
instead of hardcoding a fixed version, the client now matches whatever the server sent.
* Get the protocol version to send from the ping packet
* Save/load server protocol versions to disk, server_versions.json
* Fallback to default SUPPORTED_PROTOCOL if no ping response
* Add glutin dependency
* Create a glutin window
* Use the glutin window, basics work
* Store DPI factor on game object, update on Resized
* Use physical size for rendering only. Fixes UI scaled too small
Fixes https://github.com/iceiix/steven/pull/35#issuecomment-442683373
See also https://github.com/iceiix/steven/issues/22
* Begin adding mouse input events
* Listen for DeviceEvents
* Call hover_at on mouse motion
* Listen for CursorMoved window event, hovering works
Glutin has separate WindowEvent::CursorMoved and
DeviceEvent::MouseMotion events, for absolute cursor and relative mouse
motion, respectively, instead of SDL's Event::MouseMotion for both.
* Use tuple pattern matching instead of nested if for MouseInput
* Implement left clicking
* Use grab_cursor() to capture the cursor
* Hide the cursor when grabbing
* Implement MouseWheel event
* Listen for keyboard input, escape key release
* Keyboard input: console toggling, glutin calls backquote 'grave'
* Implement fullscreen in glutin, updates https://github.com/iceiix/steven/pull/31
* Update settings for glutin VirtualKeyCode
* Keyboard controls (note: must clear conf.cfg to use correct bindings)
* Move DeviceEvent match arm up higher for clarity
* Remove SDL
* Pass physical dimensions to renderer tick so blit_framebuffer can use full size but the ui is still sized logically.
* Listen for DeviceEvent::Text
* Implement text input using ReceivedCharacter window event, works
https://github.com/iceiix/steven/pull/35#issuecomment-443247267
* Request specific version of OpenGL, version 3.2
* Request OpenGL 3.2 but fallback to OpenGL ES 2.0 if available (not tested)
* Set core profile and depth 24-bits, stencil 0-bits
* Allow changing vsync, but require restarting (until https://github.com/tomaka/glutin/issues/693)
* Clarify specific Rust version requirement
* Import glutin::* in handle_window_event() to avoid overly repetitive code
* Linux in VM fix: manually calculate delta in MouseMotion
For the third issue on https://github.com/iceiix/steven/pull/35#issuecomment-443084458https://github.com/tomaka/glutin/issues/1084 MouseMotion event returns absolute instead of relative values, when running Linux in a VM
* Heuristic to detect absolute/relative MouseMotion from delta:(xrel, yrel); use a higher scaling factor
* Add clipboard pasting with clipboard crate instead of sdl2
https://github.com/iceiix/steven/pull/35#issuecomment-443307295
* Add handwritten RSA PKCS1 encryption using num-bigint and simple_asn1
* Add more logging to compare OpenSSL with/without side-by-side
* Log message and ciphertext in hex
* Print N and e as hexadecimal integers
* Fix bad encryption caused by zeros in PKCS1 padding
PS field in https://tools.ietf.org/html/rfc8017#section-7.2.1
Must be nonzero
* Use rand fill instead of rand_bytes
* Remove OpenSSL!
* Update CI scripts and docs to not install OpenSSL
* Remove copying OpenSSL DLLs (libeay and ssleay) in AppVeyor script
* Change rsa_public_encrypt_pkcs1 to return a Result<Vec<u8>, String>
* Add error checking, returning Err<String> on failure; RFC comments
* Add the required message representative range checking
* Use expect() instead of unwrap() on from_der
* Map the ASN.1 error to a String to return it from rsa_public_encrypt_pkcs1() instead of panicking
* Move RSA to a new crate, rsa_public_encrypt_pkcs1
https://github.com/iceiix/rsa_public_encrypt_pkcs1
* Update to rsa_public_encrypt_pkcs1 with simple_asn 0.1.0
https://github.com/iceiix/rsa_public_encrypt_pkcs1/issues/1
* Update to published version of rsa_public_encrypt_pkcs1, 0.1.0
* Remove unnecessarily added blank line
* Remove libssl-dev from .travis.yml
* Remove seemingly unneeded const on MetadataKey<T> new
* Change biome temperature/moisture to integer, x100 to remove floating-point so can use within stable 'const fn'
* Remove unstable const_fn feature, now using stable const fn: see https://www.reddit.com/r/rust/comments/9msqfn/const_fn_soon_on_stable_rust/
* Test on Rust beta (awaiting 1.31 release for stable)
* Update readme for beta Rust support
* Encrypt with both RustCrypto cfb8 and OpenSSL
* Switch to RustCrypto for decrypting
* Show encryption for both RustCrypto and OpenSSL, for comparison...
* Correct off-by-one error in encryption, cfb8 doesn't need extra byte
* Remove OpenSSL for symmetric crypto
* Update Cargo.lock
An old version of hyper was used before (0.8.0), in the process of updating to hyper 0.12.11, found this higher-level replacement/wrapper, reqwest 0.9.4 which is simpler to use than the latest hyper and serves the purpose of a simple HTTP client well
* Begin updating to hyper 0.12.11
https://github.com/iceiix/steven/issues/4#issuecomment-425759778
* Use type variables for hyper::Client
* Fix setting header syntax, Content-Type: application/json, 17->13
* Parse strings into URLs with url.parse::<hyper::Uri>().unwrap()
b20971cb4e/examples/client.rs (L25)
* Use hyper::Request::post() then client.request() since client.post() removed
* wait() on the ResponseFuture to get the Result
* try! to unwrap the Result
* status() is now a method
* Concatenate body chunks unwrap into bytes, then parse JSON from byte slice, instead of from_reader which didn't compile
* Replace send() with wait() on ResponseFuture
* Parse HeaderValue to u64
* Slices implement std::io::Read trait
* Read into_bytes() instead of read_to_end()
* Disable boxed logger for now to workaround 'expected function, found macro'
* Remove unnecessary mutability, warnings
* Hack to parse twice to avoid double move
* Use hyper-rustls pure Rust implementation for TLS for HTTPS in hyper
* Start converting to reqwest: add Protocol::Error and reqwest::Error conversion
* Use reqwest, replacing hyper, in protocol
* Convert resources to use reqwest instead of hyper
* Convert skin download to reqwest, instead of hyper
* Remove hyper
* Revert unnecessary variable name change req/body to reduce diff
* Revert unnecessary whitespace change to reduce diff, align indentation on .
* Fix authenticating to server, wrong method and join URL
* Update Cargo.lock
* Replace find() with get()
* Update for renamed as_string->as_str and as_boolean->as_bool
https://github.com/serde-rs/json/releases/tag/v0.8.0
Value::as_string() has been renamed to as_str() and Value::as_boolean() has been renamed to as_bool() to improve consistency
https://github.com/serde-rs/json/issues/126
* No serde_json::Value::I64/U64/F64 anymore, only Number
* Update from lookup() to pointer(), using JSON pointer syntax
https://github.com/iceiix/steven/pull/6#issuecomment-432472123
* Remove unused and removed ObjectBuilder import
* Use into_iter().collect() to convert BTreeMap to serde_json::Map
* Change parse_rules to accept serde_json::Map instead of BTreeMap
* Remove unused serde_json macro_use
* Update Cargo.lock