%%% $Id: dropbox.erl,v 1.1 2013/12/04 01:54:28 leavens Exp leavens $ -module(dropbox). -export([start/0, init/0, read/2, write/3]). start() -> spawn(?MODULE, init, []). init() -> Folder = ets:new(dir, [set]), loop(Folder). loop(Folder) -> receive {Pid, {read, FileName}} -> case ets:lookup(Folder, FileName) of [] -> Pid ! {self(), error}; [{FileName,Result}] -> Pid ! {self(), contents, Result} end; {Pid, {write, FileName, Contents}} -> ets:insert(Folder, {FileName, Contents}), Pid ! {self(), ok} end, loop(Folder). %% Client Functions -spec read(DB :: pid(), FileName :: string()) -> string() | error. read(DB, FileName) -> DB ! {self(), {read, FileName}}, receive {DB, error} -> error; {DB, contents, String} -> String end. -spec write(DB :: pid(), FileName :: string(), Contents :: string()) -> ok. write(DB, FileName, Contents) -> DB ! {self(), {write, FileName, Contents}}, receive {DB, ok} -> ok end.