defmodule Ads.Server do @moduledoc """ Documentation for Ads.Server. """ def subscribe netId, port, index_grp do :gproc.reg({:p,:l, {netId, port, index_grp}}) end def publish netId, port,index_grp, data do :gproc.send({:p, :l, {netId, port, index_grp}}, {:send, netId, port, index_grp, data}) end def unsubscribe netId, port, index_grp do :gproc.unreg({:p,:l, {netId, port, index_grp}}) end defp netid_to_list s do s |> String.split(".") |> Enum.map(fn v -> {v, ""} = Integer.parse(v) v end) end def load_config do if File.exists?("ads_server_config.json") do "ads_server_config.json" |> File.read! |> :jsx.decode |> Enum.reduce(%{}, fn {net_id,net_obj}, net_acc -> Map.put( net_acc, netid_to_list(net_id), Enum.reduce(net_obj,%{}, fn {port, port_obj}, port_acc -> {port, ""} = Integer.parse(port) Map.put( port_acc, port, Enum.reduce(port_obj,%{},fn {index, index_obj}, index_acc -> {index,""} = Integer.parse(index) size = Ads.Structure.Size.size(index_obj) Map.put( index_acc, index, { size, index_obj } ) end) ) end) ) end) else File.write("ads_server_config.json","", [:write]) [] end end end