~starkingdoms/starkingdoms

6c990924a2b5a92d03587cf758d89fea8092a297 — core 1 year, 11 months ago d16973b
saving infrastructure
M server/src/main.rs => server/src/main.rs +12 -1
@@ 26,7 26,7 @@ use component::Input;
use component::*;
use packet::*;
use rand::Rng;
use starkingdoms_common::unpack_savefile;
use starkingdoms_common::{pack_savefile, unpack_savefile, SaveData};
use std::f32::consts::PI;

pub mod component;


@@ 865,6 865,17 @@ fn on_message(
                        }
                    }
                }
                Packet::RequestSave {} => {
                    // HEY! GHOSTLY! PLEASE FILL THIS STRUCT WITH DATA!
                    // THANKS!
                    let save = SaveData {};
                    let save_string = pack_savefile(&app_keys.app_key, save);
                    let packet = Packet::SaveData {
                        payload: save_string,
                    };
                    let buf = serde_json::to_vec(&packet).unwrap();
                    event_queue.push(ServerEvent::Broadcast(MessageType::Text, buf));
                }
                _ => continue,
            }
        }

M server/src/packet.rs => server/src/packet.rs +1 -1
@@ 117,6 117,6 @@ pub enum Packet {
        eligible: bool,
    },
    SaveData {
        payload: Vec<u8>,
        payload: String,
    },
}

M starkingdoms-client/src/components/Chatbox.svelte => starkingdoms-client/src/components/Chatbox.svelte +18 -0
@@ 48,6 48,24 @@
        sendPacket(global.client!, chat_packet);

        addMessage("direct-message", `you -> ${target}: ${message}`);
      } else if (value.startsWith(".save")) {
        value = "";
        addMessage(
          "server-message",
          "[Save][1/3] Requesting save from the server...",
        );
        if (!global.saveEligible) {
          addMessage(
            "server-error",
            "[Save] Not eligible to save, please get closer to a planet",
          );
          return;
        }
        let req_packet: Packet = {
          t: PacketType.RequestSave,
          c: {},
        };
        sendPacket(global.client!, req_packet);
      } else {
        let chat_packet: Packet = {
          t: PacketType.SendMessage,

M starkingdoms-client/src/globals.ts => starkingdoms-client/src/globals.ts +3 -0
@@ 19,6 19,8 @@ export interface GlobalData {
  right: boolean;

  rendering: GlobalRendering | null;

  saveEligible: boolean;
}

export interface GlobalRendering {


@@ 45,6 47,7 @@ export const global: GlobalData = {
  left: false,
  right: false,
  rendering: null,
  saveEligible: true,
};

export function player(): Part | undefined {

M starkingdoms-client/src/hub.ts => starkingdoms-client/src/hub.ts +29 -1
@@ 7,6 7,8 @@ import type {
  PlanetPositionsPacket,
  PlayerLeavePacket,
  PlayerListPacket,
  SaveDataPacket,
  SaveEligibilityPacket,
  SpawnPartPacket,
  SpawnPlayerPacket,
} from "./protocol.ts";


@@ 56,7 58,7 @@ export async function hub_connect(
      t: PacketType.ClientLogin,
      c: {
        username,
        save: null,
        save: window.localStorage.getItem("save"),
      },
    };
    sendPacket(client, packet);


@@ 258,6 260,32 @@ export async function hub_connect(
        } else {
          chatbox.addMessage("server-error", `${p.content}`);
        }
      } else if (packet.t == PacketType.SaveEligibility) {
        let p = <SaveEligibilityPacket>packet.c;
        chatbox.addMessage(
          "server-message",
          p.eligible
            ? "Eligible to save. Run the .save command to save your progress!"
            : "No longer eligible to save.",
        );
        global.saveEligible = p.eligible;
      } else if (packet.t == PacketType.SaveData) {
        let p = <SaveDataPacket>packet.c;
        // request save
        // receive save data from server
        // upload save file to storage
        // done
        chatbox.addMessage(
          "server-message",
          "[Save][2/3] Received save data from server!",
        );
        logger(`save file received save=${p.payload}`);
        chatbox.addMessage(
          "server-message",
          "[Save][3/3] Uploading save file to storage...",
        );
        window.localStorage.setItem("save", p.payload);
        chatbox.addMessage("server-message", "[Save] Game saved successfully!");
      } else {
        logger(`unrecognized packet type ${packet.t}`);
      }

M starkingdoms-client/src/protocol.ts => starkingdoms-client/src/protocol.ts +1 -1
@@ 88,7 88,7 @@ export interface SaveEligibilityPacket {
  eligible: boolean;
}
export interface SaveDataPacket {
  payload: Buffer;
  payload: string;
}

export enum PacketType {