# Compound

A minimalistic TCP Server written in Elixir.

## Introduction
Compound goal is to offer a simple API that allows users to send and receive packets via TCP connections.
Each TCP connection is handled by its own process utilizing Elixir's `GenServer` behavior.
For your applications to be able to handle packets received by Compound, callbacks are used with the possibility of each connection having its own callback.

## Installation 

Compound can be added to your project 
by append `compound` to your list of dependencies in `mix.exs`:

def deps do
    {:compound, "~> 0.1.0"}

and then running `mix deps.get` to install it.

## Preparation

Before you can use Compound you have to take a few steps.

First you need to add one or more server configurations to your `config.exs`:

config :compound, tcp_servers: [
  %{id: "example", port: 3001},

A server configuration consists of an id (as a `string`) and a port (as an `integer`).

After starting your elixir app simply call `Compound.TCP.set_default_callback(server, callback)` with the id of the server from the configuration and a pid. 
Incoming packets for that server will be forwarded to your callback process as `{:new_packet, packet, sender}`.