actix: get git working and do port
Signed-off-by: Sean Cross <sean@xobs.io>
This commit is contained in:
parent
881599d031
commit
4940f2d601
85
src/main.rs
85
src/main.rs
@ -17,9 +17,11 @@ use std::error::Error;
|
|||||||
use std::env;
|
use std::env;
|
||||||
use std::sync::{Arc, Mutex};
|
use std::sync::{Arc, Mutex};
|
||||||
|
|
||||||
|
use actix::ActorContext;
|
||||||
use actix_web::{
|
use actix_web::{
|
||||||
fs, middleware, server, App, HttpMessage, HttpRequest, HttpResponse
|
fs, ws, middleware, server, App, HttpMessage, HttpRequest, HttpResponse
|
||||||
};
|
};
|
||||||
|
|
||||||
use git2::Repository;
|
use git2::Repository;
|
||||||
|
|
||||||
struct WebHookConfig {
|
struct WebHookConfig {
|
||||||
@ -43,8 +45,9 @@ fn redeploy_repo(url: &str, path: &Path, name: &str) -> Result<(), git2::Error>
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
};
|
};
|
||||||
repo.set_head("FETCH_HEAD")?;
|
|
||||||
|
|
||||||
|
repo.find_remote("origin")?.fetch(&["master"], None, None)?;
|
||||||
|
repo.set_head("FETCH_HEAD")?;
|
||||||
repo.checkout_head(Some(git2::build::CheckoutBuilder::new().force().use_theirs(true)))?;
|
repo.checkout_head(Some(git2::build::CheckoutBuilder::new().force().use_theirs(true)))?;
|
||||||
|
|
||||||
Ok(())
|
Ok(())
|
||||||
@ -162,6 +165,81 @@ fn webhook_handler((contents, req): (String, HttpRequest<Arc<Mutex<WebHookConfig
|
|||||||
HttpResponse::Ok().body("Ok") // <- send response
|
HttpResponse::Ok().body("Ok") // <- send response
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
/// websocket connection is long running connection, it easier
|
||||||
|
/// to handle with an actor
|
||||||
|
struct MyWebSocket {
|
||||||
|
// Client must send ping at least once per 10 seconds (CLIENT_TIMEOUT),
|
||||||
|
// otherwise we drop connection.
|
||||||
|
//hb: Instant,
|
||||||
|
}
|
||||||
|
|
||||||
|
impl actix::prelude::Actor for MyWebSocket {
|
||||||
|
type Context = ws::WebsocketContext<Self, Arc<Mutex<WebHookConfig>>>;
|
||||||
|
|
||||||
|
/// Method is called on actor start. We start the heartbeat process here.
|
||||||
|
fn started(&mut self, ctx: &mut Self::Context) {
|
||||||
|
//self.hb(ctx);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
/// Handler for `ws::Message`
|
||||||
|
impl actix::prelude::StreamHandler<ws::Message, ws::ProtocolError> for MyWebSocket {
|
||||||
|
fn handle(&mut self, msg: ws::Message, ctx: &mut Self::Context) {
|
||||||
|
// process websocket messages
|
||||||
|
println!("WS: {:?}", msg);
|
||||||
|
match msg {
|
||||||
|
ws::Message::Ping(msg) => {
|
||||||
|
// self.hb = Instant::now();
|
||||||
|
ctx.pong(&msg);
|
||||||
|
}
|
||||||
|
ws::Message::Pong(_) => {
|
||||||
|
// self.hb = Instant::now();
|
||||||
|
}
|
||||||
|
ws::Message::Text(text) => ctx.text(text),
|
||||||
|
ws::Message::Binary(bin) => ctx.binary(bin),
|
||||||
|
ws::Message::Close(_) => {
|
||||||
|
ctx.stop();
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
impl MyWebSocket {
|
||||||
|
fn new() -> Self {
|
||||||
|
Self { /*hb: Instant::now()*/ }
|
||||||
|
}
|
||||||
|
|
||||||
|
/*
|
||||||
|
/// helper method that sends ping to client every second.
|
||||||
|
///
|
||||||
|
/// also this method checks heartbeats from client
|
||||||
|
fn hb(&self, ctx: &mut <Self as actix::prelude::Actor>::Context) {
|
||||||
|
ctx.run_interval(HEARTBEAT_INTERVAL, |act, ctx| {
|
||||||
|
// check client heartbeats
|
||||||
|
if Instant::now().duration_since(act.hb) > CLIENT_TIMEOUT {
|
||||||
|
// heartbeat timed out
|
||||||
|
println!("Websocket Client heartbeat failed, disconnecting!");
|
||||||
|
|
||||||
|
// stop actor
|
||||||
|
ctx.stop();
|
||||||
|
|
||||||
|
// don't try to send a ping
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
|
ctx.ping("");
|
||||||
|
});
|
||||||
|
}
|
||||||
|
*/
|
||||||
|
}
|
||||||
|
|
||||||
|
/// do websocket handshake and start `MyWebSocket` actor
|
||||||
|
fn ws_index(r: &HttpRequest<Arc<Mutex<WebHookConfig>>>) -> Result<HttpResponse, actix_web::Error> {
|
||||||
|
//ws::start(r, MyWebSocket::new())
|
||||||
|
Ok(HttpResponse::Ok().body("go ahead"))
|
||||||
|
}
|
||||||
|
|
||||||
fn main() {
|
fn main() {
|
||||||
env::set_var("RUST_LOG", "actix_web=debug");
|
env::set_var("RUST_LOG", "actix_web=debug");
|
||||||
env::set_var("RUST_BACKTRACE", "1");
|
env::set_var("RUST_BACKTRACE", "1");
|
||||||
@ -185,6 +263,9 @@ fn main() {
|
|||||||
// enable logger
|
// enable logger
|
||||||
.middleware(middleware::Logger::default())
|
.middleware(middleware::Logger::default())
|
||||||
|
|
||||||
|
// websocket route
|
||||||
|
.resource("/socket.io/", |r| r.method(actix_web::http::Method::GET).f(ws_index))
|
||||||
|
|
||||||
// Our webhook
|
// Our webhook
|
||||||
.resource("/webhook", |r|
|
.resource("/webhook", |r|
|
||||||
r.method(actix_web::http::Method::POST)
|
r.method(actix_web::http::Method::POST)
|
||||||
|
Loading…
Reference in New Issue
Block a user