make planetwars great again

This commit is contained in:
ajuvercr 2019-11-15 19:01:44 +01:00
parent 9b2faccfd2
commit c846031aa3
5 changed files with 177 additions and 88 deletions

View file

@ -14,3 +14,6 @@ futures = "0.1.28"
serde = "1.0.100" serde = "1.0.100"
serde_derive = "1.0.100" serde_derive = "1.0.100"
serde_json = "1.0" serde_json = "1.0"
tracing = "0.1.9"
tracing-futures = "0.1.0"
tracing-subscriber = "0.1.5"

View file

@ -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}]}

View file

@ -3,18 +3,25 @@ extern crate serde;
extern crate serde_derive; extern crate serde_derive;
extern crate serde_json; extern crate serde_json;
extern crate tokio;
extern crate futures; extern crate futures;
extern crate mozaic; extern crate mozaic;
extern crate rand; 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::env;
use std::net::SocketAddr; 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; mod planetwars;
@ -24,22 +31,31 @@ fn main() {
let name = args[0].clone(); let name = args[0].clone();
match run(args) { match run(args) {
None => print_info(&name), None => print_info(&name),
_ => {}, _ => {}
}; };
} }
use mozaic::runtime::{Broker};
use rand::Rng;
use errors::Consumable; use errors::Consumable;
use mozaic::modules::ConnectionManager;
use mozaic::modules::util; use mozaic::modules::util;
use mozaic::modules::ConnectionManager;
use mozaic::runtime::Broker;
use rand::Rng;
use std::collections::HashMap; use std::collections::HashMap;
fn print_info(name: &str) { 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<String>) -> Option<()> { pub fn run(args: Vec<String>) -> 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::<SocketAddr>().unwrap(); let addr = "127.0.0.1:9142".parse::<SocketAddr>().unwrap();
@ -49,14 +65,26 @@ pub fn run(args : Vec<String>) -> Option<()> {
let steplock_id: ReactorId = rand::thread_rng().gen(); let steplock_id: ReactorId = rand::thread_rng().gen();
let map = args.get(1)?; 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 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<util::Identifier, util::PlayerId> = (0..number_of_clients).map(|x| (rand::thread_rng().gen::<u64>().into(), x.into())).collect(); let ids: HashMap<util::Identifier, util::PlayerId> = (0..number_of_clients)
.map(|x| (rand::thread_rng().gen::<u64>().into(), x.into()))
.collect();
let config = planetwars::Config { map_file: map.to_string(), max_turns: max_turns }; let config = planetwars::Config {
let game = planetwars::PlanetWarsGame::new(config.create_game(number_of_clients as usize), location); 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:"); println!("Tokens:");
let keys: Vec<u64> = ids.keys().map(|&x| x.into()).collect(); let keys: Vec<u64> = ids.keys().map(|&x| x.into()).collect();
@ -65,19 +93,48 @@ pub fn run(args : Vec<String>) -> Option<()> {
} }
tokio::run(futures::lazy(move || { tokio::run(futures::lazy(move || {
mozaic::graph::set_graph(mozaic::graph::Graph::new());
let mut broker = Broker::new().unwrap(); let mut broker = Broker::new().unwrap();
broker.spawn(welcomer_id.clone(), game::GameReactor::params(steplock_id.clone(), Box::new(game)), "Main").display(); broker
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(); .spawn(
broker.spawn(aggregator_id.clone(), Aggregator::params(manager_id.clone(), steplock_id.clone()), "Aggregator").display(); welcomer_id.clone(),
broker.spawn( 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(), manager_id.clone(),
ConnectionManager::params(broker.clone(), ids, aggregator_id.clone(), addr), ConnectionManager::params(broker.clone(), ids, aggregator_id.clone(), addr),
"Connection Manager" "Connection Manager",
).display(); )
.display();
Ok(()) Ok(())
})); }).instrument(span!(Level::TRACE, "main")),
);
Some(()) Some(())
} }

View file

@ -53,6 +53,7 @@ impl PlanetWarsGame {
); );
if !player.alive || self.state.is_finished() { if !player.alive || self.state.is_finished() {
println!("Kicking player {}", player.id);
updates.push(game::Update::Kick((player.id as u64).into())); updates.push(game::Update::Kick((player.id as u64).into()));
} }
} }

View file

