// Copyright 2022 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.

use std::io::{Read as _, Write as _};
use tracing::info;

const BUS_NAME: &str = "test-bus";
const SERVER_NAME: &str = "server";
const REQUEST: &str = "hello from client";
const RESPONSE: &str = "hello from server";

#[fuchsia::main]
async fn main() {
    let listener = std::net::TcpListener::bind("192.168.0.2:8080").expect("bind to address");
    info!("waiting for connections...");
    // Let the client know that we are listening for incoming connections.
    let _bus = netemul_sync::Bus::subscribe(BUS_NAME, SERVER_NAME).expect("subscribe to bus");

    let (mut stream, remote) = listener.accept().expect("accept incoming connection");
    info!("accepted connection from {}", remote);
    let mut buffer = [0; 512];
    let read = stream.read(&mut buffer).expect("read from socket");
    let request = String::from_utf8_lossy(&buffer[0..read]);
    assert_eq!(request, REQUEST, "got unexpected request from client: {}", request);

    info!("got request: '{}'", request);
    let response = RESPONSE.as_bytes();
    assert_eq!(stream.write(response).expect("write to socket"), response.len());
    stream.flush().expect("flush stream");
}
