---------------------------------------------------------------------------------------------------
				KOMUNIKACJA mserverS
---------------------------------------------------------------------------------------------------
#./install-server
kopiuje pliki mserverS oraz runserverS do /home/SYSBUF/
---------------------------------------------------------------------------------------------------
katalog SERVER-S zawiera sources i aplikacje skompilowana mserverS
oraz
katalog SERVER-S/clientSS-lib zawiera sources oraz  aplikacje clientS, clientSS oraz biblioteke
katalog SERVER-S/CLIENT-S-TESTOWY - zawiera testowa weresje clientS (stara wersja sources)
katalog SERVER-S/trim-time - zawiera procedury dla ustawiania czasu 


---------------------------------------------------------------------------------------------------
aplikacja jest uruchamiana w momencie boot systemu
- mserverS - nasluchuje na porcie 8890
- clientS - do komunikacji z serverem, powinien byc zainstalowany w CONTROLLER
aplikacja jest przenaczona do komunicaji pomiedzy STEROWNIKIEM i BUFOREM
- BUFFER 
	- nalezy zainstalowac w /home/SYSBUF
	- skopiowac plik runserverS oraz mserverS
	- skopiowac skrypt m-srvSd do /home/SYSBUF (uzycie tylko do czynnosci serwisowych)
	- utowrzyc:mkdir -p /mnt/tmp oraz ustawic chmod o+rw /mnt/tmp
	- zainstlowac tmpfs na /mnt/tmp: mount -t tmpfs -o size=1m tmpfs /mnt/tmp 
	- uruchomic wraz boot systemu
Uwaga: utworznie RAM disku typu tmpfs nie jest konieczne, ale w ten sposob zmniejszana jest liczba
       zapisow do TMP w pamieci flashprom. Ponadto pliki w TMP nie maja znacznia po reboot lub crash
       OS BUFFER. 
 
-clientS
	- skipiowac do CONTROLLERa
	- wysla do zapisu "W00&dane_do zapisu" (ozn. bufor W00 .. W99) [100 buforow]
	- odczyt z bufora danych "R00" ozn. bufor R00 .. W00 [100 buforow]
	- bufory sa przechowywane tymczasowo w /mnt/tmp BUFFORA

przyklady:
zapis danych do bufora W47: client "W47&dane_przekazywane_do_STEROWNIKA" 
odczyt danych z bufora R47: client "R47"
Uwagi 
1. bufor oznaczony jako Wxx jest tylko do zapisu
2. bufor oznaczony jak Rxx jest tylko odczyu 
3. bufory Wxx oraz Rxx sa komplementarne tzn. reakcja sterownika na zapis do Wxx pojawi sie
   w buforze Rxx, tzn. np. odpowiedz na akcje W47 pojawi sie w buforze R47.
przesylajac str. nalezy przesylac dane w cudzyslowie np. "R47" a nie R47  
---------------------------------------------------------------------------------------------------


KLIENT

UWAGA! w katalogu SERVER-S jest tylko klient testowy, natomiast
aplikacje:
clientS
oraz clientSS
znajduja sie w katalogu SERVER-S/clientS-lib

klient przekazuje lancuchy znakow w nastepujacy sposob:

operacja zapisu do bufora /mnt/tmp/W00 (BUFFER)

przyklad:
clientS "W00&nazwa_operacji=parametr1&parametr2...


dla odczytu danych z bufora /mnt/tmp/R00 (BUFFER)

przyklad:
clientS "R00"

przypadek zadania synchronizacji czasu jest szczegolny i funkcja jest wywolywana 
poprzez:
clientS "TRIMTIME"


liczba buorow do uzycia 00..99
wpisanie niepopranego kodu bufora np "S00", "Wz7" itp. powoduje zwrot kodu bledu
---------------------------------------------------------------------------------------------------
source: client-S.c
kompilacja: gcc client-S.c -o clientS
lub za pomoca skryptu: ./compile-client
---------------------------------------------------------------------------------------------------
../clientS-lib/client-Slib.c 
rowniez w wersji skompilowanej: client-Slib.o (oraz header: client-Slib.h)
funkcja zamiast aplikacji KLIENTA (clientS), ktora moze byc uzyta w aplikacji nadrzednej.
Wykonuje te same czynnosci co aplikacja clientS