@ -1,8 +1,8 @@
extern crate mozaic;
extern crate tokio;
extern crate futures;
extern crate capnp; extern crate capnp;
extern crate futures;
extern crate mozaic;
extern crate rand; extern crate rand;
extern crate tokio;
extern crate serde; extern crate serde;
#[macro_use] #[macro_use]
@ -11,26 +11,30 @@ extern crate serde_json;
use rand::Rng; 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::reactor::*;
use mozaic::messaging::types::*; use mozaic::messaging::types::*;
use mozaic::errors::*; use mozaic::modules::BotReactor;
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::runtime; use mozaic::runtime;
use mozaic::modules::{BotReactor}; use mozaic::runtime::{Broker, BrokerHandle};
use std::env; use std::env;
use std::str; use std::str;
use std::process;
mod types; mod types;
fn main() { fn main() {
let args: Vec<String> = env::args().collect(); let args: Vec<String> = env::args().collect();
let id = args.get(1).unwrap().parse().unwrap(); 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 addr = "127.0.0.1:9142".parse().unwrap();
let self_id: ReactorId = rand::thread_rng().gen(); let self_id: ReactorId = rand::thread_rng().gen();
@ -43,7 +47,9 @@ fn main() {
broker: broker.clone(), broker: broker.clone(),
args: client_args, 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)); tokio::spawn(runtime::connect_to_server(broker, self_id, &addr));
Ok(()) Ok(())
@ -74,8 +80,7 @@ impl ClientReactor {
&mut self, &mut self,
handle: &mut ReactorHandle<C>, handle: &mut ReactorHandle<C>,
_: initialize::Reader, _: initialize::Reader,
) -> Result<()> ) -> Result<()> {
{
// open link with runtime, for communicating with chat GUI // open link with runtime, for communicating with chat GUI
let runtime_link = RuntimeLink::params(handle.id().clone()); let runtime_link = RuntimeLink::params(handle.id().clone());
handle.open_link(runtime_link)?; handle.open_link(runtime_link)?;
@ -92,13 +97,12 @@ impl ClientReactor {
&mut self, &mut self,
handle: &mut ReactorHandle<C>, handle: &mut ReactorHandle<C>,
r: actor_joined::Reader, r: actor_joined::Reader,
) -> Result<()> ) -> Result<()> {
{
let id = r.get_id()?; let id = r.get_id()?;
if let Some(server) = &self.server { if let Some(server) = &self.server {
handle.open_link(HostLink::params(ReactorId::from(id)))?; 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 // Fake bot msg
let mut chat_message = MsgBuffer::<bot_return::Owned>::new(); let mut chat_message = MsgBuffer::<bot_return::Owned>::new();
@ -106,9 +110,7 @@ impl ClientReactor {
b.set_message(b""); b.set_message(b"");
}); });
handle.send_internal(chat_message)?; handle.send_internal(chat_message)?;
} else { } else {
handle.open_link(ServerLink::params(id.into()))?; handle.open_link(ServerLink::params(id.into()))?;
self.server = Some(id.into()); self.server = Some(id.into());
@ -117,20 +119,28 @@ impl ClientReactor {
b.set_key(self.id); b.set_key(self.id);
}); });
handle.send_internal(identify).display(); handle.send_internal(identify).display();
} }
Ok(()) Ok(())
} }
} }
impl Drop for ClientReactor {
fn drop(&mut self) {
println!("Client reactor dropped");
}
}
// Handler for the connection with the chat server // Handler for the connection with the chat server
struct ServerLink; struct ServerLink;
impl ServerLink { impl ServerLink {
fn params<C: Ctx>(foreign_id: ReactorId) -> LinkParams<Self, C> { fn params<C: Ctx>(foreign_id: ReactorId) -> LinkParams<Self, C> {
let mut params = LinkParams::new(foreign_id, Self); let mut params = LinkParams::new(foreign_id, Self);
params.external_handler( terminate_stream::Owned, CtxHandler::new(Self::close_handler) ); 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(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));
@ -138,11 +148,7 @@ impl ServerLink {
return params; return params;
} }
fn identify<C: Ctx>( fn identify<C: Ctx>(&mut self, handle: &mut LinkHandle<C>, id: identify::Reader) -> Result<()> {
&mut self,
handle: &mut LinkHandle<C>,
id: identify::Reader,
) -> Result<()> {
let id = id.get_key(); let id = id.get_key();
let mut chat_message = MsgBuffer::<identify::Owned>::new(); let mut chat_message = MsgBuffer::<identify::Owned>::new();
@ -158,8 +164,7 @@ impl ServerLink {
&mut self, &mut self,
handle: &mut LinkHandle<C>, handle: &mut LinkHandle<C>,
_: terminate_stream::Reader, _: terminate_stream::Reader,
) -> Result<()> ) -> Result<()> {
{
// also close our end of the stream // also close our end of the stream
handle.close_link()?; handle.close_link()?;
return Ok(()); return Ok(());
@ -176,15 +181,9 @@ impl HostLink {
CtxHandler::new(Self::receive_host_message), CtxHandler::new(Self::receive_host_message),
); );
params.internal_handler( params.internal_handler(bot_return::Owned, CtxHandler::new(Self::send_chat_message));
bot_return::Owned,
CtxHandler::new(Self::send_chat_message),
);
params.external_handler( params.external_handler(client_kicked::Owned, CtxHandler::new(client_kicked::e_to_i));
client_kicked::Owned,
CtxHandler::new(Self::client_kicked),
);
return params; return params;
} }
@ -195,8 +194,7 @@ impl HostLink {
&mut self, &mut self,
handle: &mut LinkHandle<C>, handle: &mut LinkHandle<C>,
send_message: bot_return::Reader, send_message: bot_return::Reader,
) -> Result<()> ) -> Result<()> {
{
let message = send_message.get_message()?; let message = send_message.get_message()?;
println!("Our bot sent"); println!("Our bot sent");
@ -212,29 +210,13 @@ impl HostLink {
return Ok(()); 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<C: Ctx>(
&mut self,
handle: &mut LinkHandle<C>,
_: client_kicked::Reader,
) -> Result<()>
{
// Disconnect
handle.close_link()?;
return Ok(());
}
// receive a chat message from the chat server, and broadcast it on the // receive a chat message from the chat server, and broadcast it on the
// reactor. // reactor.
fn receive_host_message<C: Ctx>( fn receive_host_message<C: Ctx>(
&mut self, &mut self,
handle: &mut LinkHandle<C>, handle: &mut LinkHandle<C>,
host_message: host_message::Reader, host_message: host_message::Reader,
) -> Result<()> ) -> Result<()> {
{
let message = host_message.get_data()?; let message = host_message.get_data()?;
let message: types::ServerMessage = serde_json::from_slice(message).unwrap(); 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()); b.set_input(&serde_json::to_vec(&state).unwrap());
}); });
handle.send_internal(bot_msg).display(); handle.send_internal(bot_msg).display();
}, }
types::ServerMessage::FinalState(state) => { types::ServerMessage::FinalState(state) => {
println!("Game finished with"); println!("Game finished with");
println!("{:?}", state); println!("{:?}", state);
process::exit(0);
} }
types::ServerMessage::PlayerAction(action) => { types::ServerMessage::PlayerAction(action) => {
println!("Out bot did"); println!("Out bot did");
@ -271,9 +254,21 @@ impl BotLink {
params.external_handler(bot_return::Owned, CtxHandler::new(bot_return::e_to_i)); 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(bot_input::Owned, CtxHandler::new(bot_input::i_to_e));
params.internal_handler(client_kicked::Owned, CtxHandler::new(Self::close));
return params; 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<C: Ctx>(
&mut self,
handle: &mut LinkHandle<C>,
_: client_kicked::Reader,
) -> Result<()> {
handle.close_link()?;
return Ok(());
}
} }
struct RuntimeLink; struct RuntimeLink;
@ -281,11 +276,20 @@ impl RuntimeLink {
fn params<C: Ctx>(foreign_id: ReactorId) -> LinkParams<Self, C> { fn params<C: Ctx>(foreign_id: ReactorId) -> LinkParams<Self, C> {
let mut params = LinkParams::new(foreign_id, Self); let mut params = LinkParams::new(foreign_id, Self);
params.external_handler( params.external_handler(actor_joined::Owned, CtxHandler::new(actor_joined::e_to_i));
actor_joined::Owned, params.internal_handler(client_kicked::Owned, CtxHandler::new(Self::close));
CtxHandler::new(actor_joined::e_to_i),
);
return params; 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<C: Ctx>(
&mut self,
handle: &mut LinkHandle<C>,
_: client_kicked::Reader,
) -> Result<()> {
handle.close_link()?;
return Ok(());
}
} }