blob: 599e06acf37709076991c7bcefb32a4eed967985 [file] [log] [blame]
// Copyright 2018 The Fuchsia Authors. All rights reserved.
// Use of this source code is governed by a BSD-style license that can be
// found in the LICENSE file.
#![deny(warnings)]
#![feature(try_from, async_await, await_macro)]
use failure::{Error, ResultExt};
use fidl::endpoints::create_endpoints;
use fidl_fuchsia_game_tennis::{PaddleRequest, TennisServiceMarker};
use fuchsia_app::client::connect_to_service;
use fuchsia_async as fasync;
use fuchsia_zircon::DurationNum;
use futures::TryStreamExt;
use parking_lot::Mutex;
use std::sync::Arc;
fn main() -> Result<(), Error> {
let mut executor = fasync::Executor::new().context("Error creating executor")?;
let tennis_service = connect_to_service::<TennisServiceMarker>()?;
let (client_end, paddle_controller) = create_endpoints()?;
let (mut prs, paddle_control_handle) = paddle_controller.into_stream_and_control_handle()?;
tennis_service.register_paddle("example_ai", client_end)?;
let i_am_player_2 = Arc::new(Mutex::new(false));
let i_am_player_2_clone = i_am_player_2.clone();
println!("registering with game service");
fasync::spawn(
async move {
while let Some(PaddleRequest::NewGame { is_player_2, .. }) =
await!(prs.try_next()).unwrap()
{
// TODO: remove unwrap
if is_player_2 {
println!("I am player 2");
} else {
println!("I am player 1");
}
*i_am_player_2_clone.lock() = is_player_2
}
},
);
let resp: Result<(), Error> = executor.run_singlethreaded(
async move {
loop {
let time_step: i64 = 1000 / 5;
await!(fuchsia_async::Timer::new(time_step.millis().after_now()));
let state = await!(tennis_service.get_state())?;
if state.game_num == 0 {
continue;
}
let my_y;
if *i_am_player_2.lock() {
my_y = state.player_2_y;
} else {
my_y = state.player_1_y;
}
if state.ball_y > my_y {
println!("moving down");
paddle_control_handle.send_down()?;
} else if state.ball_y < my_y {
println!("moving up");
paddle_control_handle.send_up()?;
} else {
println!("staying still");
paddle_control_handle.send_stop()?;
}
}
},
);
resp
}