#include <SPI.h>         
#include <Ethernet.h>

// adres mac który nadajemy dla arduino
byte mac[] = {
  0xDE, 0xAD, 0xBE, 0xEF, 0xFE, 0xED
};
//Numer IP Arduino 
IPAddress ip(192, 168, 0, 5);

//Port na którym Arduino będzie nasłuchiwało
unsigned int localPort = 8888;      
EthernetServer server(localPort);

void initializeNetwork() {
  Ethernet.begin(mac, ip);
}

void checkNetwork() {  
  EthernetClient client = server.available();
  /*
  jesli nadeszło połączenie od klienta zapisujemy przysłaną komendę
  ustaliłem że znak # oznacza koniec polecenia
  Docelowo warto zabezpieczyć program aby nikt nie przysłał zbyt długiego ciągu znaków
  i na przykład zrywać połączenie jeśli nie przyszedł znak końca polecenia po powiedzmy 20 znakach
  */
  if (client) {
    String clientMsg ="";
    while (client.connected()) {
      if (client.available()) {
        char c = client.read();
        clientMsg+=c;//zapisujemy otrzymane polecenie do String'a
        if (c == '#') {
          /*
          otrzymaliśmy całe polecenie. Próbujemy je wykonać
          */
          Serial.println("Message from Client:"+clientMsg);//print it to the serial
          executeRemoteCommand(clientMsg);
          /*
          obsługa polecenia wykonana, można zamknąć połączenie aby opuścić pętlę while
          */
          client.stop();
        }
      }
    }
    
  }
}

void executeRemoteCommand(String command) {
  Serial.println(command);
  /*
  jeśli otrzymane polecenie to polecenie zmiany stanu oświetlenia LED w salonie - wykonujemy polecenie
  */
  if (command == SALON_LED_REMOTE_COMMAND) {
    toogleSalonLed();
  }
}