Research and Development 1/^Archief/2009-2010/04/Fase 1

Uit Werkplaats
Ga naar: navigatie, zoeken
Bagjoke.jpg

Research and Development 1

Patrick van Bommel
Sjaak Smetsers


 © comments



  • Property "Auteur1" (as page type) with input value "  Research and Development 1/^Archief/2009-2010/04Gebruiker:Tim Cooijmans" contains invalid characters or is incomplete and therefore can cause unexpected results during a query or annotation process.
  • Property "Auteur2" (as page type) with input value "  Research and Development 1/^Archief/2009-2010/04Gebruiker:Manu Drijvers" contains invalid characters or is incomplete and therefore can cause unexpected results during a query or annotation process.
  • Property "Auteur3" (as page type) with input value "  Research and Development 1/^Archief/2009-2010/04Gebruiker:Patrick Verleg" contains invalid characters or is incomplete and therefore can cause unexpected results during a query or annotation process.
  • Property "Auteur4" (as page type) with input value "  Research and Development 1/^Archief/2009-2010/04" contains invalid characters or is incomplete and therefore can cause unexpected results during a query or annotation process.

Fase 1

Server Applicatie

Agenda Lezen

Java-code om een ical bestand te lezen en er de eerstvolgende afspraak uit te halen:

Gebruikte bronnen:


Data versturen

Code om connecties (sockets) te openen en data verzenden.

Toelichting:

Java en IPv6

In Java hoef je niet expliciet rekening te houden met IPv6. Als het OS van de server en het OS van de client IPv6 ondersteunen, kan je IPv6 adressen gebruiken op dezelfde manier als je normaal IPv4 gebruikt.
Using IPv6 in Java is easy; it is transparent and automatic. Unlike in many other languages, no porting is necessary. In fact, there is no need to even recompile the source files. [...] You can run the same bytecode for this example in IPv6 mode if both your local host machine and the destination machine (taranis) are IPv6-enabled.

(bron: http://java.sun.com/j2se/1.5.0/docs/guide/net/ipv6_guide/index.html)

Server initieert de verbinding

Momenteel zet de server een connectie op naar de client, in plaats van andersom. Dat is me handiger; een client (een lamp bijvoorbeeld) heeft niet altijd een interface waarop je kan instellen hoe je server heet. De server heeft dat natuurlijk wel. Als de server de verbinding initieert, hoeft de lamp geen schermpje te hebben (ip adres kan je uitlezen via router, eventueel wachtwoord kan de fabrikant met een stickertje op het apparaat plakken).

We evalueren nog of dit de beste aanpak is.

TCP vs. UDP

Als protocol kiezen we TCP. Het voordeel van TCP is dat het protocol error-correctie heeft, waar UDP dat niet heeft. Dat houdt dus in dat je er via TCP zeker van kan zijn dat pakketten aankomen. Dit is voor ons doel essentieel. UDP heeft snelheid als grootste voordeel. Voor ons doel is dit niet erg belangrijk. We kiezen daarom voor TCP.


Gebruikte bronnen:

Protocol

Een apparaat heeft attributen, op deze attributen kun je de volgende operaties uitvoeren:
GET:
Geef de waarde van het attribuut
SET:
Zet de waarde van het attribuut
SUBSCRIBE:
Meld je aan om op de hoogte te worden gehouden van veranderingen.
LISTEN:
Geef aan bij welke events het attribuut de waarde van het event moet krijgen.

Verder is er nog:
EVENT:
Wordt gestuurd naar de aangemelde apparaten als dat attribuut veranderd.

Attributen zitten in een tree structuur: 
Je kan GETs uitvoeren op "mappen", hierbij krijg je de inhoud van de map op niveau 1.
Je kan GETs uitvoeren op attributen, hierbij krijg je de waarde en type van het attribuut.
Je kan SETs uitvoeren op attributen, hierbij zend je de beoogte waarde in het goede type.
Je kan SUBSCRIBEs uitvoeren op attributen, hierbij zend je je eigen key en IP-adres en of je wilt afmelden
Je kan LISTENs uitvoeren op attributen, hierbij zend je het adres en het pad van het event waarbij het attribuut veranderd moet worden.

Bericht SEND: 
[SIGN van ontvanger, ?? bytes][UNIXTIME, 4bytes] +

voor GET:		[ATTRIBUTE URI]
voor SET:		[ATTRIBUTE URI][TYPE][VALUE]
voor SUBSCRIBE: 	[ATTRIBUTE URI][KEY of device to send events to][IPV6 to send events to]
voor UNSUBSCRIBE: 	[ATTRIBUTE URI][IPV6 to send events to]
voor LISTEN:    	[ATTRIBUTE URI to listen][ATTRIBUTE URI to change][IPV6 to listen to]
voor UNLISTEN:		[ATTRIBUTE URI to listen][ATTRIBUTE URI to change][IPV6 to listen to]
voor EVENT:		[ATTRIBUTE URI][TYPE][VALUE]

Bericht RET: 
[SIGN van verzender, ?? bytes][UNIXTIME, 4bytes] +
voor: 			[ATTRIBUTE URI][TYPE][VALUE]


Implementatie van het protocol

De implementatie van het protocol is verplaatst naar de Eindproduct-pagina.