developing a telnet frontend for the game
							parent
							
								
									1c5519c761
								
							
						
					
					
						commit
						36176ef200
					
				|  | @ -2,6 +2,92 @@ | ||||||
| # It is not intended for manual editing. | # It is not intended for manual editing. | ||||||
| version = 3 | version = 3 | ||||||
| 
 | 
 | ||||||
|  | [[package]] | ||||||
|  | name = "ansi_term" | ||||||
|  | version = "0.12.1" | ||||||
|  | source = "registry+https://github.com/rust-lang/crates.io-index" | ||||||
|  | checksum = "d52a9bb7ec0cf484c551830a7ce27bd20d67eac647e1befb56b0be4ee39a55d2" | ||||||
|  | dependencies = [ | ||||||
|  |  "winapi", | ||||||
|  | ] | ||||||
|  | 
 | ||||||
|  | [[package]] | ||||||
|  | name = "anyhow" | ||||||
|  | version = "1.0.44" | ||||||
|  | source = "registry+https://github.com/rust-lang/crates.io-index" | ||||||
|  | checksum = "61604a8f862e1d5c3229fdd78f8b02c68dcf73a4c4b05fd636d12240aaa242c1" | ||||||
|  | 
 | ||||||
|  | [[package]] | ||||||
|  | name = "autocfg" | ||||||
|  | version = "1.0.1" | ||||||
|  | source = "registry+https://github.com/rust-lang/crates.io-index" | ||||||
|  | checksum = "cdb031dd78e28731d87d56cc8ffef4a8f36ca26c38fe2de700543e627f8a464a" | ||||||
|  | 
 | ||||||
|  | [[package]] | ||||||
|  | name = "bitflags" | ||||||
|  | version = "1.3.2" | ||||||
|  | source = "registry+https://github.com/rust-lang/crates.io-index" | ||||||
|  | checksum = "bef38d45163c2f1dde094a7dfd33ccf595c92905c8f8f4fdc18d06fb1037718a" | ||||||
|  | 
 | ||||||
|  | [[package]] | ||||||
|  | name = "bytes" | ||||||
|  | version = "1.1.0" | ||||||
|  | source = "registry+https://github.com/rust-lang/crates.io-index" | ||||||
|  | checksum = "c4872d67bab6358e59559027aa3b9157c53d9358c51423c17554809a8858e0f8" | ||||||
|  | 
 | ||||||
|  | [[package]] | ||||||
|  | name = "cfg-if" | ||||||
|  | version = "1.0.0" | ||||||
|  | source = "registry+https://github.com/rust-lang/crates.io-index" | ||||||
|  | checksum = "baf1de4339761588bc0619e3cbc0120ee582ebb74b53b4efbf79117bd2da40fd" | ||||||
|  | 
 | ||||||
|  | [[package]] | ||||||
|  | name = "chrono" | ||||||
|  | version = "0.4.19" | ||||||
|  | source = "registry+https://github.com/rust-lang/crates.io-index" | ||||||
|  | checksum = "670ad68c9088c2a963aaa298cb369688cf3f9465ce5e2d4ca10e6e0098a1ce73" | ||||||
|  | dependencies = [ | ||||||
|  |  "libc", | ||||||
|  |  "num-integer", | ||||||
|  |  "num-traits", | ||||||
|  |  "winapi", | ||||||
|  | ] | ||||||
|  | 
 | ||||||
|  | [[package]] | ||||||
|  | name = "doc-comment" | ||||||
|  | version = "0.3.3" | ||||||
|  | source = "registry+https://github.com/rust-lang/crates.io-index" | ||||||
|  | checksum = "fea41bba32d969b513997752735605054bc0dfa92b4c56bf1189f2e174be7a10" | ||||||
|  | 
 | ||||||
|  | [[package]] | ||||||
|  | name = "getrandom" | ||||||
|  | version = "0.2.3" | ||||||
|  | source = "registry+https://github.com/rust-lang/crates.io-index" | ||||||
|  | checksum = "7fcd999463524c52659517fe2cea98493cfe485d10565e7b0fb07dbba7ad2753" | ||||||
|  | dependencies = [ | ||||||
|  |  "cfg-if", | ||||||
|  |  "libc", | ||||||
|  |  "wasi", | ||||||
|  | ] | ||||||
|  | 
 | ||||||
|  | [[package]] | ||||||
|  | name = "hermit-abi" | ||||||
|  | version = "0.1.19" | ||||||
|  | source = "registry+https://github.com/rust-lang/crates.io-index" | ||||||
|  | checksum = "62b467343b94ba476dcb2500d242dadbb39557df889310ac77c5d99100aaac33" | ||||||
|  | dependencies = [ | ||||||
|  |  "libc", | ||||||
|  | ] | ||||||
|  | 
 | ||||||
|  | [[package]] | ||||||
|  | name = "instant" | ||||||
|  | version = "0.1.12" | ||||||
|  | source = "registry+https://github.com/rust-lang/crates.io-index" | ||||||
|  | checksum = "7a5bbe824c507c5da5956355e86a746d82e0e1464f65d862cc5e71da70e94b2c" | ||||||
|  | dependencies = [ | ||||||
|  |  "cfg-if", | ||||||
|  | ] | ||||||
|  | 
 | ||||||
