defmodule Shard.Application do @moduledoc """ Main Shard application. Shard is a prototype peer-to-peer comunication platform with data synchronization. """ use Application def start(_type, _args) do import Supervisor.Spec, warn: false {listen_port, _} = Integer.parse ((System.get_env "PORT") || "4044") # Define workers and child supervisors to be supervised children = [ Shard.Identity, { DynamicSupervisor, strategy: :one_for_one, name: Shard.DynamicSupervisor }, # Networking { SNet.Manager, listen_port }, { SNet.TCPServer, listen_port }, # Applications & data store Shard.Manager, # Web UI Plug.Adapters.Cowboy.child_spec(:http, SWeb.HTTPRouter, [], port: listen_port + 1000) ] # See http://elixir-lang.org/docs/stable/elixir/Supervisor.html # for other strategies and supported options opts = [strategy: :one_for_one, name: Shard.Supervisor] Supervisor.start_link(children, opts) end end