Ik ben dus bezig om een nieuw bowling score systeem te bouwen. Het is natuurlijk erg belangrijk om met een goed ontwerp te beginnen anders kom je later in de problemen.
Ik heb vorige week ook al een topic hier over geopend alleen dat was een ander ontwerp en later ging het over een discussie wat niet veel meer te maken had met mijn vraag. Daarom zet ik het nieuwe ontwerp in een nieuw topic.
Ik zou graag van jullie je mening willen horen over het ontwerp. Er zijn een aantal dingen die totaal nieuw voor mij zijn, zoals o.a. IPC. Daarom vraag ik het hier dus eerst voordat ik met een mogelijk verkeerd ontwerp ga beginnen.
Het gaat dus om een score systeem voor bowling banen. Het zal ontwikkeld worden voor het linux platform. De bedoeling is dat er 2 of 4 banen bediend gaan worden met 1 computer. Verder zal er 1 centrale computer aanwezig zijn die zo alle banen kan aansturen en informatie kan opvragen.
Een zeer belangrijk punt is dat mocht er wat fout gaan bij 1 bowling baan, de andere banen daar absoluut geen last van mogen hebben.
Een plaatje van het ontwerp kan je hier zien: Plaatje
Het systeem bestaat uit de volgende onderdelen:
- Main applicatie
- Bowling applicatie
De main applicatie wordt tijdens het opstarten van linux gestart. Dit programma zal vervolgens een aantal instellingen uitlezen uit de database die aanwezig is op de pc. In de database staat onder andere hoeveel banen de pc moet gaan bedienen en welke baannummers dat zijn.
Vervolgens zal de main applicatie x keer (dus hoeveel banen de pc moet gaan bedienen) de bowling applicatie opstarten. Hij zal dan het baannummer meesturen als parameter, zodat de bowling applicatie precies weet welke baan hij is.
Als er dus nu 1 bowling applicatie vastloopt, dan kunnen de andere mensen gewoon door bowlen zonder problemen.
Main:
In de main applicatie zit een TCPServer die multi-threaded is. Ik gebruik hiervoor de Indy TCP Server. Deze dient er dus voor om met de centrale pc te kunnen communiceren.
De InputListeningThread is een aparte "worker" thread die continu staat te kijken of er een nieuwe input is. Dit kan een joystick beweging/knop zijn of een worp (via bal detectie). Er zal dus een driver voor gebruikt worden. Deze driver wordt door een engelse programmeur momenteel gemaakt.
Als laatste komt er een MessageListeningThread in. Dit zal ook een aparte "worker" thread zijn, die continu aan het kijken is of er berichten in message queue staan. Ik dacht er aan om System V Message Queue als IPC methode te gebruiken. Zodra er een bericht is, zal deze opgehaald worden en verder afgehandeld worden.
Als de main applicatie wat wilt versturen naar 1 van de bowling applicatie's dan doet die dat door een bericht naar de message queue van de bowling applicatie te sturen.
Bowling applicatie:
Ook hier zal een TCP server draaien. Hiervoor zal ook de Indy TCP server voor gebruikt gaan worden. Normaal gesproken communiceert de centrale computer direct met de bowling applicatie's. Maar er zijn een paar commando's die door de main applicatie uitgevoerd zullen worden. De TCPServerThread op de Main, Bowling applicatie 1-4 maken dus allemaal gebruik van hetzelfde ip adres maar op verschillende poorten.
De Message Listening Thread zal hetzelfde werken als bij de main applicatie. Iedere bowling applicatie heeft dus een aparte message queue. Zo kan de applicatie op baan 1 dus iets sturen naar baan 4 door een bericht te sturen naar de message queue van bowling baan 4.
Het systeem maakt gebruik van CCD camera's om zo te kunnen zien hoeveel pins er zijn omgevallen. Aangezien er gebruik wordt gemaakt van 1 camera per banenpaar, kan het dus voorkomen dat zowel baan 1 als baan 2 tegelijk een foto (capture) willen opvragen. Ik zal daarom gebruik gaan maken van Video For Linux II omdat het hierbij mogelijk is om tegelijkertijd een foto op te vragen. (Bij Video For Linux I is het niet mogelijk als 2 applicaties de driver (/dev/video0) tegelijk willen openen)
Graag hoor ik het commentaar
op dit ontwerp.....
[edit]
Er zal steeds communicatie plaats vinden tussen de main applicatie en de bowling applicatie's. De main applicatie stuurt om de zoveel tijd een "alive" bericht. Als de bowling applicatie dan geen ACK terug stuurt, zal de main de bowling applicatie killen en vervolgens de applicatie opnieuw starten.
Ik heb vorige week ook al een topic hier over geopend alleen dat was een ander ontwerp en later ging het over een discussie wat niet veel meer te maken had met mijn vraag. Daarom zet ik het nieuwe ontwerp in een nieuw topic.
Ik zou graag van jullie je mening willen horen over het ontwerp. Er zijn een aantal dingen die totaal nieuw voor mij zijn, zoals o.a. IPC. Daarom vraag ik het hier dus eerst voordat ik met een mogelijk verkeerd ontwerp ga beginnen.
Het gaat dus om een score systeem voor bowling banen. Het zal ontwikkeld worden voor het linux platform. De bedoeling is dat er 2 of 4 banen bediend gaan worden met 1 computer. Verder zal er 1 centrale computer aanwezig zijn die zo alle banen kan aansturen en informatie kan opvragen.
Een zeer belangrijk punt is dat mocht er wat fout gaan bij 1 bowling baan, de andere banen daar absoluut geen last van mogen hebben.
Een plaatje van het ontwerp kan je hier zien: Plaatje
Het systeem bestaat uit de volgende onderdelen:
- Main applicatie
- Bowling applicatie
De main applicatie wordt tijdens het opstarten van linux gestart. Dit programma zal vervolgens een aantal instellingen uitlezen uit de database die aanwezig is op de pc. In de database staat onder andere hoeveel banen de pc moet gaan bedienen en welke baannummers dat zijn.
Vervolgens zal de main applicatie x keer (dus hoeveel banen de pc moet gaan bedienen) de bowling applicatie opstarten. Hij zal dan het baannummer meesturen als parameter, zodat de bowling applicatie precies weet welke baan hij is.
Als er dus nu 1 bowling applicatie vastloopt, dan kunnen de andere mensen gewoon door bowlen zonder problemen.
Main:
In de main applicatie zit een TCPServer die multi-threaded is. Ik gebruik hiervoor de Indy TCP Server. Deze dient er dus voor om met de centrale pc te kunnen communiceren.
De InputListeningThread is een aparte "worker" thread die continu staat te kijken of er een nieuwe input is. Dit kan een joystick beweging/knop zijn of een worp (via bal detectie). Er zal dus een driver voor gebruikt worden. Deze driver wordt door een engelse programmeur momenteel gemaakt.
Delphi:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
| TInputListeningThread = class(Thread) private protected procedure Execute; override; public end; { TInputListeningThread } procedure TInputListeningThread.Execute; begin while not Terminated do begin // Wacht totdat er een nieuwe input is // Zal dus via een read functie gaan die blocking is // Stuur de input door naar de juiste bowling applicatie Sleep(...); // anders treedt er starvation op?? end; end; |
Als laatste komt er een MessageListeningThread in. Dit zal ook een aparte "worker" thread zijn, die continu aan het kijken is of er berichten in message queue staan. Ik dacht er aan om System V Message Queue als IPC methode te gebruiken. Zodra er een bericht is, zal deze opgehaald worden en verder afgehandeld worden.
Delphi:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
| TMessageListeningThread = class(Thread) private protected procedure Execute; override; public end; { TMessageListeningThread } procedure TMessageListeningThread.Execute; begin while not Terminated do begin // Wacht totdat er een nieuw bericht in de message queue staat // Zal dus via een read functie gaan die blocking is // verwerk het bericht Sleep(...); // anders treedt er starvation op?? end; end; |
Als de main applicatie wat wilt versturen naar 1 van de bowling applicatie's dan doet die dat door een bericht naar de message queue van de bowling applicatie te sturen.
Bowling applicatie:
Ook hier zal een TCP server draaien. Hiervoor zal ook de Indy TCP server voor gebruikt gaan worden. Normaal gesproken communiceert de centrale computer direct met de bowling applicatie's. Maar er zijn een paar commando's die door de main applicatie uitgevoerd zullen worden. De TCPServerThread op de Main, Bowling applicatie 1-4 maken dus allemaal gebruik van hetzelfde ip adres maar op verschillende poorten.
De Message Listening Thread zal hetzelfde werken als bij de main applicatie. Iedere bowling applicatie heeft dus een aparte message queue. Zo kan de applicatie op baan 1 dus iets sturen naar baan 4 door een bericht te sturen naar de message queue van bowling baan 4.
Het systeem maakt gebruik van CCD camera's om zo te kunnen zien hoeveel pins er zijn omgevallen. Aangezien er gebruik wordt gemaakt van 1 camera per banenpaar, kan het dus voorkomen dat zowel baan 1 als baan 2 tegelijk een foto (capture) willen opvragen. Ik zal daarom gebruik gaan maken van Video For Linux II omdat het hierbij mogelijk is om tegelijkertijd een foto op te vragen. (Bij Video For Linux I is het niet mogelijk als 2 applicaties de driver (/dev/video0) tegelijk willen openen)
Graag hoor ik het commentaar
[edit]
Er zal steeds communicatie plaats vinden tussen de main applicatie en de bowling applicatie's. De main applicatie stuurt om de zoveel tijd een "alive" bericht. Als de bowling applicatie dan geen ACK terug stuurt, zal de main de bowling applicatie killen en vervolgens de applicatie opnieuw starten.
[ Voor 4% gewijzigd door Verwijderd op 17-03-2003 07:29 ]