Fix inverted logic case in file uploads.
This commit is contained in:
parent
92f9474f88
commit
8599658f0b
|
@ -1,9 +1,52 @@
|
||||||
-module(fserve).
|
-module(fserve).
|
||||||
-export([start/0]).
|
-export([start/0, file_serve/2, put/2, get/1]).
|
||||||
-include("./msg.hrl").
|
-include("./msg.hrl").
|
||||||
|
|
||||||
start () ->
|
start () ->
|
||||||
file_serve(#{}, #{}).
|
spawn(fserve, file_serve, [#{}, sets:new()]).
|
||||||
|
|
||||||
file_serve(Names, DataStore) ->
|
file_serve(Names, DataStore) ->
|
||||||
throw (not_implemented).
|
receive
|
||||||
|
#upload{client=Client, data=Data} ->
|
||||||
|
case upload(DataStore, Data) of
|
||||||
|
{ok, UpdatedDataStore, CAS_ID} ->
|
||||||
|
Client ! CAS_ID,
|
||||||
|
file_serve(Names, UpdatedDataStore);
|
||||||
|
{error, Reason} -> throw(Reason)
|
||||||
|
end;
|
||||||
|
#stop{client=Client} ->
|
||||||
|
io:format("Shutdown message received from ~w~n", [Client]);
|
||||||
|
#dump{client=Client} ->
|
||||||
|
io:format("Dumping store.~n"),
|
||||||
|
Client ! {Names, DataStore},
|
||||||
|
file_serve(Names, DataStore)
|
||||||
|
end.
|
||||||
|
|
||||||
|
put(DataStore, Data) ->
|
||||||
|
<<HashBinary:256/big-unsigned-integer>> = crypto:hash(sha256, Data),
|
||||||
|
Hash = integer_to_list(HashBinary, 16),
|
||||||
|
case sets:is_element(Hash, DataStore) of
|
||||||
|
false ->
|
||||||
|
Path = "data/" ++ Hash,
|
||||||
|
case file:write_file(Path, Data) of
|
||||||
|
ok ->
|
||||||
|
io:format("Wrote ~s to file ~s~n", [Hash, Path]),
|
||||||
|
{ok, sets:add_element(Hash, DataStore), Hash};
|
||||||
|
{error, Reason} -> {error, Reason}
|
||||||
|
end;
|
||||||
|
true ->
|
||||||
|
io:format("Receive request to store previously stored ~s~n", [Hash]),
|
||||||
|
{ok, DataStore, Hash}
|
||||||
|
end.
|
||||||
|
|
||||||
|
get(ID) ->
|
||||||
|
Path = "data/" ++ ID,
|
||||||
|
file:read_file(Path).
|
||||||
|
|
||||||
|
upload(DataStore, Data) ->
|
||||||
|
case fserve:put(DataStore, Data) of
|
||||||
|
{ok, UpdatedDataStore, ID} ->
|
||||||
|
io:format("Successfully stored file.~n"),
|
||||||
|
{ok, UpdatedDataStore, ID};
|
||||||
|
{error, Reason} -> {error, Reason}
|
||||||
|
end.
|
||||||
|
|
|
@ -14,3 +14,9 @@
|
||||||
|
|
||||||
% fetch obtains the data referenced by an alternative name.
|
% fetch obtains the data referenced by an alternative name.
|
||||||
-record(fetch, {client, name}).
|
-record(fetch, {client, name}).
|
||||||
|
|
||||||
|
% stop tells the server to shutdown.
|
||||||
|
-record(stop, {client}).
|
||||||
|
|
||||||
|
% dump tells the server to send the current state of the system.
|
||||||
|
-record(dump, {client}).
|
||||||
|
|
Loading…
Reference in New Issue