DEVELOPMENT ENVIRONMENT

~liljamo/deck-builder

e74a2cbda1637443df8fbf8c5d583dd494be3b66 — Jonni Liljamo 1 year, 9 months ago a31e859
feat(server, shared): handle currently existing datarequests
M server/src/main.rs => server/src/main.rs +1 -0
@@ 73,6 73,7 @@ fn main() {
                systems::event::disconnect_events,
                systems::event::error_events,
                systems::event::tick_events,
                systems::event::message_events,
            )
                .chain()
                .in_set(ReceiveEvents),

A server/src/systems/event/message/mod.rs => server/src/systems/event/message/mod.rs +80 -0
@@ 0,0 1,80 @@
/*
 * This file is part of laurelin/server
 * Copyright (C) 2023 Jonni Liljamo <jonni@liljamo.com>
 *
 * Licensed under GPL-3.0-only.
 * See LICENSE for licensing information.
 */

use bevy_ecs::{event::EventReader, system::Res};
use laurelin_shared::{
    api::game::{
        all_forming, create, my_games, ResponseAllForming, ResponseCreateGame, ResponseMyGames,
    },
    server::{
        channels::DataRequestChannel,
        messages::{DataRequest, DataRequestResponse, DataRequestType},
    },
};
use naia_bevy_server::{events::MessageEvents, Server};

use crate::{Config, Global};

pub(crate) fn message_events(
    mut ev: EventReader<MessageEvents>,
    mut server: Server,
    config: Res<Config>,
    global: Res<Global>,
) {
    for events in ev.iter() {
        for (user_key, request) in events.read::<DataRequestChannel, DataRequest>() {
            match DataRequestType::from_u8(&request.r#type) {
                DataRequestType::GameCreate => {
                    // TODO: handle
                    let cookie = global.user_to_session_map.get(&user_key).unwrap();
                    let response = create(&config.api_address, &cookie);
                    let json = match response {
                        ResponseCreateGame::Error(err) => serde_json::to_string(&err).unwrap(), // TODO: handle
                        ResponseCreateGame::Valid(result) => {
                            serde_json::to_string(&result).unwrap() // TODO: handle
                        }
                    };
                    server.send_message::<DataRequestChannel, DataRequestResponse>(
                        &user_key,
                        &DataRequestResponse::new(request.r#type, &json),
                    );
                }
                DataRequestType::GameAllForming => {
                    // TODO: handle
                    let cookie = global.user_to_session_map.get(&user_key).unwrap();
                    let response = all_forming(&config.api_address, &cookie);
                    let json = match response {
                        ResponseAllForming::Error(err) => serde_json::to_string(&err).unwrap(), // TODO: handle
                        ResponseAllForming::Valid(result) => {
                            serde_json::to_string(&result).unwrap() // TODO: handle
                        }
                    };
                    server.send_message::<DataRequestChannel, DataRequestResponse>(
                        &user_key,
                        &DataRequestResponse::new(request.r#type, &json),
                    );
                }
                DataRequestType::GameMyGames => {
                    // TODO: handle
                    let cookie = global.user_to_session_map.get(&user_key).unwrap();
                    let response = my_games(&config.api_address, &cookie);
                    let json = match response {
                        ResponseMyGames::Error(err) => serde_json::to_string(&err).unwrap(), // TODO: handle
                        ResponseMyGames::Valid(result) => {
                            serde_json::to_string(&result).unwrap() // TODO: handle
                        }
                    };
                    server.send_message::<DataRequestChannel, DataRequestResponse>(
                        &user_key,
                        &DataRequestResponse::new(request.r#type, &json),
                    );
                }
            }
        }
    }
}

M server/src/systems/event/mod.rs => server/src/systems/event/mod.rs +3 -0
@@ 25,6 25,9 @@ use naia_bevy_server::{

use crate::{Config, Global, RuntimeTemp};

mod message;
pub(crate) use message::message_events;

pub(crate) fn auth_events(
    mut ev: EventReader<AuthEvents>,
    mut server: Server,

M shared/src/server/messages/datarequest.rs => shared/src/server/messages/datarequest.rs +18 -0
@@ 38,4 38,22 @@ impl DataRequestResponse {
pub enum DataRequestType {
    GameAllForming = 100,
    GameMyGames = 101,
    GameCreate = 102,
}

impl DataRequestType {
    // TODO: should prolly do this, like, not by hand.
    pub fn from_u8(value: &u8) -> Self {
        match value {
            100 => Self::GameAllForming,
            101 => Self::GameMyGames,
            102 => Self::GameCreate,
            _ => {
                // NOTE/TODO/FIXME: bad, veeeery bad.
                //     just... I'm not sure how to handle this best,
                //     so right now it just returns something, lol.
                Self::GameCreate
            }
        }
    }
}

M shared/src/server/messages/mod.rs => shared/src/server/messages/mod.rs +1 -0
@@ 12,6 12,7 @@ mod auth;
pub use auth::{AfterAuth, Auth};

mod datarequest;
pub use datarequest::{DataRequest, DataRequestResponse, DataRequestType};

pub struct MessagesPlugin;