Skip to content

louaykamel/overclock

Repository files navigation

Actor framework for building data driven distributed systems

Apache 2.0 license


About

Overclock is an actor model framework inspired by Elixir, enforces supervision tree and interoperability.

Features

  • Async
  • Based on Tokio
  • Multiple channel types
  • Actor local store, accessible through directory path interface
  • Websocket server for RPC communication
  • Built-in config support
  • Dynamic Topology
  • Reusable actors
  • Promethues supports
  • Communication

Usage

Add overclock to your Cargo.toml:

[dependencies]
overclock = "0.1"

Implement Actor trait

use overclock::core::*;

// Define your actor struct
#[derive(Debug, Serialize, Deserialize, PartialEq, Default)]
struct HelloWorld;

#[async_trait::async_trait]
impl<S> Actor<S> for HelloWorld
where
    S: SupHandle<Self>,
{
    // Temporary state or resources during the actor lifecycle
    type Data = usize;
    // Interval channel which will yield Instant every 1000ms;
    type Channel = IntervalChannel<1000>;
    async fn init(&mut self, rt: &mut Rt<Self, S>) -> ActorResult<Self::Data> {
        log::info!("HelloWorld: {}", rt.service().status());
        let counter = 0;
        Ok(counter)
    }
    async fn run(&mut self, rt: &mut Rt<Self, S>, mut counter: Self::Data) -> ActorResult<()> {
        log::info!("HelloWorld: {}", rt.service().status());
        while let Some(event) = rt.inbox_mut().next().await {
            if counter == 3 {
                counter += 1;
                log::info!("HelloWorld: Received instant {:?}, counter: {}", event, counter);
            } else {
                break
            }
        }
        log::info!("HelloWorld: exited its event loop");
        Ok(())
    }
}


#[tokio::main]
async fn main() {
    let runtime = Runtime::from_config::<HelloWorld>().await.expect("Runtime to run");
    runtime.block_on().await.expect("Runtime to shutdown gracefully");
}

Run the above illustrated example

cargo run --features="ron_config"

Contributing

All contributions are welcome!

LICENSE

This project is licensed under either of

COPYRIGHT

Copyright (C) 2022 Louay Kamel
Copyright (C) 2021 IOTA Stiftung

About

No description, website, or topics provided.

Resources

License

Stars

Watchers

Forks

Releases

No releases published

Packages

No packages published

Languages