1
Fork 0

change port post-build

This commit is contained in:
Andy Killorin 2023-12-20 20:19:09 -06:00
parent 6b42ac19d1
commit 5ba83793b5
Signed by: ank
GPG key ID: B6241CA3B552BCA4
6 changed files with 58 additions and 29 deletions

View file

@ -1,5 +1,9 @@
local port = "48228" local endpoint = "http://" .. ipaddr .. ":"
local endpoint = "http://" .. ipaddr .. ":" .. port if port then
endpoint = endpoint .. port
else
endpoint = endpoint .. "48228"
end
local args = {...} local args = {...}
local function update() local function update()

View file

@ -16,6 +16,7 @@ future-parking_lot = "0.3.3"
hilbert_index = "0.2.0" hilbert_index = "0.2.0"
hyper = "1.0.1" hyper = "1.0.1"
hyper-util = "0.1.1" hyper-util = "0.1.1"
indoc = "2.0.4"
nalgebra = { version = "0.32.3", features = ["serde-serialize"] } nalgebra = { version = "0.32.3", features = ["serde-serialize"] }
parking_lot = { version = "0.11", features = ["serde"] } parking_lot = { version = "0.11", features = ["serde"] }
pathfinding = "4.6.0" pathfinding = "4.6.0"

View file

@ -1,9 +1,19 @@
.PHONY: server server-opt DEVPORT=1505
server: surnames.txt names.txt ipaddr.txt DEVFILE="offline-state.json"
GLOBAL_IP=$(cat ipaddr.txt) cargo run PRODPORT=48228
PRODFILE="state.json"
MANIFEST=../Cargo.toml
.PHONY: local global
local: surnames.txt names.txt ipaddr.txt
echo '"localhost"' > ipaddr.txt
cargo run $(DEVPORT) $(DEVFILE)
server-opt: surnames.txt names.txt ipaddr.txt global: surnames.txt names.txt ipaddr.txt
GLOBAL_IP=$(cat ipaddr.txt) cargo run --release make -B ipaddr.txt
mkdir -p prod
cd prod; cargo run --release $(PRODPORT) $(PRODFILE)
surnames.txt: surnames.txt:
curl https://raw.githubusercontent.com/Hyneman/moby-project/672f6bdca054c42d375f065ffee87e8ceba0c242/moby/mwords/21986na.mes |\ curl https://raw.githubusercontent.com/Hyneman/moby-project/672f6bdca054c42d375f065ffee87e8ceba0c242/moby/mwords/21986na.mes |\

View file

