Toon posts:

[vb] email en schemerlamp

Pagina: 1
Acties:

Verwijderd

Topicstarter
Als ik mail krijg op m'n pc, dan wordt een programmaatje gestart die een schemerlamp aan m'n seriele poort laat knipperen :9

Vet cool zul je zeggen. Nou, als ik 2 mailtjes snel achter elkaar krijg, crashte het 2e programmatje, omdat de seriele poort al open is. Dit heb ik opgelost door eerst te checken of de poort niet in gebruik is.

Maar, als ik 2 mailtjes achter elkaar binnen krijg, knippert de lamp maar 1 keer. Dat wil ik niet.

Dus ik dacht. Ik maak 1 server, die altijd loopt. Als ik een mailtje krijg, stuurt een client-programma een berichtje naar die server.

Maar wat voor techniek moet ik hiervoor gebruiken. Ik heb wel wat gehoord van DDE, maar ik kan geen docu vinden :?

  • Gerco
  • Registratie: Mei 2000
  • Laatst online: 14-09 17:42

Gerco

Professional Newbie

In VB kun je het beste ActiveX gebruiken. Je kunt een ActiveX exe project als server gebruiken en de clients kunnen daar dan messages naar sturen.

Wil je het een beetje minder resource-hungry doen, kun je je servertje op een tcp-poort laten listenen en de clients daaraan laten connecten en doorgeven dat er e-mail is.

- "Als ik zou willen dat je het begreep, legde ik het wel beter uit!" | All number systems are base 10!


Verwijderd

Topicstarter
OK, ik schrijf een (very basic) http-server, met behulp van de MS Winsock control array.

Hoe zou jij het queuen dan aanpakken. Ik heb werkelijk geen idee hoe VB met events om gaat. Het draait toch gewoon in 1 thread?

  • Gerco
  • Registratie: Mei 2000
  • Laatst online: 14-09 17:42

Gerco

Professional Newbie

Op zondag 21 oktober 2001 22:30 schreef Doekman het volgende:
Hoe zou jij het queuen dan aanpakken. Ik heb werkelijk geen idee hoe VB met events om gaat. Het draait toch gewoon in 1 thread?
Klopt helemaal. Maar je kunt wel meerdere clients "tegelijk" afhandelen. Je krijgt netjes de DataArrived events die bij de winsocks horen 1 voor 1 afgeleverd, hoef je zelf helemaal niks aan te doen.

Of is dat niet wat je bedoelt?

- "Als ik zou willen dat je het begreep, legde ik het wel beter uit!" | All number systems are base 10!


  • marcusk
  • Registratie: Februari 2001
  • Laatst online: 26-09-2023
Op maandag 22 oktober 2001 01:19 schreef Gerco het volgende:
Of is dat niet wat je bedoelt?
Ik denk dat ie bedoeld dat hij zo nog steeds een probleem heeft als de poort al open is bij een event, omdat er 2 snel achter elkaar komen.

Ik denk dat je het wel kunt oplossen door zoiets te doen:
code:
1
2
3
4
5
DO
  (wachten)
WHILE (poort in gebruik is)

stuur data

  • Gerco
  • Registratie: Mei 2000
  • Laatst online: 14-09 17:42

Gerco

Professional Newbie

Op maandag 22 oktober 2001 01:30 schreef marcusk het volgende:
Ik denk dat ie bedoeld dat hij zo nog steeds een probleem heeft als de poort al open is bij een event, omdat er 2 snel achter elkaar komen.
Lijkt me niet aan de orde. Aangezien je een inkomende connectie op poort 80 met een ANDERE winsock control en dus ook op een ANDERE poort accepteert. Je kunt dus gemakkelijk een stuk of 100 connecties tegelijk op die poort ontvangen en ze allemaal netjes 1 voor 1 afhandelen.

Anders zouden webservers het wel erg moeilijk gaan krijgen als dat niet kon :)

- "Als ik zou willen dat je het begreep, legde ik het wel beter uit!" | All number systems are base 10!


  • marcusk
  • Registratie: Februari 2001
  • Laatst online: 26-09-2023
jaaaaaa, maar ik het het over de seriele poort (lees de eerste post nog ff) :)

Verwijderd

Topicstarter
Ik zal het nog es schetsen.

Aan de onderkant heb inderdaad per TCP/IP verbinding een socket-control. Dit is event-based.

Aan de bovenkant heb ik 1 seriele poort. Als ik een bepaalde URL opvraag, moet de web-server de schermlamp laten knipperen (die zit dus aan de seriele poort).

Ik dacht zelf om in het hoofdprogramma het volgende te hebben:
code:
1
2
3
Dim blnQueueLock As Boolean
Dim arrQueue(25) As String
Dim intQueueBegin As Integer, intQueueEnd As Integer

De events van de web-socket plaatsen een event in arrQueue. Het hoofdprogramma handeld steeds het oudste event af.

Synchronisatie gebeurd met blnQueueLock. Als deze True is, moet er gewacht worden (random tijd). Anders wordt ie op True gezet, de opdracht wordt in de queue gezet (of eruit gehaald) en dan wordt de lock weer vrij gegeven door blnQueueLock op false te zetten.

Mijn vragen:
-Gaat dit goed
-Wat gebeurd er eigenlijk op proces niveau
-Het wachten, kan dat met een loopje, of moet ik een Sleep methode importeren.

  • Gerco
  • Registratie: Mei 2000
  • Laatst online: 14-09 17:42

Gerco

Professional Newbie

Aha... ik had gedacht dat het serieele gedeelte al klaar was, aangezien dat al werkt.

Maar inderdaad is een queue de beste oplossing. Je moet gewoon een loopje hebben met DoEvents() (een soort sleep) erin, zodat windhoos zijn eigen events kan processen. En dat loopje controleert dan of de poort in gebruik is en zo niet, processt 'ie het volgende item in de queue.

- "Als ik zou willen dat je het begreep, legde ik het wel beter uit!" | All number systems are base 10!


Verwijderd

offtopic:
en wat nu als je aan het lezen bent, en je krijgt een mailbom }) }) }) }) })

Verwijderd

Topicstarter
Een timer-control in het hoofdform, die elke seconde checkt of er iets in de queue staat.
Pagina: 1