| [[package]] | [[package]] | ||||||
| name = "kajam_10" | name = "kajam_10" | ||||||
| version = "0.1.0" | version = "0.1.0" | ||||||
|  | @ -12,3 +98,448 @@ dependencies = [ | ||||||
| [[package]] | [[package]] | ||||||
| name = "kajam_10_game" | name = "kajam_10_game" | ||||||
| version = "0.1.0" | version = "0.1.0" | ||||||
|  | 
 | ||||||
|  | [[package]] | ||||||
|  | name = "kajam_10_telnet" | ||||||
|  | version = "0.1.0" | ||||||
|  | dependencies = [ | ||||||
|  |  "anyhow", | ||||||
|  |  "kajam_10_game", | ||||||
|  |  "rusty_ulid", | ||||||
|  |  "tokio", | ||||||
|  |  "tracing", | ||||||
|  |  "tracing-subscriber", | ||||||
|  | ] | ||||||
|  | 
 | ||||||
|  | [[package]] | ||||||
|  | name = "lazy_static" | ||||||
|  | version = "1.4.0" | ||||||
|  | source = "registry+https://github.com/rust-lang/crates.io-index" | ||||||
|  | checksum = "e2abad23fbc42b3700f2f279844dc832adb2b2eb069b2df918f455c4e18cc646" | ||||||
|  | 
 | ||||||
|  | [[package]] | ||||||
|  | name = "libc" | ||||||
|  | version = "0.2.105" | ||||||
|  | source = "registry+https://github.com/rust-lang/crates.io-index" | ||||||
|  | checksum = "869d572136620d55835903746bcb5cdc54cb2851fd0aeec53220b4bb65ef3013" | ||||||
|  | 
 | ||||||
|  | [[package]] | ||||||
|  | name = "lock_api" | ||||||
|  | version = "0.4.5" | ||||||
|  | source = "registry+https://github.com/rust-lang/crates.io-index" | ||||||
|  | checksum = "712a4d093c9976e24e7dbca41db895dabcbac38eb5f4045393d17a95bdfb1109" | ||||||
|  | dependencies = [ | ||||||
|  |  "scopeguard", | ||||||
|  | ] | ||||||
|  | 
 | ||||||
|  | [[package]] | ||||||
|  | name = "log" | ||||||
|  | version = "0.4.14" | ||||||
|  | source = "registry+https://github.com/rust-lang/crates.io-index" | ||||||
|  | checksum = "51b9bbe6c47d51fc3e1a9b945965946b4c44142ab8792c50835a980d362c2710" | ||||||
|  | dependencies = [ | ||||||
|  |  "cfg-if", | ||||||
|  | ] | ||||||
|  | 
 | ||||||
|  | [[package]] | ||||||
|  | name = "matchers" | ||||||
|  | version = "0.1.0" | ||||||
|  | source = "registry+https://github.com/rust-lang/crates.io-index" | ||||||
|  | checksum = "8263075bb86c5a1b1427b5ae862e8889656f126e9f77c484496e8b47cf5c5558" | ||||||
|  | dependencies = [ | ||||||
|  |  "regex-automata", | ||||||
|  | ] | ||||||
|  | 
 | ||||||
|  | [[package]] | ||||||
|  | name = "memchr" | ||||||
|  | version = "2.4.1" | ||||||
|  | source = "registry+https://github.com/rust-lang/crates.io-index" | ||||||
|  | checksum = "308cc39be01b73d0d18f82a0e7b2a3df85245f84af96fdddc5d202d27e47b86a" | ||||||
|  | 
 | ||||||
|  | [[package]] | ||||||
|  | name = "mio" | ||||||
|  | version = "0.7.14" | ||||||
|  | source = "registry+https://github.com/rust-lang/crates.io-index" | ||||||
|  | checksum = "8067b404fe97c70829f082dec8bcf4f71225d7eaea1d8645349cb76fa06205cc" | ||||||
|  | dependencies = [ | ||||||
|  |  "libc", | ||||||
|  |  "log", | ||||||
|  |  "miow", | ||||||
|  |  "ntapi", | ||||||
|  |  "winapi", | ||||||
|  | ] | ||||||
|  | 
 | ||||||
|  | [[package]] | ||||||
|  | name = "miow" | ||||||
|  | version = "0.3.7" | ||||||
|  | source = "registry+https://github.com/rust-lang/crates.io-index" | ||||||
|  | checksum = "b9f1c5b025cda876f66ef43a113f91ebc9f4ccef34843000e0adf6ebbab84e21" | ||||||
|  | dependencies = [ | ||||||
|  |  "winapi", | ||||||
|  | ] | ||||||
|  | 
 | ||||||
|  | [[package]] | ||||||
|  | name = "ntapi" | ||||||
|  | version = "0.3.6" | ||||||
|  | source = "registry+https://github.com/rust-lang/crates.io-index" | ||||||
|  | checksum = "3f6bb902e437b6d86e03cce10a7e2af662292c5dfef23b65899ea3ac9354ad44" | ||||||
|  | dependencies = [ | ||||||
|  |  "winapi", | ||||||
|  | ] | ||||||
|  | 
 | ||||||
|  | [[package]] | ||||||
|  | name = "num-integer" | ||||||
|  | version = "0.1.44" | ||||||
|  | source = "registry+https://github.com/rust-lang/crates.io-index" | ||||||
|  | checksum = "d2cc698a63b549a70bc047073d2949cce27cd1c7b0a4a862d08a8031bc2801db" | ||||||
|  | dependencies = [ | ||||||
|  |  "autocfg", | ||||||
|  |  "num-traits", | ||||||
|  | ] | ||||||
|  | 
 | ||||||
|  | [[package]] | ||||||
|  | name = "num-traits" | ||||||
|  | version = "0.2.14" | ||||||
|  | source = "registry+https://github.com/rust-lang/crates.io-index" | ||||||
|  | checksum = "9a64b1ec5cda2586e284722486d802acf1f7dbdc623e2bfc57e65ca1cd099290" | ||||||
|  | dependencies = [ | ||||||
|  |  "autocfg", | ||||||
|  | ] | ||||||
|  | 
 | ||||||
|  | [[package]] | ||||||
|  | name = "num_cpus" | ||||||
|  | version = "1.13.0" | ||||||
|  | source = "registry+https://github.com/rust-lang/crates.io-index" | ||||||
|  | checksum = "05499f3756671c15885fee9034446956fff3f243d6077b91e5767df161f766b3" | ||||||
|  | dependencies = [ | ||||||
|  |  "hermit-abi", | ||||||
|  |  "libc", | ||||||
|  | ] | ||||||
|  | 
 | ||||||
|  | [[package]] | ||||||
|  | name = "once_cell" | ||||||
|  | version = "1.8.0" | ||||||
|  | source = "registry+https://github.com/rust-lang/crates.io-index" | ||||||
|  | checksum = "692fcb63b64b1758029e0a96ee63e049ce8c5948587f2f7208df04625e5f6b56" | ||||||
|  | 
 | ||||||
|  | [[package]] | ||||||
|  | name = "parking_lot" | ||||||
|  | version = "0.11.2" | ||||||
|  | source = "registry+https://github.com/rust-lang/crates.io-index" | ||||||
|  | checksum = "7d17b78036a60663b797adeaee46f5c9dfebb86948d1255007a1d6be0271ff99" | ||||||
|  | dependencies = [ | ||||||
|  |  "instant", | ||||||
|  |  "lock_api", | ||||||
|  |  "parking_lot_core", | ||||||
|  | ] | ||||||
|  | 
 | ||||||
|  | [[package]] | ||||||
|  | name = "parking_lot_core" | ||||||
|  | version = "0.8.5" | ||||||
|  | source = "registry+https://github.com/rust-lang/crates.io-index" | ||||||
|  | checksum = "d76e8e1493bcac0d2766c42737f34458f1c8c50c0d23bcb24ea953affb273216" | ||||||
|  | dependencies = [ | ||||||
|  |  "cfg-if", | ||||||
|  |  "instant", | ||||||
|  |  "libc", | ||||||
|  |  "redox_syscall", | ||||||
|  |  "smallvec", | ||||||
|  |  "winapi", | ||||||
|  | ] | ||||||
|  | 
 | ||||||
|  | [[package]] | ||||||
|  | name = "pin-project-lite" | ||||||
|  | version = "0.2.7" | ||||||
|  | source = "registry+https://github.com/rust-lang/crates.io-index" | ||||||
|  | checksum = "8d31d11c69a6b52a174b42bdc0c30e5e11670f90788b2c471c31c1d17d449443" | ||||||
|  | 
 | ||||||
|  | [[package]] | ||||||
|  | name = "ppv-lite86" | ||||||
|  | version = "0.2.15" | ||||||
|  | source = "registry+https://github.com/rust-lang/crates.io-index" | ||||||
|  | checksum = "ed0cfbc8191465bed66e1718596ee0b0b35d5ee1f41c5df2189d0fe8bde535ba" | ||||||
|  | 
 | ||||||
|  | [[package]] | ||||||
|  | name = "proc-macro2" | ||||||
|  | version = "1.0.30" | ||||||
|  | source = "registry+https://github.com/rust-lang/crates.io-index" | ||||||
|  | checksum = "edc3358ebc67bc8b7fa0c007f945b0b18226f78437d61bec735a9eb96b61ee70" | ||||||
|  | dependencies = [ | ||||||
|  |  "unicode-xid", | ||||||
|  | ] | ||||||
|  | 
 | ||||||
|  | [[package]] | ||||||
|  | name = "quote" | ||||||
|  | version = "1.0.10" | ||||||
|  | source = "registry+https://github.com/rust-lang/crates.io-index" | ||||||
|  | checksum = "38bc8cc6a5f2e3655e0899c1b848643b2562f853f114bfec7be120678e3ace05" | ||||||
|  | dependencies = [ | ||||||
|  |  "proc-macro2", | ||||||
|  | ] | ||||||
|  | 
 | ||||||
|  | [[package]] | ||||||
|  | name = "rand" | ||||||
|  | version = "0.8.4" | ||||||
|  | source = "registry+https://github.com/rust-lang/crates.io-index" | ||||||
|  | checksum = "2e7573632e6454cf6b99d7aac4ccca54be06da05aca2ef7423d22d27d4d4bcd8" | ||||||
|  | dependencies = [ | ||||||
|  |  "libc", | ||||||
|  |  "rand_chacha", | ||||||
|  |  "rand_core", | ||||||
|  |  "rand_hc", | ||||||
|  | ] | ||||||
|  | 
 | ||||||
|  | [[package]] | ||||||
|  | name = "rand_chacha" | ||||||
|  | version = "0.3.1" | ||||||
|  | source = "registry+https://github.com/rust-lang/crates.io-index" | ||||||
|  | checksum = "e6c10a63a0fa32252be49d21e7709d4d4baf8d231c2dbce1eaa8141b9b127d88" | ||||||
|  | dependencies = [ | ||||||
|  |  "ppv-lite86", | ||||||
|  |  "rand_core", | ||||||
|  | ] | ||||||
|  | 
 | ||||||
|  | [[package]] | ||||||
|  | name = "rand_core" | ||||||
|  | version = "0.6.3" | ||||||
|  | source = "registry+https://github.com/rust-lang/crates.io-index" | ||||||
|  | checksum = "d34f1408f55294453790c48b2f1ebbb1c5b4b7563eb1f418bcfcfdbb06ebb4e7" | ||||||
|  | dependencies = [ | ||||||
|  |  "getrandom", | ||||||
|  | ] | ||||||
|  | 
 | ||||||
|  | [[package]] | ||||||
|  | name = "rand_hc" | ||||||
|  | version = "0.3.1" | ||||||
|  | source = "registry+https://github.com/rust-lang/crates.io-index" | ||||||
|  | checksum = "d51e9f596de227fda2ea6c84607f5558e196eeaf43c986b724ba4fb8fdf497e7" | ||||||
|  | dependencies = [ | ||||||
|  |  "rand_core", | ||||||
|  | ] | ||||||
|  | 
 | ||||||
|  | [[package]] | ||||||
|  | name = "redox_syscall" | ||||||
|  | version = "0.2.10" | ||||||
|  | source = "registry+https://github.com/rust-lang/crates.io-index" | ||||||
|  | checksum = "8383f39639269cde97d255a32bdb68c047337295414940c68bdd30c2e13203ff" | ||||||
|  | dependencies = [ | ||||||
|  |  "bitflags", | ||||||
|  | ] | ||||||
|  | 
 | ||||||
|  | [[package]] | ||||||
|  | name = "regex" | ||||||
|  | version = "1.5.4" | ||||||
|  | source = "registry+https://github.com/rust-lang/crates.io-index" | ||||||
|  | checksum = "d07a8629359eb56f1e2fb1652bb04212c072a87ba68546a04065d525673ac461" | ||||||
|  | dependencies = [ | ||||||
|  |  "regex-syntax", | ||||||
|  | ] | ||||||
|  | 
 | ||||||
|  | [[package]] | ||||||
|  | name = "regex-automata" | ||||||
|  | version = "0.1.10" | ||||||
|  | source = "registry+https://github.com/rust-lang/crates.io-index" | ||||||
|  | checksum = "6c230d73fb8d8c1b9c0b3135c5142a8acee3a0558fb8db5cf1cb65f8d7862132" | ||||||
|  | dependencies = [ | ||||||
|  |  "regex-syntax", | ||||||
|  | ] | ||||||
|  | 
 | ||||||
|  | [[package]] | ||||||
|  | name = "regex-syntax" | ||||||
|  | version = "0.6.25" | ||||||
|  | source = "registry+https://github.com/rust-lang/crates.io-index" | ||||||
|  | checksum = "f497285884f3fcff424ffc933e56d7cbca511def0c9831a7f9b5f6153e3cc89b" | ||||||
|  | 
 | ||||||
|  | [[package]] | ||||||
|  | name = "rusty_ulid" | ||||||
|  | version = "0.11.0" | ||||||
|  | source = "registry+https://github.com/rust-lang/crates.io-index" | ||||||
|  | checksum = "39fa570a4b471f2ca43edc00217ca36e994772b2147b64a19b5b53d08709aa53" | ||||||
|  | dependencies = [ | ||||||
|  |  "chrono", | ||||||
|  |  "doc-comment", | ||||||
|  |  "rand", | ||||||
|  |  "serde", | ||||||
|  | ] | ||||||
|  | 
 | ||||||
|  | [[package]] | ||||||
|  | name = "scopeguard" | ||||||
|  | version = "1.1.0" | ||||||
|  | source = "registry+https://github.com/rust-lang/crates.io-index" | ||||||
|  | checksum = "d29ab0c6d3fc0ee92fe66e2d99f700eab17a8d57d1c1d3b748380fb20baa78cd" | ||||||
|  | 
 | ||||||
|  | [[package]] | ||||||
|  | name = "serde" | ||||||
|  | version = "1.0.130" | ||||||
|  | source = "registry+https://github.com/rust-lang/crates.io-index" | ||||||
|  | checksum = "f12d06de37cf59146fbdecab66aa99f9fe4f78722e3607577a5375d66bd0c913" | ||||||
|  | 
 | ||||||
|  | [[package]] | ||||||
|  | name = "sharded-slab" | ||||||
|  | version = "0.1.4" | ||||||
|  | source = "registry+https://github.com/rust-lang/crates.io-index" | ||||||
|  | checksum = "900fba806f70c630b0a382d0d825e17a0f19fcd059a2ade1ff237bcddf446b31" | ||||||
|  | dependencies = [ | ||||||
|  |  "lazy_static", | ||||||
|  | ] | ||||||
|  | 
 | ||||||
|  | [[package]] | ||||||
|  | name = "signal-hook-registry" | ||||||
|  | version = "1.4.0" | ||||||
|  | source = "registry+https://github.com/rust-lang/crates.io-index" | ||||||
|  | checksum = "e51e73328dc4ac0c7ccbda3a494dfa03df1de2f46018127f60c693f2648455b0" | ||||||
|  | dependencies = [ | ||||||
|  |  "libc", | ||||||
|  | ] | ||||||
|  | 
 | ||||||
|  | [[package]] | ||||||
|  | name = "smallvec" | ||||||
|  | version = "1.7.0" | ||||||
|  | source = "registry+https://github.com/rust-lang/crates.io-index" | ||||||
|  | checksum = "1ecab6c735a6bb4139c0caafd0cc3635748bbb3acf4550e8138122099251f309" | ||||||
|  | 
 | ||||||
|  | [[package]] | ||||||
|  | name = "syn" | ||||||
|  | version = "1.0.80" | ||||||
|  | source = "registry+https://github.com/rust-lang/crates.io-index" | ||||||
|  | checksum = "d010a1623fbd906d51d650a9916aaefc05ffa0e4053ff7fe601167f3e715d194" | ||||||
|  | dependencies = [ | ||||||
|  |  "proc-macro2", | ||||||
|  |  "quote", | ||||||
|  |  "unicode-xid", | ||||||
|  | ] | ||||||
|  | 
 | ||||||
|  | [[package]] | ||||||
|  | name = "thread_local" | ||||||
|  | version = "1.1.3" | ||||||
|  | source = "registry+https://github.com/rust-lang/crates.io-index" | ||||||
|  | checksum = "8018d24e04c95ac8790716a5987d0fec4f8b27249ffa0f7d33f1369bdfb88cbd" | ||||||
|  | dependencies = [ | ||||||
|  |  "once_cell", | ||||||
|  | ] | ||||||
|  | 
 | ||||||
|  | [[package]] | ||||||
|  | name = "tokio" | ||||||
|  | version = "1.12.0" | ||||||
|  | source = "registry+https://github.com/rust-lang/crates.io-index" | ||||||
|  | checksum = "c2c2416fdedca8443ae44b4527de1ea633af61d8f7169ffa6e72c5b53d24efcc" | ||||||
|  | dependencies = [ | ||||||
|  |  "autocfg", | ||||||
|  |  "bytes", | ||||||
|  |  "libc", | ||||||
|  |  "memchr", | ||||||
|  |  "mio", | ||||||
|  |  "num_cpus", | ||||||
|  |  "once_cell", | ||||||
|  |  "parking_lot", | ||||||
|  |  "pin-project-lite", | ||||||
|  |  "signal-hook-registry", | ||||||
|  |  "tokio-macros", | ||||||
|  |  "winapi", | ||||||
|  | ] | ||||||
|  | 
 | ||||||
|  | [[package]] | ||||||
|  | name = "tokio-macros" | ||||||
|  | version = "1.5.0" | ||||||
|  | source = "registry+https://github.com/rust-lang/crates.io-index" | ||||||
|  | checksum = "b2dd85aeaba7b68df939bd357c6afb36c87951be9e80bf9c859f2fc3e9fca0fd" | ||||||
|  | dependencies = [ | ||||||
|  |  "proc-macro2", | ||||||
|  |  "quote", | ||||||
|  |  "syn", | ||||||
|  | ] | ||||||
|  | 
 | ||||||
|  | [[package]] | ||||||
|  | name = "tracing" | ||||||
|  | version = "0.1.29" | ||||||
|  | source = "registry+https://github.com/rust-lang/crates.io-index" | ||||||
|  | checksum = "375a639232caf30edfc78e8d89b2d4c375515393e7af7e16f01cd96917fb2105" | ||||||
|  | dependencies = [ | ||||||
|  |  "cfg-if", | ||||||
|  |  "pin-project-lite", | ||||||
|  |  "tracing-attributes", | ||||||
|  |  "tracing-core", | ||||||
|  | ] | ||||||
|  | 
 | ||||||
|  | [[package]] | ||||||
|  | name = "tracing-attributes" | ||||||
|  | version = "0.1.18" | ||||||
|  | source = "registry+https://github.com/rust-lang/crates.io-index" | ||||||
|  | checksum = "f4f480b8f81512e825f337ad51e94c1eb5d3bbdf2b363dcd01e2b19a9ffe3f8e" | ||||||
|  | dependencies = [ | ||||||
|  |  "proc-macro2", | ||||||
|  |  "quote", | ||||||
|  |  "syn", | ||||||
|  | ] | ||||||
|  | 
 | ||||||
|  | [[package]] | ||||||
|  | name = "tracing-core" | ||||||
|  | version = "0.1.21" | ||||||
|  | source = "registry+https://github.com/rust-lang/crates.io-index" | ||||||
|  | checksum = "1f4ed65637b8390770814083d20756f87bfa2c21bf2f110babdc5438351746e4" | ||||||
|  | dependencies = [ | ||||||
|  |  "lazy_static", | ||||||
|  | ] | ||||||
|  | 
 | ||||||
|  | [[package]] | ||||||
|  | name = "tracing-log" | ||||||
|  | version = "0.1.2" | ||||||
|  | source = "registry+https://github.com/rust-lang/crates.io-index" | ||||||
|  | checksum = "a6923477a48e41c1951f1999ef8bb5a3023eb723ceadafe78ffb65dc366761e3" | ||||||
|  | dependencies = [ | ||||||
|  |  "lazy_static", | ||||||
|  |  "log", | ||||||
|  |  "tracing-core", | ||||||
|  | ] | ||||||
|  | 
 | ||||||
|  | [[package]] | ||||||
|  | name = "tracing-subscriber" | ||||||
|  | version = "0.3.0" | ||||||
|  | source = "registry+https://github.com/rust-lang/crates.io-index" | ||||||
|  | checksum = "5cf865b5ddc38e503a29c41c4843e616a73028ae18c637bc3eb2afaef4909c84" | ||||||
|  | dependencies = [ | ||||||
|  |  "ansi_term", | ||||||
|  |  "lazy_static", | ||||||
|  |  "matchers", | ||||||
|  |  "regex", | ||||||
|  |  "sharded-slab", | ||||||
|  |  "smallvec", | ||||||
|  |  "thread_local", | ||||||
|  |  "tracing", | ||||||
|  |  "tracing-core", | ||||||
|  |  "tracing-log", | ||||||
|  | ] | ||||||
|  | 
 | ||||||
|  | [[package]] | ||||||
|  | name = "unicode-xid" | ||||||
|  | version = "0.2.2" | ||||||
|  | source = "registry+https://github.com/rust-lang/crates.io-index" | ||||||
|  | checksum = "8ccb82d61f80a663efe1f787a51b16b5a51e3314d6ac365b08639f52387b33f3" | ||||||
|  | 
 | ||||||
|  | [[package]] | ||||||
|  | name = "wasi" | ||||||
|  | version = "0.10.2+wasi-snapshot-preview1" | ||||||
|  | source = "registry+https://github.com/rust-lang/crates.io-index" | ||||||
|  | checksum = "fd6fbd9a79829dd1ad0cc20627bf1ed606756a7f77edff7b66b7064f9cb327c6" | ||||||
|  | 
 | ||||||
|  | [[package]] | ||||||
|  | name = "winapi" | ||||||
|  | version = "0.3.9" | ||||||
|  | source = "registry+https://github.com/rust-lang/crates.io-index" | ||||||
|  | checksum = "5c839a674fcd7a98952e593242ea400abe93992746761e38641405d28b00f419" | ||||||
|  | dependencies = [ | ||||||
|  |  "winapi-i686-pc-windows-gnu", | ||||||
|  |  "winapi-x86_64-pc-windows-gnu", | ||||||
|  | ] | ||||||
|  | 
 | ||||||
|  | [[package]] | ||||||
|  | name = "winapi-i686-pc-windows-gnu" | ||||||
|  | version = "0.4.0" | ||||||
|  | source = "registry+https://github.com/rust-lang/crates.io-index" | ||||||
|  | checksum = "ac3b87c63620426dd9b991e5ce0329eff545bccbbb34f3be09ff6fb6ab51b7b6" | ||||||
|  | 
 | ||||||
|  | [[package]] | ||||||
|  | name = "winapi-x86_64-pc-windows-gnu" | ||||||
|  | version = "0.4.0" | ||||||
|  | source = "registry+https://github.com/rust-lang/crates.io-index" | ||||||
|  | checksum = "712e227841d057c1ee1cd2fb22fa7e5a5461ae8e48fa2ca79ec42cfc1931183f" | ||||||
|  |  | ||||||
|  | @ -9,4 +9,5 @@ kajam_10_game = { path = "game" } | ||||||
| [workspace] | [workspace] | ||||||
| members = [ | members = [ | ||||||
| 	"game", | 	"game", | ||||||
|  | 	"telnet", | ||||||
| ] | ] | ||||||
|  |  | ||||||
|  | @ -210,14 +210,6 @@ pub struct State { | ||||||
| } | } | ||||||
| 
 | 
 | ||||||
