33 lines
973 B
Elixir
33 lines
973 B
Elixir
defmodule Chat.Floof do
|
|
use Agent
|
|
require Logger
|
|
|
|
defstruct secret: ""
|
|
|
|
def start_link([]) do
|
|
Agent.start_link(fn ->
|
|
secret_file = Application.fetch_env!(:chat, :secret_file)
|
|
{:ok, secret} = File.read(secret_file)
|
|
%Chat.Floof{secret: secret}
|
|
end, name: __MODULE__)
|
|
end
|
|
|
|
def setup do
|
|
# generate and save a keypair
|
|
kp = :enacl.sign_keypair()
|
|
secret_file = Application.fetch_env!(:chat, :secret_file)
|
|
:ok = File.write(secret_file, kp.secret)
|
|
end
|
|
|
|
def send_message(name, data) do
|
|
msg_topic = [{:RelativeDistinguishedName, {0, 9, 2342, 19200300, 100, 1, 14}, "Chat"}]
|
|
msg_attrs = [{:RelativeDistinguishedName, {0, 9, 2342, 19200300, 100, 1, 4}, name}]
|
|
msg_inner = Floof.Message.pack_inner(msg_topic, msg_attrs, :info, data)
|
|
Agent.cast(__MODULE__, fn state ->
|
|
msg_outer = Floof.Message.build_outer(255, [], state.secret, msg_inner)
|
|
Floof.Message.emit(msg_outer)
|
|
state
|
|
end)
|
|
end
|
|
end
|