@ -1,6 +1,6 @@
#![feature(iter_map_windows)] #![feature(iter_map_windows)]
use std::{collections::VecDeque, io::ErrorKind, sync::Arc}; use std::{collections::VecDeque, io::ErrorKind, sync::Arc, env::args};
use anyhow::{Context, Error, Ok}; use anyhow::{Context, Error, Ok};
use axum::{ use axum::{
@ -10,6 +10,7 @@ use axum::{
Json, Router, Json, Router,
}; };
use blocks::{World, Position, Vec3}; use blocks::{World, Position, Vec3};
use indoc::formatdoc;
use mine::TurtleMineJob; use mine::TurtleMineJob;
use rstar::{self, AABB, RTree}; use rstar::{self, AABB, RTree};
@ -18,12 +19,12 @@ use hyper::body::Incoming;
use nalgebra::Vector3; use nalgebra::Vector3;
use names::Name; use names::Name;
use serde::{Deserialize, Serialize}; use serde::{Deserialize, Serialize};
use tokio::sync::{ use tokio::{sync::{
watch::{self}, watch::{self},
Mutex, RwLock, mpsc Mutex, RwLock, mpsc, OnceCell
}; }, fs};
use tower::Service; use tower::Service;
use turtle::{TurtleTask, Iota, Receiver, Sender, Turtle, TurtleUpdate, TurtleInfo, TurtleCommand, TurtleCommander}; use turtle::{TurtleTask, Iota, Receiver, Sender, Turtle, TurtleUpdate, TurtleInfo, TurtleCommand, TurtleCommander, TurtleCommandResponse};
use crate::{blocks::Block, paths::route}; use crate::{blocks::Block, paths::route};
@ -71,14 +72,26 @@ impl LiveState {
} }
static PORT: OnceCell<u16> = OnceCell::const_new();
static SAVE: OnceCell<String> = OnceCell::const_new();
type SharedControl = Arc<RwLock<LiveState>>; type SharedControl = Arc<RwLock<LiveState>>;
#[tokio::main] #[tokio::main]
async fn main() -> Result<(), Error> { async fn main() -> Result<(), Error> {
let mut args = args().skip(1);
PORT.set(match args.next() {
Some(port) => port.parse()?,
None => 48228,
})?;
SAVE.set(match args.next() {
Some(file) => file,
None => "state.json".to_string(),
})?;
let state = match tokio::fs::OpenOptions::new() let state = match tokio::fs::OpenOptions::new()
.read(true) .read(true)
.open("state.json") .open(SAVE.get().unwrap())
.await .await
{ {
tokio::io::Result::Ok(file) => serde_json::from_reader(file.into_std().await)?, tokio::io::Result::Ok(file) => serde_json::from_reader(file.into_std().await)?,
@ -109,7 +122,10 @@ async fn main() -> Result<(), Error> {
.route("/flush", get(flush)) .route("/flush", get(flush))
.with_state(state.clone()); .with_state(state.clone());
let server = safe_kill::serve(server).await; let listener = tokio::net::TcpListener::bind(("0.0.0.0", *PORT.get().unwrap()))
.await.unwrap();
let server = safe_kill::serve(server, listener).await;
println!("writing"); println!("writing");
write_to_disk(state.read().await.save().await).await?; write_to_disk(state.read().await.save().await).await?;
@ -127,7 +143,7 @@ async fn flush(State(state): State<SharedControl>) -> &'static str {
async fn write_to_disk(state: SavedState) -> anyhow::Result<()> { async fn write_to_disk(state: SavedState) -> anyhow::Result<()> {
let json = serde_json::to_string_pretty(&state)?; let json = serde_json::to_string_pretty(&state)?;
tokio::fs::write("state.json", json).await?; tokio::fs::write(SAVE.get().unwrap(), json).await?;
Ok(()) Ok(())
} }
@ -253,11 +269,14 @@ async fn command(
) )
} }
async fn client() -> &'static str { async fn client() -> String {
formatcp!( formatdoc!(r#"
"local ipaddr = {}\n{}", local ipaddr = {}
local port = "{}"
{}"#,
include_str!("../ipaddr.txt"), include_str!("../ipaddr.txt"),
include_str!("../../client/client.lua") PORT.get().unwrap(),
fs::read_to_string("../client/client.lua").await.unwrap(), // TODO: cache handle if bottleneck
) )
} }

View file

@ -1,3 +1,4 @@
use tokio::net::TcpListener;
use tokio::signal; use tokio::signal;
use std; use std;
@ -18,11 +19,7 @@ use tokio::sync::watch::Sender;
use axum::Router; use axum::Router;
pub(crate) async fn serve(server: Router) -> Sender<()> { pub(crate) async fn serve(server: Router, listener: TcpListener) -> Sender<()> {
let listener = tokio::net::TcpListener::bind("0.0.0.0:48228")
.await
.unwrap();
let (close_tx, close_rx) = watch::channel(()); let (close_tx, close_rx) = watch::channel(());
loop { loop {

View file

@ -303,15 +303,13 @@ pub(crate) async fn process_turtle_update(
return Ok(TurtleCommand::Update); return Ok(TurtleCommand::Update);
} }
if turtle.fuel != update.fuel { if turtle.fuel > update.fuel {
let diff = turtle.fuel - update.fuel; let diff = turtle.fuel - update.fuel;
turtle.fuel = update.fuel; turtle.fuel = update.fuel;
if diff > 0 { let delta = turtle.queued_movement * diff as i32;
let delta = turtle.queued_movement * diff as i32;
turtle.position.pos += delta; turtle.position.pos += delta;
}
turtle.queued_movement = Vec3::zeros(); turtle.queued_movement = Vec3::zeros();
} }