Packages

MTProto (Telegram) implementation for Elixir.

Retired package: Deprecated - This package is not maintained anymore.

Current section

Files

Jump to
telegram_mt lib mtproto registry.ex
Raw

lib/mtproto/registry.ex

defmodule MTProto.Registry do
@moduledoc false
# Provide a registry to store connection-related informations such as
# the authorization keys, the TCP sockets, the TCP sequence numbers,
# the server salts, the sessions handler/listener pids and temporary values during
# the generation of an authorization key.
def start_link(name) do
Agent.start_link(fn -> Map.new end, name: name)
end
# Set a value given its keys.
def set(registry, id, key, value) do
Agent.update(registry, fn(map) ->
initial = Map.get(map, id)
updated = Map.put(initial, key, value)
Map.put map, id, updated
end)
end
def set(registry, key, struct) do
Agent.update(registry, fn(map) -> Map.put(map, key, struct) end)
end
# Delete a subtree given its key
def drop(registry, key) do
Agent.update(registry, fn(map) -> Map.delete(map, key) end)
end
# Delete a value given its keys.
def drop(registry, id, key) do
Agent.update(registry, fn(map) ->
initial = Map.get(map, id)
updated = Map.delete(initial, key)
Map.put map, id, updated
end)
end
# Get an element given its keys.
def get(registry, key) do
Agent.get(registry, fn(map) -> Map.get(map, key) end)
end
# Return the key of every element stored in the registry.
def get_keys(registry) do
Agent.get(registry, fn(map) -> Map.keys(map) end)
end
# Dump the whole registry (as a map).
def dump(registry) do
Agent.get(registry, fn(map) -> map end)
end
end