---------------------------------------------------------------------------------------------------
SERVER

W odroznieniu od NODES nazwa bufora nie znajduje sie w pliku /home/SYSBUF/SERVER_ID
standardowo jest to nazwa "SERVER-S". Jesli zajdzie konicznosc dolozenia kolejnego
BUFFERa konieczne bedzie zminienie tej nazwy w pliku zrodlowym mserver-S.c 
w linii: 
#define SERVER_ID "SERVER-S" (default)
po czym nalezuy plik skompilowac ./compile-server

QUREY  (REPLY-odczyt)zapisuje do dwoch buforow, ktore musza znajdowac sie w katalogu servera:
/mnt/tmp/ - dla danych przesylanych przez klienta na server

pliki buforowanych danych maja postac:
/mnt/tmp/W00 itd.  bufory: W00...W99 (zapisuje dane do W-bufora i kasuje zawartosc R-bufora )
/mnt/tmp/R00 itd. bufory: R00...R99 (odczytuje dane z R-bufora bez kasowania zawartosci)
Uwaga, zapis do W-bufora kasuje zapisy R-bufora i zostawia napis: Rxx=NULL.
postac danych:
W-bufor: Wxx<dane przesylane> lub Wxx=NULL(jesli main-loop odczytala dane)
R-bufor: Rxx<dane przesylane> lub Rxx=NULL(jesli client przeslal nowe dane)

zwracane bledy i nformacje do klienta:
ERROR=-1 - blad: "cannot open W-buffor" np. z powodu braku /mnt/tmp
ERROR=-2 - blad: "cannot open R-buffor" np. brak jest /mnt/tmp/
ERROR=-3 - blad: "incorrect call" np.Wxx/Rxx zostanie podane blednie np. S7a
INFOR= 1 - "data has been written to buffor" - informacja o sukcesie zapisu 


NOTE:
Serwer pracuje wielowatkowo, max liczba watkow jest w #define i jest ustalana przed kompilacja

Default config mserverS:
#define port=8890 - port comunikacji - nalezy ustawic taki sam dla clientS w CONTROLLER
#define MAX_LENGTH_CLIENT_MESSAGE 2048 - max. wielkosc bufora dla przekazu danych
#define RAMDISK "/mnt/tmp/"  - katalog dla plikow: Wxx i Rxx oraz addr
#define SERVER_ID "SERVER-S" - nazwa zwracana przez BUFFER po zapytaniu "H00"

#define CLIENT_IP "10.0.0.10" - adress IP CONTROLERA jesli bedzie typu "static" 
clientS_IP_check=0 - flaga globalna dla ustawienia sprawdzania IP CONTROLERA
		     jesli client_IP_check=0 to CLIENT_IP nie bedzie sprawdzane
		     jesli client_IP_check=1 to zadeklarowny CLIENT_IP bedzie sprawdzany

--------------------------------------------------------------------------------------------------
source: mserver-S.c
kompilacja: gcc mserver-S.c -o mserverS -lpthread
lub za pomoca skryptu: ./compile-server
Serwer pracuje quiet-mode 

---------------------------------------------------------------------------------------------------
Uruchamianie (tylko ako root podczas czynnosci servisowych:
./m-srvd start - uruchamia aplikacje w tle
./m-srvd stop - zatrzymuje aplikacje

mozna tez polaczyc z service w tym celu nalezy:
1. przekopiowac m-srvSd do katalogu /etc/init.d/
2. wykonac: chkconfig --add m-srvSd
3. service m-srvSd start - uruchamia aplikacja trwale tzn. po reboot
   service m-srvSd stop - deaktywuje usluge m-srvd 









