From c846031aa33cbdc180c722aa45d3a3eb0699675f Mon Sep 17 00:00:00 2001 From: ajuvercr Date: Fri, 15 Nov 2019 19:01:44 +0100 Subject: [PATCH] make planetwars great again --- backend/Cargo.toml | 3 + backend/log.log | 24 +++++++ backend/src/main.rs | 105 ++++++++++++++++++++------- backend/src/planetwars/mod.rs | 1 + client/src/main.rs | 132 +++++++++++++++++----------------- 5 files changed, 177 insertions(+), 88 deletions(-) diff --git a/backend/Cargo.toml b/backend/Cargo.toml index 66d3b3d..31a9be4 100644 --- a/backend/Cargo.toml +++ b/backend/Cargo.toml @@ -14,3 +14,6 @@ futures = "0.1.28" serde = "1.0.100" serde_derive = "1.0.100" serde_json = "1.0" +tracing = "0.1.9" +tracing-futures = "0.1.0" +tracing-subscriber = "0.1.5" diff --git a/backend/log.log b/backend/log.log index e69de29..98a33d3 100644 --- a/backend/log.log +++ b/backend/log.log @@ -0,0 +1,24 @@ +{"planets":[{"ship_count":7,"x":-6.0,"y":0.0,"owner":1,"name":"protos"},{"ship_count":6,"x":-3.0,"y":5.0,"owner":null,"name":"duteros"},{"ship_count":6,"x":3.0,"y":5.0,"owner":null,"name":"tritos"},{"ship_count":7,"x":6.0,"y":0.0,"owner":2,"name":"tetartos"},{"ship_count":6,"x":3.0,"y":-5.0,"owner":null,"name":"pemptos"},{"ship_count":6,"x":-3.0,"y":-5.0,"owner":null,"name":"extos"}],"expeditions":[]} +{"planets":[{"ship_count":2,"x":-6.0,"y":0.0,"owner":1,"name":"protos"},{"ship_count":6,"x":-3.0,"y":5.0,"owner":null,"name":"duteros"},{"ship_count":6,"x":3.0,"y":5.0,"owner":null,"name":"tritos"},{"ship_count":2,"x":6.0,"y":0.0,"owner":2,"name":"tetartos"},{"ship_count":6,"x":3.0,"y":-5.0,"owner":null,"name":"pemptos"},{"ship_count":6,"x":-3.0,"y":-5.0,"owner":null,"name":"extos"}],"expeditions":[{"id":0,"ship_count":6,"origin":"tetartos","destination":"duteros","owner":2,"turns_remaining":10},{"id":1,"ship_count":6,"origin":"protos","destination":"duteros","owner":1,"turns_remaining":5}]} +{"planets":[{"ship_count":2,"x":-6.0,"y":0.0,"owner":1,"name":"protos"},{"ship_count":6,"x":-3.0,"y":5.0,"owner":null,"name":"duteros"},{"ship_count":6,"x":3.0,"y":5.0,"owner":null,"name":"tritos"},{"ship_count":2,"x":6.0,"y":0.0,"owner":2,"name":"tetartos"},{"ship_count":6,"x":3.0,"y":-5.0,"owner":null,"name":"pemptos"},{"ship_count":6,"x":-3.0,"y":-5.0,"owner":null,"name":"extos"}],"expeditions":[{"id":0,"ship_count":6,"origin":"tetartos","destination":"duteros","owner":2,"turns_remaining":9},{"id":1,"ship_count":6,"origin":"protos","destination":"duteros","owner":1,"turns_remaining":4},{"id":2,"ship_count":1,"origin":"tetartos","destination":"protos","owner":2,"turns_remaining":11},{"id":3,"ship_count":1,"origin":"protos","destination":"tetartos","owner":1,"turns_remaining":11}]} +{"planets":[{"ship_count":2,"x":-6.0,"y":0.0,"owner":1,"name":"protos"},{"ship_count":6,"x":-3.0,"y":5.0,"owner":null,"name":"duteros"},{"ship_count":6,"x":3.0,"y":5.0,"owner":null,"name":"tritos"},{"ship_count":2,"x":6.0,"y":0.0,"owner":2,"name":"tetartos"},{"ship_count":6,"x":3.0,"y":-5.0,"owner":null,"name":"pemptos"},{"ship_count":6,"x":-3.0,"y":-5.0,"owner":null,"name":"extos"}],"expeditions":[{"id":0,"ship_count":6,"origin":"tetartos","destination":"duteros","owner":2,"turns_remaining":8},{"id":1,"ship_count":6,"origin":"protos","destination":"duteros","owner":1,"turns_remaining":3},{"id":2,"ship_count":1,"origin":"tetartos","destination":"protos","owner":2,"turns_remaining":10},{"id":3,"ship_count":1,"origin":"protos","destination":"tetartos","owner":1,"turns_remaining":10},{"id":4,"ship_count":1,"origin":"tetartos","destination":"protos","owner":2,"turns_remaining":11},{"id":5,"ship_count":1,"origin":"protos","destination":"tetartos","owner":1,"turns_remaining":11}]} +{"planets":[{"ship_count":2,"x":-6.0,"y":0.0,"owner":1,"name":"protos"},{"ship_count":6,"x":-3.0,"y":5.0,"owner":null,"name":"duteros"},{"ship_count":6,"x":3.0,"y":5.0,"owner":null,"name":"tritos"},{"ship_count":2,"x":6.0,"y":0.0,"owner":2,"name":"tetartos"},{"ship_count":6,"x":3.0,"y":-5.0,"owner":null,"name":"pemptos"},{"ship_count":6,"x":-3.0,"y":-5.0,"owner":null,"name":"extos"}],"expeditions":[{"id":0,"ship_count":6,"origin":"tetartos","destination":"duteros","owner":2,"turns_remaining":7},{"id":1,"ship_count":6,"origin":"protos","destination":"duteros","owner":1,"turns_remaining":2},{"id":2,"ship_count":1,"origin":"tetartos","destination":"protos","owner":2,"turns_remaining":9},{"id":3,"ship_count":1,"origin":"protos","destination":"tetartos","owner":1,"turns_remaining":9},{"id":4,"ship_count":1,"origin":"tetartos","destination":"protos","owner":2,"turns_remaining":10},{"id":5,"ship_count":1,"origin":"protos","destination":"tetartos","owner":1,"turns_remaining":10},{"id":6,"ship_count":1,"origin":"tetartos","destination":"protos","owner":2,"turns_remaining":11},{"id":7,"ship_count":1,"origin":"protos","destination":"tetartos","owner":1,"turns_remaining":11}]} +{"planets":[{"ship_count":2,"x":-6.0,"y":0.0,"owner":1,"name":"protos"},{"ship_count":6,"x":-3.0,"y":5.0,"owner":null,"name":"duteros"},{"ship_count":6,"x":3.0,"y":5.0,"owner":null,"name":"tritos"},{"ship_count":2,"x":6.0,"y":0.0,"owner":2,"name":"tetartos"},{"ship_count":6,"x":3.0,"y":-5.0,"owner":null,"name":"pemptos"},{"ship_count":6,"x":-3.0,"y":-5.0,"owner":null,"name":"extos"}],"expeditions":[{"id":0,"ship_count":6,"origin":"tetartos","destination":"duteros","owner":2,"turns_remaining":6},{"id":1,"ship_count":6,"origin":"protos","destination":"duteros","owner":1,"turns_remaining":1},{"id":2,"ship_count":1,"origin":"tetartos","destination":"protos","owner":2,"turns_remaining":8},{"id":3,"ship_count":1,"origin":"protos","destination":"tetartos","owner":1,"turns_remaining":8},{"id":4,"ship_count":1,"origin":"tetartos","destination":"protos","owner":2,"turns_remaining":9},{"id":5,"ship_count":1,"origin":"protos","destination":"tetartos","owner":1,"turns_remaining":9},{"id":6,"ship_count":1,"origin":"tetartos","destination":"protos","owner":2,"turns_remaining":10},{"id":7,"ship_count":1,"origin":"protos","destination":"tetartos","owner":1,"turns_remaining":10},{"id":8,"ship_count":1,"origin":"tetartos","destination":"protos","owner":2,"turns_remaining":11},{"id":9,"ship_count":1,"origin":"protos","destination":"tetartos","owner":1,"turns_remaining":11}]} +{"planets":[{"ship_count":2,"x":-6.0,"y":0.0,"owner":1,"name":"protos"},{"ship_count":0,"x":-3.0,"y":5.0,"owner":null,"name":"duteros"},{"ship_count":6,"x":3.0,"y":5.0,"owner":null,"name":"tritos"},{"ship_count":2,"x":6.0,"y":0.0,"owner":2,"name":"tetartos"},{"ship_count":6,"x":3.0,"y":-5.0,"owner":null,"name":"pemptos"},{"ship_count":6,"x":-3.0,"y":-5.0,"owner":null,"name":"extos"}],"expeditions":[{"id":0,"ship_count":6,"origin":"tetartos","destination":"duteros","owner":2,"turns_remaining":5},{"id":11,"ship_count":1,"origin":"protos","destination":"tetartos","owner":1,"turns_remaining":11},{"id":2,"ship_count":1,"origin":"tetartos","destination":"protos","owner":2,"turns_remaining":7},{"id":3,"ship_count":1,"origin":"protos","destination":"tetartos","owner":1,"turns_remaining":7},{"id":4,"ship_count":1,"origin":"tetartos","destination":"protos","owner":2,"turns_remaining":8},{"id":5,"ship_count":1,"origin":"protos","destination":"tetartos","owner":1,"turns_remaining":8},{"id":6,"ship_count":1,"origin":"tetartos","destination":"protos","owner":2,"turns_remaining":9},{"id":7,"ship_count":1,"origin":"protos","destination":"tetartos","owner":1,"turns_remaining":9},{"id":8,"ship_count":1,"origin":"tetartos","destination":"protos","owner":2,"turns_remaining":10},{"id":9,"ship_count":1,"origin":"protos","destination":"tetartos","owner":1,"turns_remaining":10},{"id":10,"ship_count":1,"origin":"tetartos","destination":"protos","owner":2,"turns_remaining":11}]} +{"planets":[{"ship_count":2,"x":-6.0,"y":0.0,"owner":1,"name":"protos"},{"ship_count":0,"x":-3.0,"y":5.0,"owner":null,"name":"duteros"},{"ship_count":6,"x":3.0,"y":5.0,"owner":null,"name":"tritos"},{"ship_count":2,"x":6.0,"y":0.0,"owner":2,"name":"tetartos"},{"ship_count":6,"x":3.0,"y":-5.0,"owner":null,"name":"pemptos"},{"ship_count":6,"x":-3.0,"y":-5.0,"owner":null,"name":"extos"}],"expeditions":[{"id":0,"ship_count":6,"origin":"tetartos","destination":"duteros","owner":2,"turns_remaining":4},{"id":11,"ship_count":1,"origin":"protos","destination":"tetartos","owner":1,"turns_remaining":10},{"id":2,"ship_count":1,"origin":"tetartos","destination":"protos","owner":2,"turns_remaining":6},{"id":3,"ship_count":1,"origin":"protos","destination":"tetartos","owner":1,"turns_remaining":6},{"id":4,"ship_count":1,"origin":"tetartos","destination":"protos","owner":2,"turns_remaining":7},{"id":5,"ship_count":1,"origin":"protos","destination":"tetartos","owner":1,"turns_remaining":7},{"id":6,"ship_count":1,"origin":"tetartos","destination":"protos","owner":2,"turns_remaining":8},{"id":7,"ship_count":1,"origin":"protos","destination":"tetartos","owner":1,"turns_remaining":8},{"id":8,"ship_count":1,"origin":"tetartos","destination":"protos","owner":2,"turns_remaining":9},{"id":9,"ship_count":1,"origin":"protos","destination":"tetartos","owner":1,"turns_remaining":9},{"id":10,"ship_count":1,"origin":"tetartos","destination":"protos","owner":2,"turns_remaining":10},{"id":12,"ship_count":1,"origin":"tetartos","destination":"duteros","owner":2,"turns_remaining":10},{"id":13,"ship_count":1,"origin":"protos","destination":"duteros","owner":1,"turns_remaining":5}]} +{"planets":[{"ship_count":2,"x":-6.0,"y":0.0,"owner":1,"name":"protos"},{"ship_count":0,"x":-3.0,"y":5.0,"owner":null,"name":"duteros"},{"ship_count":6,"x":3.0,"y":5.0,"owner":null,"name":"tritos"},{"ship_count":2,"x":6.0,"y":0.0,"owner":2,"name":"tetartos"},{"ship_count":6,"x":3.0,"y":-5.0,"owner":null,"name":"pemptos"},{"ship_count":6,"x":-3.0,"y":-5.0,"owner":null,"name":"extos"}],"expeditions":[{"id":0,"ship_count":6,"origin":"tetartos","destination":"duteros","owner":2,"turns_remaining":3},{"id":11,"ship_count":1,"origin":"protos","destination":"tetartos","owner":1,"turns_remaining":9},{"id":2,"ship_count":1,"origin":"tetartos","destination":"protos","owner":2,"turns_remaining":5},{"id":3,"ship_count":1,"origin":"protos","destination":"tetartos","owner":1,"turns_remaining":5},{"id":4,"ship_count":1,"origin":"tetartos","destination":"protos","owner":2,"turns_remaining":6},{"id":5,"ship_count":1,"origin":"protos","destination":"tetartos","owner":1,"turns_remaining":6},{"id":6,"ship_count":1,"origin":"tetartos","destination":"protos","owner":2,"turns_remaining":7},{"id":7,"ship_count":1,"origin":"protos","destination":"tetartos","owner":1,"turns_remaining":7},{"id":8,"ship_count":1,"origin":"tetartos","destination":"protos","owner":2,"turns_remaining":8},{"id":9,"ship_count":1,"origin":"protos","destination":"tetartos","owner":1,"turns_remaining":8},{"id":10,"ship_count":1,"origin":"tetartos","destination":"protos","owner":2,"turns_remaining":9},{"id":12,"ship_count":1,"origin":"tetartos","destination":"duteros","owner":2,"turns_remaining":9},{"id":13,"ship_count":1,"origin":"protos","destination":"duteros","owner":1,"turns_remaining":4},{"id":14,"ship_count":1,"origin":"tetartos","destination":"duteros","owner":2,"turns_remaining":10},{"id":15,"ship_count":1,"origin":"protos","destination":"duteros","owner":1,"turns_remaining":5}]} +{"planets":[{"ship_count":2,"x":-6.0,"y":0.0,"owner":1,"name":"protos"},{"ship_count":0,"x":-3.0,"y":5.0,"owner":null,"name":"duteros"},{"ship_count":6,"x":3.0,"y":5.0,"owner":null,"name":"tritos"},{"ship_count":2,"x":6.0,"y":0.0,"owner":2,"name":"tetartos"},{"ship_count":6,"x":3.0,"y":-5.0,"owner":null,"name":"pemptos"},{"ship_count":6,"x":-3.0,"y":-5.0,"owner":null,"name":"extos"}],"expeditions":[{"id":0,"ship_count":6,"origin":"tetartos","destination":"duteros","owner":2,"turns_remaining":2},{"id":11,"ship_count":1,"origin":"protos","destination":"tetartos","owner":1,"turns_remaining":8},{"id":2,"ship_count":1,"origin":"tetartos","destination":"protos","owner":2,"turns_remaining":4},{"id":3,"ship_count":1,"origin":"protos","destination":"tetartos","owner":1,"turns_remaining":4},{"id":4,"ship_count":1,"origin":"tetartos","destination":"protos","owner":2,"turns_remaining":5},{"id":5,"ship_count":1,"origin":"protos","destination":"tetartos","owner":1,"turns_remaining":5},{"id":6,"ship_count":1,"origin":"tetartos","destination":"protos","owner":2,"turns_remaining":6},{"id":7,"ship_count":1,"origin":"protos","destination":"tetartos","owner":1,"turns_remaining":6},{"id":8,"ship_count":1,"origin":"tetartos","destination":"protos","owner":2,"turns_remaining":7},{"id":9,"ship_count":1,"origin":"protos","destination":"tetartos","owner":1,"turns_remaining":7},{"id":10,"ship_count":1,"origin":"tetartos","destination":"protos","owner":2,"turns_remaining":8},{"id":12,"ship_count":1,"origin":"tetartos","destination":"duteros","owner":2,"turns_remaining":8},{"id":13,"ship_count":1,"origin":"protos","destination":"duteros","owner":1,"turns_remaining":3},{"id":14,"ship_count":1,"origin":"tetartos","destination":"duteros","owner":2,"turns_remaining":9},{"id":15,"ship_count":1,"origin":"protos","destination":"duteros","owner":1,"turns_remaining":4},{"id":16,"ship_count":1,"origin":"tetartos","destination":"duteros","owner":2,"turns_remaining":10},{"id":17,"ship_count":1,"origin":"protos","destination":"duteros","owner":1,"turns_remaining":5}]} +{"planets":[{"ship_count":2,"x":-6.0,"y":0.0,"owner":1,"name":"protos"},{"ship_count":0,"x":-3.0,"y":5.0,"owner":null,"name":"duteros"},{"ship_count":6,"x":3.0,"y":5.0,"owner":null,"name":"tritos"},{"ship_count":2,"x":6.0,"y":0.0,"owner":2,"name":"tetartos"},{"ship_count":6,"x":3.0,"y":-5.0,"owner":null,"name":"pemptos"},{"ship_count":6,"x":-3.0,"y":-5.0,"owner":null,"name":"extos"}],"expeditions":[{"id":0,"ship_count":6,"origin":"tetartos","destination":"duteros","owner":2,"turns_remaining":1},{"id":11,"ship_count":1,"origin":"protos","destination":"tetartos","owner":1,"turns_remaining":7},{"id":2,"ship_count":1,"origin":"tetartos","destination":"protos","owner":2,"turns_remaining":3},{"id":3,"ship_count":1,"origin":"protos","destination":"tetartos","owner":1,"turns_remaining":3},{"id":4,"ship_count":1,"origin":"tetartos","destination":"protos","owner":2,"turns_remaining":4},{"id":5,"ship_count":1,"origin":"protos","destination":"tetartos","owner":1,"turns_remaining":4},{"id":6,"ship_count":1,"origin":"tetartos","destination":"protos","owner":2,"turns_remaining":5},{"id":7,"ship_count":1,"origin":"protos","destination":"tetartos","owner":1,"turns_remaining":5},{"id":8,"ship_count":1,"origin":"tetartos","destination":"protos","owner":2,"turns_remaining":6},{"id":9,"ship_count":1,"origin":"protos","destination":"tetartos","owner":1,"turns_remaining":6},{"id":10,"ship_count":1,"origin":"tetartos","destination":"protos","owner":2,"turns_remaining":7},{"id":12,"ship_count":1,"origin":"tetartos","destination":"duteros","owner":2,"turns_remaining":7},{"id":13,"ship_count":1,"origin":"protos","destination":"duteros","owner":1,"turns_remaining":2},{"id":14,"ship_count":1,"origin":"tetartos","destination":"duteros","owner":2,"turns_remaining":8},{"id":15,"ship_count":1,"origin":"protos","destination":"duteros","owner":1,"turns_remaining":3},{"id":16,"ship_count":1,"origin":"tetartos","destination":"duteros","owner":2,"turns_remaining":9},{"id":17,"ship_count":1,"origin":"protos","destination":"duteros","owner":1,"turns_remaining":4},{"id":18,"ship_count":1,"origin":"tetartos","destination":"duteros","owner":2,"turns_remaining":10},{"id":19,"ship_count":1,"origin":"protos","destination":"duteros","owner":1,"turns_remaining":5}]} +{"planets":[{"ship_count":2,"x":-6.0,"y":0.0,"owner":1,"name":"protos"},{"ship_count":6,"x":-3.0,"y":5.0,"owner":2,"name":"duteros"},{"ship_count":6,"x":3.0,"y":5.0,"owner":null,"name":"tritos"},{"ship_count":2,"x":6.0,"y":0.0,"owner":2,"name":"tetartos"},{"ship_count":6,"x":3.0,"y":-5.0,"owner":null,"name":"pemptos"},{"ship_count":6,"x":-3.0,"y":-5.0,"owner":null,"name":"extos"}],"expeditions":[{"id":21,"ship_count":1,"origin":"protos","destination":"duteros","owner":1,"turns_remaining":5},{"id":11,"ship_count":1,"origin":"protos","destination":"tetartos","owner":1,"turns_remaining":6},{"id":2,"ship_count":1,"origin":"tetartos","destination":"protos","owner":2,"turns_remaining":2},{"id":3,"ship_count":1,"origin":"protos","destination":"tetartos","owner":1,"turns_remaining":2},{"id":4,"ship_count":1,"origin":"tetartos","destination":"protos","owner":2,"turns_remaining":3},{"id":5,"ship_count":1,"origin":"protos","destination":"tetartos","owner":1,"turns_remaining":3},{"id":6,"ship_count":1,"origin":"tetartos","destination":"protos","owner":2,"turns_remaining":4},{"id":7,"ship_count":1,"origin":"protos","destination":"tetartos","owner":1,"turns_remaining":4},{"id":8,"ship_count":1,"origin":"tetartos","destination":"protos","owner":2,"turns_remaining":5},{"id":9,"ship_count":1,"origin":"protos","destination":"tetartos","owner":1,"turns_remaining":5},{"id":10,"ship_count":1,"origin":"tetartos","destination":"protos","owner":2,"turns_remaining":6},{"id":12,"ship_count":1,"origin":"tetartos","destination":"duteros","owner":2,"turns_remaining":6},{"id":13,"ship_count":1,"origin":"protos","destination":"duteros","owner":1,"turns_remaining":1},{"id":14,"ship_count":1,"origin":"tetartos","destination":"duteros","owner":2,"turns_remaining":7},{"id":15,"ship_count":1,"origin":"protos","destination":"duteros","owner":1,"turns_remaining":2},{"id":16,"ship_count":1,"origin":"tetartos","destination":"duteros","owner":2,"turns_remaining":8},{"id":17,"ship_count":1,"origin":"protos","destination":"duteros","owner":1,"turns_remaining":3},{"id":18,"ship_count":1,"origin":"tetartos","destination":"duteros","owner":2,"turns_remaining":9},{"id":19,"ship_count":1,"origin":"protos","destination":"duteros","owner":1,"turns_remaining":4},{"id":20,"ship_count":1,"origin":"tetartos","destination":"duteros","owner":2,"turns_remaining":10}]} +{"planets":[{"ship_count":2,"x":-6.0,"y":0.0,"owner":1,"name":"protos"},{"ship_count":1,"x":-3.0,"y":5.0,"owner":2,"name":"duteros"},{"ship_count":6,"x":3.0,"y":5.0,"owner":null,"name":"tritos"},{"ship_count":3,"x":6.0,"y":0.0,"owner":2,"name":"tetartos"},{"ship_count":6,"x":3.0,"y":-5.0,"owner":null,"name":"pemptos"},{"ship_count":6,"x":-3.0,"y":-5.0,"owner":null,"name":"extos"}],"expeditions":[{"id":21,"ship_count":1,"origin":"protos","destination":"duteros","owner":1,"turns_remaining":4},{"id":11,"ship_count":1,"origin":"protos","destination":"tetartos","owner":1,"turns_remaining":5},{"id":2,"ship_count":1,"origin":"tetartos","destination":"protos","owner":2,"turns_remaining":1},{"id":3,"ship_count":1,"origin":"protos","destination":"tetartos","owner":1,"turns_remaining":1},{"id":4,"ship_count":1,"origin":"tetartos","destination":"protos","owner":2,"turns_remaining":2},{"id":5,"ship_count":1,"origin":"protos","destination":"tetartos","owner":1,"turns_remaining":2},{"id":6,"ship_count":1,"origin":"tetartos","destination":"protos","owner":2,"turns_remaining":3},{"id":7,"ship_count":1,"origin":"protos","destination":"tetartos","owner":1,"turns_remaining":3},{"id":8,"ship_count":1,"origin":"tetartos","destination":"protos","owner":2,"turns_remaining":4},{"id":9,"ship_count":1,"origin":"protos","destination":"tetartos","owner":1,"turns_remaining":4},{"id":10,"ship_count":1,"origin":"tetartos","destination":"protos","owner":2,"turns_remaining":5},{"id":12,"ship_count":1,"origin":"tetartos","destination":"duteros","owner":2,"turns_remaining":5},{"id":23,"ship_count":1,"origin":"protos","destination":"tetartos","owner":1,"turns_remaining":11},{"id":14,"ship_count":1,"origin":"tetartos","destination":"duteros","owner":2,"turns_remaining":6},{"id":15,"ship_count":1,"origin":"protos","destination":"duteros","owner":1,"turns_remaining":1},{"id":16,"ship_count":1,"origin":"tetartos","destination":"duteros","owner":2,"turns_remaining":7},{"id":17,"ship_count":1,"origin":"protos","destination":"duteros","owner":1,"turns_remaining":2},{"id":18,"ship_count":1,"origin":"tetartos","destination":"duteros","owner":2,"turns_remaining":8},{"id":19,"ship_count":1,"origin":"protos","destination":"duteros","owner":1,"turns_remaining":3},{"id":20,"ship_count":1,"origin":"tetartos","destination":"duteros","owner":2,"turns_remaining":9},{"id":22,"ship_count":5,"origin":"duteros","destination":"protos","owner":2,"turns_remaining":5}]} +{"planets":[{"ship_count":1,"x":-6.0,"y":0.0,"owner":1,"name":"protos"},{"ship_count":1,"x":-3.0,"y":5.0,"owner":2,"name":"duteros"},{"ship_count":6,"x":3.0,"y":5.0,"owner":null,"name":"tritos"},{"ship_count":1,"x":6.0,"y":0.0,"owner":2,"name":"tetartos"},{"ship_count":6,"x":3.0,"y":-5.0,"owner":null,"name":"pemptos"},{"ship_count":6,"x":-3.0,"y":-5.0,"owner":null,"name":"extos"}],"expeditions":[{"id":21,"ship_count":1,"origin":"protos","destination":"duteros","owner":1,"turns_remaining":3},{"id":11,"ship_count":1,"origin":"protos","destination":"tetartos","owner":1,"turns_remaining":4},{"id":25,"ship_count":1,"origin":"protos","destination":"duteros","owner":1,"turns_remaining":5},{"id":24,"ship_count":2,"origin":"tetartos","destination":"protos","owner":2,"turns_remaining":11},{"id":4,"ship_count":1,"origin":"tetartos","destination":"protos","owner":2,"turns_remaining":1},{"id":5,"ship_count":1,"origin":"protos","destination":"tetartos","owner":1,"turns_remaining":1},{"id":6,"ship_count":1,"origin":"tetartos","destination":"protos","owner":2,"turns_remaining":2},{"id":7,"ship_count":1,"origin":"protos","destination":"tetartos","owner":1,"turns_remaining":2},{"id":8,"ship_count":1,"origin":"tetartos","destination":"protos","owner":2,"turns_remaining":3},{"id":9,"ship_count":1,"origin":"protos","destination":"tetartos","owner":1,"turns_remaining":3},{"id":10,"ship_count":1,"origin":"tetartos","destination":"protos","owner":2,"turns_remaining":4},{"id":12,"ship_count":1,"origin":"tetartos","destination":"duteros","owner":2,"turns_remaining":4},{"id":23,"ship_count":1,"origin":"protos","destination":"tetartos","owner":1,"turns_remaining":10},{"id":14,"ship_count":1,"origin":"tetartos","destination":"duteros","owner":2,"turns_remaining":5},{"id":22,"ship_count":5,"origin":"duteros","destination":"protos","owner":2,"turns_remaining":4},{"id":16,"ship_count":1,"origin":"tetartos","destination":"duteros","owner":2,"turns_remaining":6},{"id":17,"ship_count":1,"origin":"protos","destination":"duteros","owner":1,"turns_remaining":1},{"id":18,"ship_count":1,"origin":"tetartos","destination":"duteros","owner":2,"turns_remaining":7},{"id":19,"ship_count":1,"origin":"protos","destination":"duteros","owner":1,"turns_remaining":2},{"id":20,"ship_count":1,"origin":"tetartos","destination":"duteros","owner":2,"turns_remaining":8}]} +{"planets":[{"ship_count":1,"x":-6.0,"y":0.0,"owner":1,"name":"protos"},{"ship_count":1,"x":-3.0,"y":5.0,"owner":2,"name":"duteros"},{"ship_count":6,"x":3.0,"y":5.0,"owner":null,"name":"tritos"},{"ship_count":1,"x":6.0,"y":0.0,"owner":2,"name":"tetartos"},{"ship_count":6,"x":3.0,"y":-5.0,"owner":null,"name":"pemptos"},{"ship_count":6,"x":-3.0,"y":-5.0,"owner":null,"name":"extos"}],"expeditions":[{"id":21,"ship_count":1,"origin":"protos","destination":"duteros","owner":1,"turns_remaining":2},{"id":11,"ship_count":1,"origin":"protos","destination":"tetartos","owner":1,"turns_remaining":3},{"id":25,"ship_count":1,"origin":"protos","destination":"duteros","owner":1,"turns_remaining":4},{"id":24,"ship_count":2,"origin":"tetartos","destination":"protos","owner":2,"turns_remaining":10},{"id":20,"ship_count":1,"origin":"tetartos","destination":"duteros","owner":2,"turns_remaining":7},{"id":19,"ship_count":1,"origin":"protos","destination":"duteros","owner":1,"turns_remaining":1},{"id":6,"ship_count":1,"origin":"tetartos","destination":"protos","owner":2,"turns_remaining":1},{"id":7,"ship_count":1,"origin":"protos","destination":"tetartos","owner":1,"turns_remaining":1},{"id":8,"ship_count":1,"origin":"tetartos","destination":"protos","owner":2,"turns_remaining":2},{"id":9,"ship_count":1,"origin":"protos","destination":"tetartos","owner":1,"turns_remaining":2},{"id":10,"ship_count":1,"origin":"tetartos","destination":"protos","owner":2,"turns_remaining":3},{"id":12,"ship_count":1,"origin":"tetartos","destination":"duteros","owner":2,"turns_remaining":3},{"id":23,"ship_count":1,"origin":"protos","destination":"tetartos","owner":1,"turns_remaining":9},{"id":14,"ship_count":1,"origin":"tetartos","destination":"duteros","owner":2,"turns_remaining":4},{"id":22,"ship_count":5,"origin":"duteros","destination":"protos","owner":2,"turns_remaining":3},{"id":16,"ship_count":1,"origin":"tetartos","destination":"duteros","owner":2,"turns_remaining":5},{"id":18,"ship_count":1,"origin":"tetartos","destination":"duteros","owner":2,"turns_remaining":6}]} +{"planets":[{"ship_count":1,"x":-6.0,"y":0.0,"owner":1,"name":"protos"},{"ship_count":1,"x":-3.0,"y":5.0,"owner":2,"name":"duteros"},{"ship_count":6,"x":3.0,"y":5.0,"owner":null,"name":"tritos"},{"ship_count":1,"x":6.0,"y":0.0,"owner":2,"name":"tetartos"},{"ship_count":6,"x":3.0,"y":-5.0,"owner":null,"name":"pemptos"},{"ship_count":6,"x":-3.0,"y":-5.0,"owner":null,"name":"extos"}],"expeditions":[{"id":21,"ship_count":1,"origin":"protos","destination":"duteros","owner":1,"turns_remaining":1},{"id":11,"ship_count":1,"origin":"protos","destination":"tetartos","owner":1,"turns_remaining":2},{"id":25,"ship_count":1,"origin":"protos","destination":"duteros","owner":1,"turns_remaining":3},{"id":24,"ship_count":2,"origin":"tetartos","destination":"protos","owner":2,"turns_remaining":9},{"id":20,"ship_count":1,"origin":"tetartos","destination":"duteros","owner":2,"turns_remaining":6},{"id":18,"ship_count":1,"origin":"tetartos","destination":"duteros","owner":2,"turns_remaining":5},{"id":16,"ship_count":1,"origin":"tetartos","destination":"duteros","owner":2,"turns_remaining":4},{"id":22,"ship_count":5,"origin":"duteros","destination":"protos","owner":2,"turns_remaining":2},{"id":8,"ship_count":1,"origin":"tetartos","destination":"protos","owner":2,"turns_remaining":1},{"id":9,"ship_count":1,"origin":"protos","destination":"tetartos","owner":1,"turns_remaining":1},{"id":10,"ship_count":1,"origin":"tetartos","destination":"protos","owner":2,"turns_remaining":2},{"id":12,"ship_count":1,"origin":"tetartos","destination":"duteros","owner":2,"turns_remaining":2},{"id":23,"ship_count":1,"origin":"protos","destination":"tetartos","owner":1,"turns_remaining":8},{"id":14,"ship_count":1,"origin":"tetartos","destination":"duteros","owner":2,"turns_remaining":3}]} +{"planets":[{"ship_count":1,"x":-6.0,"y":0.0,"owner":1,"name":"protos"},{"ship_count":1,"x":-3.0,"y":5.0,"owner":2,"name":"duteros"},{"ship_count":6,"x":3.0,"y":5.0,"owner":null,"name":"tritos"},{"ship_count":1,"x":6.0,"y":0.0,"owner":2,"name":"tetartos"},{"ship_count":6,"x":3.0,"y":-5.0,"owner":null,"name":"pemptos"},{"ship_count":6,"x":-3.0,"y":-5.0,"owner":null,"name":"extos"}],"expeditions":[{"id":14,"ship_count":1,"origin":"tetartos","destination":"duteros","owner":2,"turns_remaining":2},{"id":11,"ship_count":1,"origin":"protos","destination":"tetartos","owner":1,"turns_remaining":1},{"id":25,"ship_count":1,"origin":"protos","destination":"duteros","owner":1,"turns_remaining":2},{"id":24,"ship_count":2,"origin":"tetartos","destination":"protos","owner":2,"turns_remaining":8},{"id":20,"ship_count":1,"origin":"tetartos","destination":"duteros","owner":2,"turns_remaining":5},{"id":18,"ship_count":1,"origin":"tetartos","destination":"duteros","owner":2,"turns_remaining":4},{"id":16,"ship_count":1,"origin":"tetartos","destination":"duteros","owner":2,"turns_remaining":3},{"id":22,"ship_count":5,"origin":"duteros","destination":"protos","owner":2,"turns_remaining":1},{"id":23,"ship_count":1,"origin":"protos","destination":"tetartos","owner":1,"turns_remaining":7},{"id":12,"ship_count":1,"origin":"tetartos","destination":"duteros","owner":2,"turns_remaining":1},{"id":10,"ship_count":1,"origin":"tetartos","destination":"protos","owner":2,"turns_remaining":1}]} +{"planets":[{"ship_count":4,"x":-6.0,"y":0.0,"owner":2,"name":"protos"},{"ship_count":3,"x":-3.0,"y":5.0,"owner":2,"name":"duteros"},{"ship_count":6,"x":3.0,"y":5.0,"owner":null,"name":"tritos"},{"ship_count":1,"x":6.0,"y":0.0,"owner":2,"name":"tetartos"},{"ship_count":6,"x":3.0,"y":-5.0,"owner":null,"name":"pemptos"},{"ship_count":6,"x":-3.0,"y":-5.0,"owner":null,"name":"extos"}],"expeditions":[{"id":14,"ship_count":1,"origin":"tetartos","destination":"duteros","owner":2,"turns_remaining":1},{"id":23,"ship_count":1,"origin":"protos","destination":"tetartos","owner":1,"turns_remaining":6},{"id":25,"ship_count":1,"origin":"protos","destination":"duteros","owner":1,"turns_remaining":1},{"id":24,"ship_count":2,"origin":"tetartos","destination":"protos","owner":2,"turns_remaining":7},{"id":20,"ship_count":1,"origin":"tetartos","destination":"duteros","owner":2,"turns_remaining":4},{"id":18,"ship_count":1,"origin":"tetartos","destination":"duteros","owner":2,"turns_remaining":3},{"id":16,"ship_count":1,"origin":"tetartos","destination":"duteros","owner":2,"turns_remaining":2}]} +{"planets":[{"ship_count":2,"x":-6.0,"y":0.0,"owner":2,"name":"protos"},{"ship_count":4,"x":-3.0,"y":5.0,"owner":2,"name":"duteros"},{"ship_count":6,"x":3.0,"y":5.0,"owner":null,"name":"tritos"},{"ship_count":2,"x":6.0,"y":0.0,"owner":2,"name":"tetartos"},{"ship_count":6,"x":3.0,"y":-5.0,"owner":null,"name":"pemptos"},{"ship_count":6,"x":-3.0,"y":-5.0,"owner":null,"name":"extos"}],"expeditions":[{"id":26,"ship_count":3,"origin":"protos","destination":"tritos","owner":2,"turns_remaining":10},{"id":23,"ship_count":1,"origin":"protos","destination":"tetartos","owner":1,"turns_remaining":5},{"id":16,"ship_count":1,"origin":"tetartos","destination":"duteros","owner":2,"turns_remaining":1},{"id":24,"ship_count":2,"origin":"tetartos","destination":"protos","owner":2,"turns_remaining":6},{"id":20,"ship_count":1,"origin":"tetartos","destination":"duteros","owner":2,"turns_remaining":3},{"id":18,"ship_count":1,"origin":"tetartos","destination":"duteros","owner":2,"turns_remaining":2}]} +{"planets":[{"ship_count":3,"x":-6.0,"y":0.0,"owner":2,"name":"protos"},{"ship_count":3,"x":-3.0,"y":5.0,"owner":2,"name":"duteros"},{"ship_count":6,"x":3.0,"y":5.0,"owner":null,"name":"tritos"},{"ship_count":3,"x":6.0,"y":0.0,"owner":2,"name":"tetartos"},{"ship_count":6,"x":3.0,"y":-5.0,"owner":null,"name":"pemptos"},{"ship_count":6,"x":-3.0,"y":-5.0,"owner":null,"name":"extos"}],"expeditions":[{"id":26,"ship_count":3,"origin":"protos","destination":"tritos","owner":2,"turns_remaining":9},{"id":23,"ship_count":1,"origin":"protos","destination":"tetartos","owner":1,"turns_remaining":4},{"id":27,"ship_count":3,"origin":"duteros","destination":"tritos","owner":2,"turns_remaining":5},{"id":24,"ship_count":2,"origin":"tetartos","destination":"protos","owner":2,"turns_remaining":5},{"id":20,"ship_count":1,"origin":"tetartos","destination":"duteros","owner":2,"turns_remaining":2},{"id":18,"ship_count":1,"origin":"tetartos","destination":"duteros","owner":2,"turns_remaining":1}]} +{"planets":[{"ship_count":2,"x":-6.0,"y":0.0,"owner":2,"name":"protos"},{"ship_count":5,"x":-3.0,"y":5.0,"owner":2,"name":"duteros"},{"ship_count":6,"x":3.0,"y":5.0,"owner":null,"name":"tritos"},{"ship_count":4,"x":6.0,"y":0.0,"owner":2,"name":"tetartos"},{"ship_count":6,"x":3.0,"y":-5.0,"owner":null,"name":"pemptos"},{"ship_count":6,"x":-3.0,"y":-5.0,"owner":null,"name":"extos"}],"expeditions":[{"id":26,"ship_count":3,"origin":"protos","destination":"tritos","owner":2,"turns_remaining":8},{"id":23,"ship_count":1,"origin":"protos","destination":"tetartos","owner":1,"turns_remaining":3},{"id":27,"ship_count":3,"origin":"duteros","destination":"tritos","owner":2,"turns_remaining":4},{"id":24,"ship_count":2,"origin":"tetartos","destination":"protos","owner":2,"turns_remaining":4},{"id":20,"ship_count":1,"origin":"tetartos","destination":"duteros","owner":2,"turns_remaining":1},{"id":28,"ship_count":2,"origin":"protos","destination":"tritos","owner":2,"turns_remaining":10}]} +{"planets":[{"ship_count":3,"x":-6.0,"y":0.0,"owner":2,"name":"protos"},{"ship_count":3,"x":-3.0,"y":5.0,"owner":2,"name":"duteros"},{"ship_count":6,"x":3.0,"y":5.0,"owner":null,"name":"tritos"},{"ship_count":5,"x":6.0,"y":0.0,"owner":2,"name":"tetartos"},{"ship_count":6,"x":3.0,"y":-5.0,"owner":null,"name":"pemptos"},{"ship_count":6,"x":-3.0,"y":-5.0,"owner":null,"name":"extos"}],"expeditions":[{"id":26,"ship_count":3,"origin":"protos","destination":"tritos","owner":2,"turns_remaining":7},{"id":23,"ship_count":1,"origin":"protos","destination":"tetartos","owner":1,"turns_remaining":2},{"id":27,"ship_count":3,"origin":"duteros","destination":"tritos","owner":2,"turns_remaining":3},{"id":24,"ship_count":2,"origin":"tetartos","destination":"protos","owner":2,"turns_remaining":3},{"id":29,"ship_count":4,"origin":"duteros","destination":"tritos","owner":2,"turns_remaining":5},{"id":28,"ship_count":2,"origin":"protos","destination":"tritos","owner":2,"turns_remaining":9}]} +{"planets":[{"ship_count":4,"x":-6.0,"y":0.0,"owner":2,"name":"protos"},{"ship_count":4,"x":-3.0,"y":5.0,"owner":2,"name":"duteros"},{"ship_count":6,"x":3.0,"y":5.0,"owner":null,"name":"tritos"},{"ship_count":2,"x":6.0,"y":0.0,"owner":2,"name":"tetartos"},{"ship_count":6,"x":3.0,"y":-5.0,"owner":null,"name":"pemptos"},{"ship_count":6,"x":-3.0,"y":-5.0,"owner":null,"name":"extos"}],"expeditions":[{"id":26,"ship_count":3,"origin":"protos","destination":"tritos","owner":2,"turns_remaining":6},{"id":23,"ship_count":1,"origin":"protos","destination":"tetartos","owner":1,"turns_remaining":1},{"id":27,"ship_count":3,"origin":"duteros","destination":"tritos","owner":2,"turns_remaining":2},{"id":24,"ship_count":2,"origin":"tetartos","destination":"protos","owner":2,"turns_remaining":2},{"id":29,"ship_count":4,"origin":"duteros","destination":"tritos","owner":2,"turns_remaining":4},{"id":28,"ship_count":2,"origin":"protos","destination":"tritos","owner":2,"turns_remaining":8},{"id":30,"ship_count":4,"origin":"tetartos","destination":"tritos","owner":2,"turns_remaining":5}]} +{"planets":[{"ship_count":2,"x":-6.0,"y":0.0,"owner":2,"name":"protos"},{"ship_count":5,"x":-3.0,"y":5.0,"owner":2,"name":"duteros"},{"ship_count":6,"x":3.0,"y":5.0,"owner":null,"name":"tritos"},{"ship_count":2,"x":6.0,"y":0.0,"owner":2,"name":"tetartos"},{"ship_count":6,"x":3.0,"y":-5.0,"owner":null,"name":"pemptos"},{"ship_count":6,"x":-3.0,"y":-5.0,"owner":null,"name":"extos"}],"expeditions":[{"id":26,"ship_count":3,"origin":"protos","destination":"tritos","owner":2,"turns_remaining":5},{"id":31,"ship_count":3,"origin":"protos","destination":"tritos","owner":2,"turns_remaining":10},{"id":27,"ship_count":3,"origin":"duteros","destination":"tritos","owner":2,"turns_remaining":1},{"id":24,"ship_count":2,"origin":"tetartos","destination":"protos","owner":2,"turns_remaining":1},{"id":29,"ship_count":4,"origin":"duteros","destination":"tritos","owner":2,"turns_remaining":3},{"id":28,"ship_count":2,"origin":"protos","destination":"tritos","owner":2,"turns_remaining":7},{"id":30,"ship_count":4,"origin":"tetartos","destination":"tritos","owner":2,"turns_remaining":4}]} diff --git a/backend/src/main.rs b/backend/src/main.rs index 8be06c1..e269527 100644 --- a/backend/src/main.rs +++ b/backend/src/main.rs @@ -3,18 +3,25 @@ extern crate serde; extern crate serde_derive; extern crate serde_json; -extern crate tokio; extern crate futures; extern crate mozaic; extern crate rand; +extern crate tokio; +extern crate tracing; +extern crate tracing_futures; +extern crate tracing_subscriber; + +use mozaic::errors; +use mozaic::messaging::types::*; use std::env; use std::net::SocketAddr; -use mozaic::messaging::types::*; -use mozaic::errors; -use mozaic::modules::{Aggregator, Steplock, game}; +use tracing::{span, Level}; +use tracing_futures::Instrument; +use tracing_subscriber::{fmt, EnvFilter}; +use mozaic::modules::{game, Aggregator, Steplock}; mod planetwars; @@ -24,22 +31,31 @@ fn main() { let name = args[0].clone(); match run(args) { None => print_info(&name), - _ => {}, + _ => {} }; } -use mozaic::runtime::{Broker}; -use rand::Rng; use errors::Consumable; -use mozaic::modules::ConnectionManager; use mozaic::modules::util; +use mozaic::modules::ConnectionManager; +use mozaic::runtime::Broker; +use rand::Rng; use std::collections::HashMap; fn print_info(name: &str) { - println!("Usage: {} map_location [number_of_clients [output [max_turns]]]", name); + println!( + "Usage: {} map_location [number_of_clients [output [max_turns]]]", + name + ); } -pub fn run(args : Vec) -> Option<()> { +pub fn run(args: Vec) -> Option<()> { + let subscriber = fmt::Subscriber::builder() + .with_env_filter(EnvFilter::try_from_default_env().unwrap_or(EnvFilter::from("info"))) + .without_time() + .inherit_fields(true) + .finish(); + let _ = tracing::subscriber::set_global_default(subscriber); let addr = "127.0.0.1:9142".parse::().unwrap(); @@ -49,14 +65,26 @@ pub fn run(args : Vec) -> Option<()> { let steplock_id: ReactorId = rand::thread_rng().gen(); let map = args.get(1)?; - let number_of_clients = args.get(2).map(|x| x.parse().expect("Client number should be a number")).unwrap_or(1); + let number_of_clients = args + .get(2) + .map(|x| x.parse().expect("Client number should be a number")) + .unwrap_or(1); let location = args.get(3).map(|x| x.as_str()).unwrap_or("game.json"); - let max_turns = args.get(4).map(|x| x.parse().expect("Max turns should be a number")).unwrap_or(500); + let max_turns = args + .get(4) + .map(|x| x.parse().expect("Max turns should be a number")) + .unwrap_or(500); - let ids: HashMap = (0..number_of_clients).map(|x| (rand::thread_rng().gen::().into(), x.into())).collect(); + let ids: HashMap = (0..number_of_clients) + .map(|x| (rand::thread_rng().gen::().into(), x.into())) + .collect(); - let config = planetwars::Config { map_file: map.to_string(), max_turns: max_turns }; - let game = planetwars::PlanetWarsGame::new(config.create_game(number_of_clients as usize), location); + let config = planetwars::Config { + map_file: map.to_string(), + max_turns: max_turns, + }; + let game = + planetwars::PlanetWarsGame::new(config.create_game(number_of_clients as usize), location); println!("Tokens:"); let keys: Vec = ids.keys().map(|&x| x.into()).collect(); @@ -65,19 +93,48 @@ pub fn run(args : Vec) -> Option<()> { } tokio::run(futures::lazy(move || { + mozaic::graph::set_graph(mozaic::graph::Graph::new()); let mut broker = Broker::new().unwrap(); - broker.spawn(welcomer_id.clone(), game::GameReactor::params(steplock_id.clone(), Box::new(game)), "Main").display(); - broker.spawn(steplock_id.clone(), Steplock::new(broker.clone(), ids.values().cloned().collect(), welcomer_id.clone(), aggregator_id.clone()).with_timeout(5000).params(), "Steplock").display(); - broker.spawn(aggregator_id.clone(), Aggregator::params(manager_id.clone(), steplock_id.clone()), "Aggregator").display(); - broker.spawn( - manager_id.clone(), - ConnectionManager::params(broker.clone(), ids, aggregator_id.clone(), addr), - "Connection Manager" - ).display(); + broker + .spawn( + welcomer_id.clone(), + game::GameReactor::params(steplock_id.clone(), Box::new(game)), + "Main", + ) + .display(); + broker + .spawn( + steplock_id.clone(), + Steplock::new( + broker.clone(), + ids.values().cloned().collect(), + welcomer_id.clone(), + aggregator_id.clone(), + ) + .with_timeout(5000) + .params(), + "Steplock", + ) + .display(); + broker + .spawn( + aggregator_id.clone(), + Aggregator::params(manager_id.clone(), steplock_id.clone()), + "Aggregator", + ) + .display(); + broker + .spawn( + manager_id.clone(), + ConnectionManager::params(broker.clone(), ids, aggregator_id.clone(), addr), + "Connection Manager", + ) + .display(); Ok(()) - })); + }).instrument(span!(Level::TRACE, "main")), +); Some(()) } diff --git a/backend/src/planetwars/mod.rs b/backend/src/planetwars/mod.rs index 289cebf..b055c4e 100644 --- a/backend/src/planetwars/mod.rs +++ b/backend/src/planetwars/mod.rs @@ -53,6 +53,7 @@ impl PlanetWarsGame { ); if !player.alive || self.state.is_finished() { + println!("Kicking player {}", player.id); updates.push(game::Update::Kick((player.id as u64).into())); } } diff --git a/client/src/main.rs b/client/src/main.rs index 2cc756e..a24b4e4 100644 --- a/client/src/main.rs +++ b/client/src/main.rs @@ -1,8 +1,8 @@ -extern crate mozaic; -extern crate tokio; -extern crate futures; extern crate capnp; +extern crate futures; +extern crate mozaic; extern crate rand; +extern crate tokio; extern crate serde; #[macro_use] @@ -11,26 +11,30 @@ extern crate serde_json; use rand::Rng; -use mozaic::core_capnp::{initialize, terminate_stream, identify, actor_joined}; +use mozaic::base_capnp::{client_message, host_message}; +use mozaic::cmd_capnp::{bot_input, bot_return}; +use mozaic::connection_capnp::client_kicked; +use mozaic::core_capnp::{actor_joined, identify, initialize, terminate_stream}; +use mozaic::errors::*; use mozaic::messaging::reactor::*; use mozaic::messaging::types::*; -use mozaic::errors::*; -use mozaic::base_capnp::{client_message, host_message}; -use mozaic::connection_capnp::client_kicked; -use mozaic::cmd_capnp::{bot_input, bot_return}; -use mozaic::runtime::{Broker, BrokerHandle}; +use mozaic::modules::BotReactor; use mozaic::runtime; -use mozaic::modules::{BotReactor}; +use mozaic::runtime::{Broker, BrokerHandle}; use std::env; use std::str; +use std::process; mod types; fn main() { let args: Vec = env::args().collect(); let id = args.get(1).unwrap().parse().unwrap(); - let client_args = args.get(2..).expect("How do you expect me to spawn your bot?").to_vec(); + let client_args = args + .get(2..) + .expect("How do you expect me to spawn your bot?") + .to_vec(); let addr = "127.0.0.1:9142".parse().unwrap(); let self_id: ReactorId = rand::thread_rng().gen(); @@ -43,7 +47,9 @@ fn main() { broker: broker.clone(), args: client_args, }; - broker.spawn(self_id.clone(), reactor.params(), "main").display(); + broker + .spawn(self_id.clone(), reactor.params(), "main") + .display(); tokio::spawn(runtime::connect_to_server(broker, self_id, &addr)); Ok(()) @@ -74,8 +80,7 @@ impl ClientReactor { &mut self, handle: &mut ReactorHandle, _: initialize::Reader, - ) -> Result<()> - { + ) -> Result<()> { // open link with runtime, for communicating with chat GUI let runtime_link = RuntimeLink::params(handle.id().clone()); handle.open_link(runtime_link)?; @@ -92,13 +97,12 @@ impl ClientReactor { &mut self, handle: &mut ReactorHandle, r: actor_joined::Reader, - ) -> Result<()> - { + ) -> Result<()> { let id = r.get_id()?; if let Some(server) = &self.server { handle.open_link(HostLink::params(ReactorId::from(id)))?; - self.broker.register_as(id.into(), server.clone()); + self.broker.register_as(id.into(), server.clone(), "Server"); // Fake bot msg let mut chat_message = MsgBuffer::::new(); @@ -106,9 +110,7 @@ impl ClientReactor { b.set_message(b""); }); handle.send_internal(chat_message)?; - } else { - handle.open_link(ServerLink::params(id.into()))?; self.server = Some(id.into()); @@ -117,32 +119,36 @@ impl ClientReactor { b.set_key(self.id); }); handle.send_internal(identify).display(); - } Ok(()) } } +impl Drop for ClientReactor { + fn drop(&mut self) { + println!("Client reactor dropped"); + } +} + // Handler for the connection with the chat server struct ServerLink; impl ServerLink { fn params(foreign_id: ReactorId) -> LinkParams { let mut params = LinkParams::new(foreign_id, Self); - params.external_handler( terminate_stream::Owned, CtxHandler::new(Self::close_handler) ); - params.external_handler( actor_joined::Owned, CtxHandler::new(actor_joined::e_to_i) ); + params.external_handler( + terminate_stream::Owned, + CtxHandler::new(Self::close_handler), + ); + params.external_handler(actor_joined::Owned, CtxHandler::new(actor_joined::e_to_i)); - params.internal_handler( identify::Owned, CtxHandler::new(Self::identify) ); + params.internal_handler(identify::Owned, CtxHandler::new(Self::identify)); return params; } - fn identify( - &mut self, - handle: &mut LinkHandle, - id: identify::Reader, - ) -> Result<()> { + fn identify(&mut self, handle: &mut LinkHandle, id: identify::Reader) -> Result<()> { let id = id.get_key(); let mut chat_message = MsgBuffer::::new(); @@ -158,8 +164,7 @@ impl ServerLink { &mut self, handle: &mut LinkHandle, _: terminate_stream::Reader, - ) -> Result<()> - { + ) -> Result<()> { // also close our end of the stream handle.close_link()?; return Ok(()); @@ -176,15 +181,9 @@ impl HostLink { CtxHandler::new(Self::receive_host_message), ); - params.internal_handler( - bot_return::Owned, - CtxHandler::new(Self::send_chat_message), - ); + params.internal_handler(bot_return::Owned, CtxHandler::new(Self::send_chat_message)); - params.external_handler( - client_kicked::Owned, - CtxHandler::new(Self::client_kicked), - ); + params.external_handler(client_kicked::Owned, CtxHandler::new(client_kicked::e_to_i)); return params; } @@ -195,8 +194,7 @@ impl HostLink { &mut self, handle: &mut LinkHandle, send_message: bot_return::Reader, - ) -> Result<()> - { + ) -> Result<()> { let message = send_message.get_message()?; println!("Our bot sent"); @@ -212,29 +210,13 @@ impl HostLink { return Ok(()); } - // pick up a 'send_message' event from the reactor, and put it to effect - // by constructing the chat message and sending it to the chat server. - fn client_kicked( - &mut self, - handle: &mut LinkHandle, - _: client_kicked::Reader, - ) -> Result<()> - { - // Disconnect - - handle.close_link()?; - - return Ok(()); - } - // receive a chat message from the chat server, and broadcast it on the // reactor. fn receive_host_message( &mut self, handle: &mut LinkHandle, host_message: host_message::Reader, - ) -> Result<()> - { + ) -> Result<()> { let message = host_message.get_data()?; let message: types::ServerMessage = serde_json::from_slice(message).unwrap(); @@ -249,10 +231,11 @@ impl HostLink { b.set_input(&serde_json::to_vec(&state).unwrap()); }); handle.send_internal(bot_msg).display(); - }, + } types::ServerMessage::FinalState(state) => { println!("Game finished with"); println!("{:?}", state); + process::exit(0); } types::ServerMessage::PlayerAction(action) => { println!("Out bot did"); @@ -271,9 +254,21 @@ impl BotLink { params.external_handler(bot_return::Owned, CtxHandler::new(bot_return::e_to_i)); params.internal_handler(bot_input::Owned, CtxHandler::new(bot_input::i_to_e)); - + params.internal_handler(client_kicked::Owned, CtxHandler::new(Self::close)); return params; } + + // pick up a 'send_message' event from the reactor, and put it to effect + // by constructing the chat message and sending it to the chat server. + fn close( + &mut self, + handle: &mut LinkHandle, + _: client_kicked::Reader, + ) -> Result<()> { + handle.close_link()?; + + return Ok(()); + } } struct RuntimeLink; @@ -281,11 +276,20 @@ impl RuntimeLink { fn params(foreign_id: ReactorId) -> LinkParams { let mut params = LinkParams::new(foreign_id, Self); - params.external_handler( - actor_joined::Owned, - CtxHandler::new(actor_joined::e_to_i), - ); - + params.external_handler(actor_joined::Owned, CtxHandler::new(actor_joined::e_to_i)); + params.internal_handler(client_kicked::Owned, CtxHandler::new(Self::close)); return params; } + + // pick up a 'send_message' event from the reactor, and put it to effect + // by constructing the chat message and sending it to the chat server. + fn close( + &mut self, + handle: &mut LinkHandle, + _: client_kicked::Reader, + ) -> Result<()> { + handle.close_link()?; + + return Ok(()); + } }