| impl State { | impl State { | ||||||
| 	fn skip_intro () -> Self { |  | ||||||
| 		let mut x = Self::default (); |  | ||||||
| 		x.step (""); |  | ||||||
| 		x.step (""); |  | ||||||
| 		
 |  | ||||||
| 		x |  | ||||||
| 	} |  | ||||||
| 	
 |  | ||||||
| 	/// Send a line of player input (e.g. "look table") into the game and return
 | 	/// Send a line of player input (e.g. "look table") into the game and return
 | ||||||
| 	/// a Vec of Responses. The runtime should process these responses in order.
 | 	/// a Vec of Responses. The runtime should process these responses in order.
 | ||||||
| 	
 | 	
 | ||||||
|  | @ -398,6 +390,14 @@ mod test { | ||||||
| 		State, | 		State, | ||||||
| 	}; | 	}; | ||||||
| 	
 | 	
 | ||||||
|  | 	fn skip_intro () -> State { | ||||||
|  | 		let mut x = State::default (); | ||||||
|  | 		x.step (""); | ||||||
|  | 		x.step (""); | ||||||
|  | 		
 | ||||||
|  | 		x | ||||||
|  | 	} | ||||||
|  | 	
 | ||||||
| 	#[test] | 	#[test] | ||||||
| 	fn parse_input () { | 	fn parse_input () { | ||||||
| 		use super::{ | 		use super::{ | ||||||
|  | @ -424,7 +424,7 @@ mod test { | ||||||
| 	
 | 	
 | ||||||
| 	#[test] | 	#[test] | ||||||
| 	fn joke_ending () { | 	fn joke_ending () { | ||||||
| 		let mut state = State::skip_intro (); | 		let mut state = skip_intro (); | ||||||
| 		
 | 		
 | ||||||
| 		let responses = state.step ("use emergency exit"); | 		let responses = state.step ("use emergency exit"); | ||||||
| 		
 | 		
 | ||||||
|  | @ -434,7 +434,7 @@ mod test { | ||||||
| 	
 | 	
 | ||||||
| 	#[test] | 	#[test] | ||||||
| 	fn detection_check () { | 	fn detection_check () { | ||||||
| 		let mut state = State::skip_intro (); | 		let mut state = skip_intro (); | ||||||
| 		
 | 		
 | ||||||
| 		let responses = state.step ("look keypad"); | 		let responses = state.step ("look keypad"); | ||||||
| 		assert! (responses.contains (&Response::FailedDetectionCheck)); | 		assert! (responses.contains (&Response::FailedDetectionCheck)); | ||||||
|  | @ -447,7 +447,7 @@ mod test { | ||||||
| 	
 | 	
 | ||||||
| 	#[test] | 	#[test] | ||||||
| 	fn happy_path () { | 	fn happy_path () { | ||||||
| 		let mut state = State::skip_intro (); | 		let mut state = skip_intro (); | ||||||
| 		
 | 		
 | ||||||
| 		for line in [ | 		for line in [ | ||||||
| 			"look table", | 			"look table", | ||||||
|  |  | ||||||
|  | @ -0,0 +1,13 @@ | ||||||
|  | [package] | ||||||
|  | name = "kajam_10_telnet" | ||||||
|  | version = "0.1.0" | ||||||
|  | edition = "2021" | ||||||
|  | 
 | ||||||
|  | [dependencies] | ||||||
|  | anyhow = "1.0.44" | ||||||
|  | rusty_ulid = "0.11.0" | ||||||
|  | tokio = { version = "1.12.0", features = ["full"] } | ||||||
|  | tracing = "0.1.29" | ||||||
|  | tracing-subscriber = { version = "0.3.0", features = ["env-filter"] } | ||||||
|  | 
 | ||||||
|  | kajam_10_game = { path = "../game" } | ||||||
|  | @ -0,0 +1,140 @@ | ||||||
|  | use anyhow::{ | ||||||
|  | 	Context, | ||||||
|  | }; | ||||||
|  | 
 | ||||||
|  | use tokio::{ | ||||||
|  | 	io::{ | ||||||
|  | 		AsyncReadExt, | ||||||
|  | 		AsyncWrite, | ||||||
|  | 		AsyncWriteExt, | ||||||
|  | 	}, | ||||||
|  | 	net::{ | ||||||
|  | 		TcpListener, | ||||||
|  | 		TcpStream, | ||||||
|  | 	}, | ||||||
|  | }; | ||||||
|  | 
 | ||||||
|  | use tracing_subscriber::{ | ||||||
|  | 	fmt, 
 | ||||||
|  | 	fmt::format::FmtSpan, | ||||||
|  | 	EnvFilter, | ||||||
|  | }; | ||||||
|  | 
 | ||||||
|  | async fn print <T: AsyncWrite + Unpin> (socket: &mut T, mut s: &str) -> std::io::Result <()> { | ||||||
|  | 	const COLS: usize = 80; | ||||||
|  | 	
 | ||||||
|  | 	while s.len () > COLS { | ||||||
|  | 		socket.write_all (format! ("{}\n", &s [0..80]).as_bytes ()).await?; | ||||||
|  | 		s = &s [80..]; | ||||||
|  | 	} | ||||||
|  | 	
 | ||||||
|  | 	socket.write_all (format! ("{}\n", s).as_bytes ()).await?; | ||||||
|  | 	
 | ||||||
|  | 	Ok (()) | ||||||
|  | } | ||||||
|  | 
 | ||||||
|  | async fn read_input <R: AsyncReadExt + Unpin, W: AsyncWrite + Unpin> ( | ||||||
|  | 	read: &mut R, write: &mut W | ||||||
|  | ) -> anyhow::Result <String> 
 | ||||||
|  | { | ||||||
|  | 	write.write_all (b"> ").await?; | ||||||
|  | 	write.flush ().await?; | ||||||
|  | 	
 | ||||||
|  | 	let mut buffer = Vec::with_capacity (80); | ||||||
|  | 	for _ in 0..80 { | ||||||
|  | 		let b = read.read_u8 ().await?; | ||||||
|  | 		buffer.push (b); | ||||||
|  | 		if b == b'\n' { | ||||||
|  | 			break; | ||||||
|  | 		} | ||||||
|  | 	} | ||||||
|  | 	
 | ||||||
|  | 	let buffer = String::from_utf8 (buffer)?; | ||||||
|  | 	
 | ||||||
|  | 	// I don't know why I need the type annotation here, but I do.
 | ||||||
|  | 	let x: &[_] = &['\r', '\n']; | ||||||
|  | 	let buffer = buffer.trim_end_matches (x).to_string (); | ||||||
|  | 	
 | ||||||
|  | 	Ok (buffer) | ||||||
|  | } | ||||||
|  | 
 | ||||||
|  | async fn sleep (ms: u32) { | ||||||
|  | 	tokio::time::sleep (std::time::Duration::from_millis (ms.into ())).await; | ||||||
|  | } | ||||||
|  | 
 | ||||||
|  | async fn process_socket (socket: TcpStream, id: &str) 
 | ||||||
|  | -> anyhow::Result <()> 
 | ||||||
|  | { | ||||||
|  | 	use kajam_10_game::Response; | ||||||
|  | 	
 | ||||||
|  | 	let mut seq = 0; | ||||||
|  | 	let (mut read, mut write) = socket.into_split (); | ||||||
|  | 	
 | ||||||
|  | 	let mut state = kajam_10_game::State::default (); | ||||||
|  | 	let responses = state.step (""); | ||||||
|  | 	
 | ||||||
|  | 	for response in responses.into_iter () { | ||||||
|  | 		match response { | ||||||
|  | 			Response::Print (line) => print (&mut write, &line).await?, | ||||||
|  | 			Response::PrintMany (lines) => { | ||||||
|  | 				for line in lines { | ||||||
|  | 					print (&mut write, line).await?; | ||||||
|  | 				} | ||||||
|  | 			}, | ||||||
|  | 			Response::Sleep (x) => sleep (x).await, | ||||||
|  | 			_ => (), | ||||||
|  | 		} | ||||||
|  | 	} | ||||||
|  | 	
 | ||||||
|  | 	'main_loop: loop { | ||||||
|  | 		let input = read_input (&mut read, &mut write).await.context ("couldn't get player input")?; | ||||||
|  | 		tracing::debug! ("Processing input {} from connection {}", seq, id); | ||||||
|  | 		seq += 1; | ||||||
|  | 		let responses = state.step (&input); | ||||||
|  | 		
 | ||||||
|  | 		for response in responses.into_iter () { | ||||||
|  | 			match response { | ||||||
|  | 				Response::Print (line) => print (&mut write, &line).await?, | ||||||
|  | 				Response::PrintMany (lines) => { | ||||||
|  | 					for line in lines { | ||||||
|  | 						print (&mut write, line).await?; | ||||||
|  | 					} | ||||||
|  | 				}, | ||||||
|  | 				Response::Sleep (x) => sleep (x).await, | ||||||
|  | 				Response::PlayerVictory => tracing::info! ("Connection {} beat the game", id), | ||||||
|  | 				Response::Quit => break 'main_loop, | ||||||
|  | 				_ => (), | ||||||
|  | 			} | ||||||
|  | 		} | ||||||
|  | 	} | ||||||
|  | 	
 | ||||||
|  | 	Ok (()) | ||||||
|  | } | ||||||
|  | 
 | ||||||
|  | #[tokio::main] | ||||||
|  | async fn main () -> std::io::Result <()> { | ||||||
|  | 	fmt () | ||||||
|  | 		.with_env_filter (EnvFilter::from_default_env ()) | ||||||
|  | 		.with_span_events (FmtSpan::CLOSE) | ||||||
|  | 		.init () | ||||||
|  | 	; | ||||||
|  | 	
 | ||||||
|  | 	let listen_addr = "0.0.0.0:2300"; | ||||||
|  | 	
 | ||||||
|  | 	let listener = TcpListener::bind (listen_addr).await?; | ||||||
|  | 	
 | ||||||
|  | 	tracing::debug! ("Listening on TCP {}", listen_addr); | ||||||
|  | 	
 | ||||||
|  | 	loop { | ||||||
|  |         let (socket, addr) = listener.accept ().await?; | ||||||
|  |         let ulid_string = rusty_ulid::generate_ulid_string (); | ||||||
|  |         tracing::info! ("Accepted connection {} from {}", ulid_string, addr); | ||||||
|  |         
 | ||||||
|  |         tokio::spawn (async move { | ||||||
|  | 			if let Err (e) = process_socket (socket, &ulid_string).await { | ||||||
|  | 				tracing::error! ("Error in connection {}: {:?}", ulid_string, e); | ||||||
|  | 			} | ||||||
|  | 			tracing::debug! ("Ended connection {}", ulid_string); | ||||||
|  | 		}); | ||||||
|  |     } | ||||||
|  | } | ||||||
		Loading…
	
		Reference in New Issue
	
	 _
						_