Advertisement
Guest User

Untitled

a guest
Apr 10th, 2019
125
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
Erlang 3.74 KB | None | 0 0
  1. %%%-------------------------------------------------------------------
  2. %%% @author ErykSikora
  3. %%% @copyright (C) 2019, <ErykSikora>
  4. %%% @doc
  5. %%%
  6. %%% @end
  7. %%% Created : 10. kwi 2019 13:25
  8. %%%-------------------------------------------------------------------
  9. -module(pollution_server).
  10. -author("eryks").
  11.  
  12. %% API
  13. -export([start/0, stop/0, addStation/2, addValue/4, removeValue/3,
  14.   getOneValue/3, getStationMean/2, getDailyMean/2, getAreaMean/3]).
  15.  
  16. start() ->
  17.   PID = spawn(fun() -> init() end),
  18.   register(pserv, PID).
  19.  
  20. init() ->
  21.   Monitor = pollution:createMonitor(),
  22.   loopServer(Monitor).
  23.  
  24. addStation(Name, Position) ->
  25.   pserv ! {addStation, Name, Position}.
  26.  
  27. addValue(NameOrPosition, Date, Type, Value) ->
  28.   pserv ! {addValue, NameOrPosition, Date, Type, Value}.
  29.  
  30. removeValue(NameOrPosition, Date, Type) ->
  31.   pserv ! {removeValue, NameOrPosition, Date, Type}.
  32.  
  33. getOneValue(NameOrPosition, Date, Type) ->
  34.   pserv ! {getOneValue, NameOrPosition, Date, Type}.
  35.  
  36. getStationMean(NameOrPosition, Type) ->
  37.   pserv ! {getStationMean, NameOrPosition, Type}.
  38.  
  39. getDailyMean(Date, Type) ->
  40.   pserv ! {getDailyMean, Date, Type}.
  41.  
  42. getAreaMean(NameOrPosition, Radius, Type) ->
  43.   pserv ! {getAreaMean, NameOrPosition, Radius, Type}.
  44.  
  45. % Zwracać przez self()
  46. loopServer(Monitor) ->
  47.   receive
  48.     {addStation, Name, Position} -> NewMonitor = pollution:addStation(Monitor, Name, Position),
  49.       case NewMonitor of
  50.         {monitor, _, _} -> loopServer(NewMonitor);
  51.         stationAlreadyExistsError -> stationAlreadyExistsError,
  52.           loopServer(Monitor);
  53.         badPositionError -> badPositionError,
  54.           loopServer(Monitor);
  55.         badMonitorError -> badMonitorError,
  56.           loopServer(Monitor)
  57.       end;
  58.  
  59.     {addValue, NameOrPosition, Date, Type, Value} -> NewMonitor = pollution:addValue(Monitor, NameOrPosition, Date, Type, Value),
  60.       case NewMonitor of
  61.         {monitor, _ , _} -> loopServer(NewMonitor);
  62.         measurementAlreadyExistsError -> measurementAlreadyExistsError,
  63.           loopServer(Monitor);
  64.         stationDoesNotExistError -> stationDoesNotExistError,
  65.           loopServer(Monitor);
  66.         badMonitorError -> badMonitorError,
  67.           loopServer(Monitor)
  68.       end;
  69.  
  70.     {removeValue, NameOrPosition, Date, Type} -> NewMonitor = pollution:removeValue(Monitor, NameOrPosition, Date, Type),
  71.       case NewMonitor of
  72.         {monitor, _, _} -> loopServer(NewMonitor);
  73.         badMonitorError -> badMonitorError,
  74.           loopServer(Monitor)
  75.       end;
  76.  
  77.     {getOneValue, NameOrPosition, Date, Type} -> Value = pollution:getOneValue(Monitor, NameOrPosition, Date, Type),
  78.       case Value of
  79.         badMonitorError -> badMonitorError,
  80.           loopServer(Monitor);
  81.         _ -> io:format("~w ~n", [Value]),
  82.           loopServer(Monitor)
  83.       end;
  84.  
  85.     {getStationMean, NameOrPosition, Type} -> Value = pollution:getStationMean(Monitor, NameOrPosition, Type),
  86.       case Value of
  87.         badMonitorError -> badMonitorError,
  88.           loopServer(Monitor);
  89.         _ -> io:format("~w ~n", [Value]),
  90.           loopServer(Monitor)
  91.       end;
  92.  
  93.     {getDailyMean, Date, Type} -> Value = pollution:getDailyMean(Monitor, Date, Type),
  94.       case Value of
  95.         badMonitorError -> badMonitorError,
  96.           loopServer(Monitor);
  97.         _ -> io:format("~w ~n", [Value]),
  98.           loopServer(Monitor)
  99.       end;
  100.  
  101.     {getAreaMean, NameOrPosition, Radius, Type} -> Value = pollution:getAreaMean(Monitor, NameOrPosition, Radius, Type),
  102.       case Value of
  103.         badMonitorError -> badMonitorError,
  104.           loopServer(Monitor);
  105.         _ -> io:format("~w ~n", [Value]),
  106.           loopServer(Monitor)
  107.       end;
  108.  
  109.     stop -> ok;
  110.  
  111.     _ -> loopServer(Monitor)
  112.   end.
  113.  
  114. stop() ->
  115.   pserv ! stop.
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement