---------------------------------------------------------------------------------------------------
				KOMUNIKACJA mserverC
---------------------------------------------------------------------------------------------------
#./install-server
kopiuje pliki mserverC oraz runserverS do /home/SYSCON/
---------------------------------------------------------------------------------------------------
katalog SERVER-S zawiera sources i aplikacje skompilowana mserverC
oraz
katalog SERVER-
katalog SERVER-C/trim-time - zawiera procedury dla ustawiania czasu 


---------------------------------------------------------------------------------------------------
aplikacja jest uruchamiana w momencie boot systemu
- mserverC - nasluchuje na porcie 8891
- clientC - do komunikacji z serWerem, powinien byc zainstalowany w SKZ
aplikacja jest przenaczona do komunicaji pomiedzy STEROWNIKIEM i SKZ
- SKZ
	- nalezy zainstalowac w /home/SYSCON
	- skopiowac plik runserverS oraz mserverC
	- skopiowac skrypt m-srvCd do /home/SYSCON (uzycie tylko do czynnosci serwisowych)C/clientCC-lib zawiera sources oraz  aplikacje clientC, clientCC oraz biblioteke
katalog SERVER-C/CLIENT-C-TESTOWY - zawiera testowa weresje clientC (stara wersja sources)
	- utowrzyc:mkdir -p /mnt/tmp oraz ustawic chmod o+rw /mnt/tmp
	- zainstlowac tmpfs na /mnt/tmp: mount -t tmpfs -o size=10m 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 CNTRLLER. 
 
-clientC
	- skipiowac do SKZa
	- 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 CONTROLLERa

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-C jest tylko klient testowy, natomiast
aplikacje:
clientC
oraz clientCS
znajduja sie w katalogu SERVER-C/clientC-lib

klient przekazuje lancuchy znakow w nastepujacy sposob:

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

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


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

przyklad:
clientC "R00"

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


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


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

Identyfikator serwera  przypadku NODE 
zwracany jest jako CONT (jesli node nie jest jeszcze zainicjalizowany tzn. urzadzenie
jest wkladane jako kolejne) oraz Nxxx gdzie xxx=[000..255] (np. 0056) jesli CONT
jest juz zainijowany tzn. ma ustawiony adres "sztywny" w sieci sterujacej RS485.
Oznaczenie jest przypisywane w momencie instalacji na stale i potem ta nazwa bedzie
potrzebna dla uruchomienia clientCC "xxxx" "H00" "<pocelcenie>"
Nazwa NODE znajduje sie w /home/SYSCON/SERVER_ID (w CONTROLLER ten plik jest zastapiony
stala nazwa, standardowo "CONT". 

zapisuje do 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
ERROR=-20 blad otwrarcia pliku SERVER_ID
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 mserverC:
#define port=8891 - port comunikacji - nalezy ustawic taki sam dla clientC 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 "CONT" - nazwa zwracana przez NODE po zapytaniu "H00"

#define CLIENT_IP "10.0.0.10" - adress IP CONTROLERA jesli bedzie typu "static" 
clientC_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-C.c
kompilacja: gcc mserver-C.c -o mserverC -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-srvCd do katalogu /etc/init.d/
2. wykonac: chkconfig --add m-srvCd
3. service m-srvCd start - uruchamia aplikacja trwale tzn. po reboot
   service m-srvCd stop - deaktywuje usluge m-srvd 









