alias Helix.Graph
defmodule Commandline.CLI do
def main(args) do
options = [switches: [file: :string],aliases: [f: :file]]
{opts, _, _} = OptionParser.parse(args, options)
{nodes, _, dspid} = Graph.load_graph(opts[:file], true)
has_input = Graph.has_live_input?(nodes)
input_targets = Enum.reduce(nodes, [], fn i, acc ->
{key, node} = i
name = key |> List.first()
IO.inspect(Map.get(node.attrs, "module"))
if Map.get(node.attrs, "module") == "ConsoleInputModule" do
acc ++ [name]
else
acc
end
end)
get_input(dspid, input_targets)
end
def get_input(dspid, input_targets) do
message = IO.gets("?) ")
send_input(message, input_targets)
if Process.alive?(dspid) do
get_input(dspid, input_targets)
else
IO.inspect("Goodbye.")
end
end
def send_input(message, input_targets) do
Enum.map(input_targets, fn target ->
target_pid = :ets.lookup(:pids, target) |> Enum.at(0) |> elem(1)
event = %{
type: :text,
value: message,
source_id: "You:" <> target,
message_id: UUID.uuid4(),
timestamp: :os.system_time(:milli_seconds)
}
GenServer.cast(target_pid, {:convey, event})
end)
end
end