Toon posts:

Programming Contest: Koehandel

Pagina: 1 2 3 4 Laatste
Acties:

Onderwerpen


  • Arjan
  • Registratie: juni 2001
  • Niet online

Arjan

copyright is wrong

Topicstarter
Mede-auteur:
  • Bolukan
  • Registratie: oktober 2002
  • Laatst online: 21-09 07:58

Bolukan

Programmeerwedstrijd: Koehandel
Na enige tijd stilte is het wel weer eens tijd geworden voor een nieuwe programmeer wedstrijd op GoT!

In de zoektocht naar een spelletje dat niet zomaar te brute-forcen is ben ik uitgekomen bij 'koehandel'.
Voor wie niet bekend is met het spel, het is zaak om kwartetten bij elkaar te handelen door deze te kopen in een veiling of door met andere spelers in onderhandeling te gaan. Aan het eind worden zowel de punten op de kwartetten als hun waarde meegeteld. Wie de hoogste score heeft is de winnaar. Het geld dat gebruikt wordt tijdens het handelen heeft bij afloop geen waarde meer!
Een van de aardige aspecten van het spel is de mogelijkheid te bluffen, dit levert ook voor computerspelers leuke optimalisatiemogelijkheden op, maar indien je betrapt wordt, krijgt iedereen inzage in je financiën!

Spelregels
Voor de standaard regels van koehandel, zie wikipedia
Let op!
De spelregels voor deze contest wijken op details af van het standaard spel.
• bieden tijdens een veiling gebeurt sequentieel
• de 'geldezel' wordt vertegenwoordigd door handelswaar 'G'
• als de handelswaar op is en er alleen nog gehandeld kan worden, leidt een verkeerde handel initiëren tot het niet meer mogen starten van handel!

communicatie
Voor de communicatie en de scheidsrechter functie heb ik een server gemaakt, waarbij ik flink naar de rummikub opzet van Soultaker uit het programmeervuur heb gekeken.
Ook nu zal de communicatie via HTTP GET messages gaan plaatsvinden, de mogelijke communicatie velden zijn als volgt:

market
het unieke id van de markt waarin de speler zich bevindt, dit wordt altijd meegestuurd en is handig indien een speler in meerdere spellen actief is. Dit hoeft niet gezet te worden door de speler en is altijd een getal groter dan 0.

id
Het unieke id van de speler, dit wordt altijd meegestuurd en is handig indien een speler meerdere keren in een spel (als je tegen jezelf oefent) of in meerdere spellen actief is. Dit hoeft niet gezet te worden door de speler en is altijd een getal groter dan 0.

type
Het type communicatie dat gaande is.
Deze waarde gebruik je om te bekijken welke actie de server voor ogen heeft. De volgende waarden zijn mogelijk:

type=start
Deze wordt verzonden als een nieuwe beurt begint. Als je deze type ontvangt, mag je kiezen of je gaat onderhandelen (trade) met een specifieke speler, of dat je een veiling start (auction).

Indien je wilt gaan onderhandelen, zul je in je reply moeten aangeven met wie je wilt onderhandelen (W, N of E), over welke goederen (A t.m. J) en wat je openingsbod is (combinatie van biljetten).
Indien je een fout maakt in een van deze gegevens of als je te lang tijd neemt om te antwoorden, zal het spel automatisch omgezet worden in een veiling.
Fouten zijn onder andere het opgeven van een ongeldige tegenstander, ongeldige goederen of een ongeldig bod. Ook een tegenstander selecteren die de goederen niet heeft, of geld bieden wat je niet bezit, wordt gezien als een fout.

In principe is de auction de default actie wanneer je niks teruggeeft, dus is antwoorden niet strikt noodzakelijk. Let wel op, als alle handelswaar verhandeld is, is het alleen nog mogelijk te handelen! Als je nu geen geldige trade opzet, dan kun je geen handel meer starten en ben je overgeleverd aan je medespelers!

type=trade
Als je dit type ontvangt, dan ben je door een medespeler uitgedaagd tot een handel. Wie je tegenspeler is kun je zien door naar opponent te kijken, welke handelswaar zie je aan goods, van zijn bod zie je hoeveel kaarten je tegenspeler geboden heeft. Had je tegenspeler een bod gedaan van "nttf" (70) dan zie jij "QQQQ". Je kan ervoor kiezen om geen tegenbod te doen, of je kan proberen meer te bieden dan je tegenstander. Indien je een ongeldig bod doet verlies je meteen de handel!

type=auction
Als je dit type ontvangt, dan heeft een van je medespelers een veiling gestart. Via auctioneer kom je erachter wie de veiling gestart heeft, aan opponent kun je zien wie het huidige hoogste bod heeft ( indien er nog geen bod uitgebracht is wijst opponent naar de auctioneer. De hoogte van het huidige bod lees je af uit money, en aan goods kun je zien waar op geboden wordt.
Als reactie hoef je slechts een bod uit te brengen door in money een waarde te zetten die groter is dan het huidige bod. Indien je dit niet doet wordt je actie automatisch als pass geïnterpreteerd en doe je niet meer mee voor deze veilingronde.
Als je echter zelf de auctioneer bent en je ontvangt dit type, dan is de veilingronde ten einde en mag je kiezen wat je met de handelswaar doet. Als auctioneer heb je altijd het overkooprecht, dat wil zeggen dat je voor het hoogste bod altijd zelf de handelswaar mag kopen. Als je dit overkooprecht uitoefent betaal je aan de hoogste bieder.
----
Als je zelf de bieding gestart bent dan hoef je niets te doen totdat de veilingronde klaar is en je de mogelijkheid krijgt om je overkooprecht uit te oefenen.

type=information
Dit is een type dat je alleen maar kan ontvangen en waarop ook geen antwoord mogelijk is. Dit type wordt gebruikt om informatie te geven over het spelverloop. Als opponent op 'N' staat, goods op 'A' en money op 'ttf', dan betekend dit dat de speler tegenover jou A heeft gekocht voor 70,-.
Er is een uitzondering hierop, namelijk, wanneer een speler gebluft heeft. Als een speler een bod heeft gedaan dat hij niet kan betalen, dan krijgen alle spelers te zien hoeveel geld de speler in de hand heeft. De informatie zou dan net als bovenstaande kunnen zijn, met uitzondering dat er in het message gedeelte "bluffed" staat.

type=collect
Ook dit type kun je alleen maar ontvangen en wordt gebruikt om duidelijk te maken dat de server heeft besloten dat er geld of goederen bij jou weggehaald moeten worden.
Als er money opgehaald wordt na een auction, dan kun je nog aangeven hoe dit opgehaald moet worden, zo kun je de waarde 50 betalen met 1xf, of 5xt. Indien je niks aangeeft maakt de server een inschatting en bericht je wat hij voor betaling heeft gedaan via type=information.

type=receive
Dit is ongeveer hetzelfde als het collect type, alleen wordt er nu aangeduid dat je geld of goederen ontvangt.

type=end
Als je deze ontvangt is het spel ten einde, en kun je aan de message string zien wie er gewonnen heeft, als het goed is ben je al op de hoogte natuurlijk ;)
De message string is samengesteld met de opponent en zijn score. bijvoorbeeld:
'W750N2020E=500'
om aan te geven dat speler 'W' 750 punten heeft, 'N' 2020 en 'E' 500.

opponent
Dit veld wordt gebruikt om aan te geven wie de tegenspeler is, mogelijke waarden zijn W, N, E, respectievelijk West, North, East. Als speler zit je altijd op de zuidelijke positie (S). Als je een tegenstander uitkiest zul je dus ook een van deze waardes moeten kiezen.

Tijdens een auction verwijst opponent naar de speler die als niets wijzigt het handelswaar ontvangt. Dit begint met de auctioneer, dan de speler met het hoogste bod en uiteindelijk met de speler die met het handelswaar ontvangt.

auctioneer
Dit veld is in principe gelijk aan het opponent veld, alleen wordt het nu gebruilkt om de veilingmeester te duiden. Deze waarde hoef je dan ook nooit zelf te zetten.

goods
De goederen waarover gehandeld wordt. Er zijn tien verschillende goederen:

NaamWaarde
A10
B40
C90
D160
E250
F350
G500
H650
I800
J1000

Als je bijvoorbeeld wil onderhandelen over item 'A', dan gebruik je 'goods=A'
Daarnaast kan er nog een min '-' teken voorstaan, dit heeft alleen betekenis als het type information is. Als deze min ervoor staat, betekent dit dat de betreffende speler deze hoeveelheid heeft moeten afstaan.

Voorbeelden:
typegoodstoelichting
auctionA-JGood die wordt aangeboden.
tradeA(A)-J(J)Goods die worden verhandeld. Als opponent en jij er 2 van bezitten, zullen uiteindelijk toch 2 worden overgedragen. Altijd in combinatie van money en opponent
collectA(A)-J(J)Goods die worden afgenomen om te worden overgedragen aan opponent.
receive (na auction)A-JGoods die worden ontvangen.
receive (na trade)A(A)-J(J)Goods die worden ontvangen. Opponent is gegeven.
information (na auction)A(A)-J(J)Goods die worden ontvangen, in combinatie met betaald geld (-0/-QQ20).
information (na trade)A(A)-J(J)Goods die worden ontvangen, in combinatie met betaald geld (-QQ).
information-A(A)-J(J)Goods die worden afgegeven, in combinatie met ontvangen geld (QQ) van opponent.


money
Via dit veld wordt de hoogte van een bod gecommuniceerd, mogelijke eenheden zijn

moneywaardeinitieelvia geldezel
n02-
t104-
f5011
h100-1
T200-1
F500-1
Q 8)

Elke combinatie hiervan is mogelijk. Dit geldt voor zowel ontvangen als verzenden.
Daarnaast kan er nog een min '-' teken voorstaan, dit heeft alleen betekenis als het type information is. Als deze min ervoor staat, betekent dit dat de betreffende speler deze hoeveelheid heeft moeten afstaan. Daarnaast kan er ook de letter 'Q' in voorkomen. Elke letter staat gelijk aan een item, maar de exacte waarde hiervan is onbekend. In geval van een auction staat de waarde er als nummer achter, bijvoorbeeld "money=QQ60". Dit kan betekenen dat er "tf" gebruikt is om te betalen, maar het zou ook "ff" kunnen zijn, indien de speler niet anders kon betalen.

Voorbeelden:
typemoneytoelichting
auctionFThftHoogste bod tot nu toe. Dit hoeft niet over een te komen met werkelijke kaarten. Bijvoorbeeld FFFFF wordt betaald met FFFFTTh, want 5xF zit niet in het spel.
tradeQQAantal kaarten dat door tegenstander wordt geboden. Goods en opponent zijn gegeven.
collect (na trade)FThftnEerder bod dient betaald te worden. Geen response nodig.
collect (na auction)FThftEerder bod dient betaald te worden. Response in de kaartjes om minimaal het bedrag te voldoen. Zonder response incasseert de server.
receiveFThftnGeld dat wordt ontvangen. Opponent wordt meegegeven, tenzij geld van de geldezel wordt ontvangen.
informationFThfGeld dat gegeven opponent ontvangt van geldezel.
informationQQ20Geld dat opponent ontvangt na auction.
information-QQ20Geld dat opponent betaalt voor aangegeven goods na auction. Kan ook -0 zijn als niemand bood en kaartje gratis wordt ontvangen.
informationQQGeld dat opponent ontvangt na trade. Voor de verloren goods staat een - (min).
information-QQGeld dat opponent betaalt voor trade van de ontvangen goods.


message
Ter informatie of bij een ongeldige actie, zal de server een information type teruggeven, met in de message een string die beschrijft wat er aan de hand is. Deze message bevat geen spaties, slechts underscores. Veel voorkomende messages zijn:
typemessagetoelichting
informationbeginEen nieuw spel begint.
informationbluffedNa een auction blijkt een andere speler niet de benodigde money in bezit te hebben. In opponent staat wie en in money staat zijn werkelijk bezit.
informationsecond_bluff_not_allowedBij een auction mag je maar 1 keer betrapt worden op een bod wat je niet kunt betalen. De tweede keer vervalt je bod.
informationno_opponement_specifiedJe probeert een handel op te zetten en vergeet opponent=W|N|E mee te geven.
informationopponent_goods_do_not_matchJe probeert een handel op te zetten zonder dat de opponent er minimaal 1 van bezit.
informationgoods_not_owned_by_playerJe probeert een handel op te zetten zonder er zelf minimaal 1 van te bezitten.
informationinvalid_bidJe probeert een handel op te zetten met geld dat je niet bezit.
auctionW10N20E30W40Biedgeschiedenis: spelers kunnen meerdere keren voorkomen.
tradeequal_bidBeide spelers boden hetzelfde. Je wordt gevraagd opnieuw een bod uit te brengen.
endSxWxNxExEindscores


Score
De puntentelling is simpel, als het spel klaar is, dan wordt het aantal kwartetten dat een speler heeft gebruikt om de waarde van zijn goederen (alleen de kwartetten) te vermenigvuldigen.
Als een speler drie kwartetten heeft, bv. AAAA, BBBB en CCCC ( 10, 40, 90 ) dan is zijn score 3 * ( 10 + 40 + 90 ) = 420.
Een speler met maar één kwartet van FFFF ( 350 ) heeft een score van 1 * ( 350 ) = 350 en heeft dus verloren van de speler met drie lagere kwartetten.
Eventueel geld dat over is na de onderhandelingen telt niet mee voor de score!

Voorbeeld
Voor diegene die nu in hun hoofd tl;dr hebben knipperen, hier een voorbeeldronde.

directiongoodstypeopponentmoneyauctioneermessageuitleg
server -> Sstart server start ronde
S -> serverauction speler kiest voor veiling
server -> WFauctionEEserver vraagt W voor response
W -> server t W bied 't'
server -> NFauctionEtNE10server vraagt N voor response
N -> server N past
server -> EFauctionNtWN10E0server vraagt E voor response
E -> server tttt E bied 'tttt'
server -> WFauctionNttttEW0N40server slaat S ( auctioneer ) over en vraagt W voor response
W -> server ntttt W bied 'ntttt', hetgeen niet hoger is dan het vorige bod
server -> SFauctionEtttt W10N0E40W40server interpreteert response van W als pas en biedt auctioneer de koopwaar aan
S -> server tttt S heeft er 'tttt' voor over en oefent dus zijn kooprecht uit
server -> SFreceive server informeert S dat hij de koopwaar in ontvangst mag nemen
server -> ScollectEtttt maar er moet wel nog betaald worden, 'tttt' om precies te zijn
S -> server tttt S geeft aan dat hij met vier 'tien' kaarten wil betalen
server -> EreceiveWtttt server informeert E dat hij 'tttt' opgehaald heeft bij S en dat E deze nu mag hebben
server -> WFinformationE-QQQQ40 W wordt op de hoogte gebracht van de handel, er zijn vier kaarten verhandeld met een waarde van 40
server -> NFinformationN-QQQQ40 idem voor N
server -> WinformationNQQQQ40 Dan krijgt W te horen wie er geld ontvangen heeft
server -> NinformationWQQQQ40 idem voor N


directiongoodstypeopponentmoneyauctioneermessageuitleg
server -> Nstart server start ronde
N -> serverHtradeWnntt Speler geeft aan met speler 'W' te willen onderhandelen voor goederen H en wil daar 20 voor bieden
server -> EHtradeEQQQQ server informeert W dat hij uitgedaagd wordt door E, die wil onderhandelen over H en er vier kaarten voor overheeft
E -> server ttff speler EE biedt 120 terug
server -> Einformation invalid_bidDe server informeert E dat dit een ongeldig bod was ( in dit geval had de speler slechts de het startkapitaal ter beschikking )
server -> EHcollectE De server haalt nu de goederen op van E, aangezien deze met zijn verkeerde bod effectief gepast heeft.
server -> NHreceiveW N wordt geïnformeerd dat hij goederen H ontvangt
server -> NcollectWnntt Daarnaast moet winnaar natuurlijk wel betalen
server -> EreceiveEnntt server informeert E dat hij 20 heeft ontvangen van N (E ten opzichte hem)
server -> SHinformationN-QQQQ S krijgt informatie
server -> WHinformationW-QQQQ W krijgt informatie
server -> S-HinformationNQQQQ S krijgt informatie
server -> W-HinformationWQQQQ W krijgt informatie



praktisch
Je hebt vijf seconden de tijd voor het opzetten van een connectie en het geven van een antwoord in de vorm van een plain text. Gebruik hiervoor het format van een GET-statement: ?var1=value1&var2=value2.
Je mag met meerdere dezelfde spelers in één spel gaan zitten tijdens het testen/debuggen maar tijdens het eindtournooi zal dit natuurlijk niet plaatsvinden. Twee spelers met elkaar laten samenspelen zit er daarom niet in :)

Je kan een spel beginnen door de server een GET string te sturen die als volgt opgebouwd is:
?connect&url1=http://iets.nl&url2=etc...
Zo kunnen er tot maximaal vier verschillende urls meegegeven worden. ( mogen ook dezelfde zijn als je je speler tegen zichzelf wil laten spelen )
Daarnaast kun je ook via deze pagina een spel starten: http://www.houbenweb.nl/market.html
Deze maakt deze query voor je. Posities die niet ingevuld zijn worden door de server aangevuld met spelers die op alle response passen.

Voor de broodnodige debugging worden er logs aangemaakt voor alle spelers.
Deze zijn op te vragen met de volgende GET string:
?log=ID
waarbij ID het id is dat je bij het connecten ( en elke request van de server ) krijgt.

Als laatste de locatie van de server, deze vind je op http://houbenweb.nl:56789

Jullie krijgen ruim twee maanden de tijd om jezelf voor te bereiden op het eindtournooi, zodat we in de eerste week van het nieuwe jaar erachter komen wie de beste koehandelaar weet te programeren!

Ik wens jullie allemaal veel succes en hoop dat iedereen een poging waagt!

Voor dit topic is toestemming van de PRG crew

[Voor 255% gewijzigd door Bolukan op 23-11-2010 12:33]

oprecht vertrouwen wordt nooit geschaad


  • BSTNjitRam
  • Registratie: november 2004
  • Laatst online: 26-09 09:16
Hmm, ben zeer benieuwd wat ik hiervoor kan verzinnen... In principe IN.

Na 1x doorlezen lijkt het echt enorm ingewikkeld ;) Dus we gaan maar eens beginnen met de boel schematisch op te zetten.

Heb wel al een vraagje over je voorbeeldronde wat me nu al opviel:
Bij de uitleg: "welke speler heeft wat gewonnen en voor hoeveel" staat 2x Opponent = W en 1x Opponent = N.
Moet dit 3x W zijn of zie ik iets over het hoofd?

Bordspellenopruiming! https://www.marktplaats.nl/u/martijn/14875712/


  • _js_
  • Registratie: oktober 2002
  • Laatst online: 25-09 03:02
*O* Nieuwe Contest *O*

Bij de vorige programmeervuur deden er een aantal PHPers mee en die hebben misschien wat meer moeite met het onthouden van de status van het spel dan anderen, is het voor hun misschien handig om de server bij elke beurt de status van het spel mee te geven aan de spelers, dus hoeveel van elk dier elke speler heeft, hoeveel geldkaarten ze hebben en bij een veiling of je veilingmeester bent?

Komen er ook oefentoernooien zodat we in kunnen schatten hoe sterk onze speler is?

En de score die er nu staat is alleen per spel, hoe worden de punten geteld over meerdere rondes? Worden alle punten die je in je spelen hebt verzameld opgeteld? Of een vast aantal punten voor 1e, 2e, 3e en 4e plaats?

Ook zie ik in jouw regels staat dat de veilingmeester een hoger bod mag doen op een veiling, maar in Wikipedia staat dat een veilingmeester alleen hetzelfde bod mag doen. Welke regel geldt hier?

Is het niet in kunnen zien van wat alle tegenstanders bieden op een veiling met opzet zo ontworpen? Aangezien je in het reguliere spel wel weet wat de andere spelers bieden.

[Voor 27% gewijzigd door _js_ op 26-10-2010 00:58]


  • Darkstone
  • Registratie: mei 2009
  • Laatst online: 26-04-2014

Darkstone

Het kan altijd sneller.

count me in *O*
heb ik meteen een gelegenheid om me meer te verdiepen in php, moet ik wel ergens een host vandaan toveren...

offtopic:
suggesties?

'de sheet' -- Dell Latitude E6520, 1080p, i7-2820QM, X25-M 80GB, 16GB, 97Wh
Gezocht: Baan software development, C++, gave software, omgeving Delft.


  • Typnix
  • Registratie: maart 2009
  • Nu online
darkstone schreef op dinsdag 26 oktober 2010 @ 01:03:
count me in *O*
heb ik meteen een gelegenheid om me meer te verdiepen in php, moet ik wel ergens een host vandaan toveren...

offtopic:
suggesties?
Zet een VMetje op met VirtualBox of VMWare server? :?

  • Arjan
  • Registratie: juni 2001
  • Niet online

Arjan

copyright is wrong

Topicstarter
BSTNjitRam schreef op maandag 25 oktober 2010 @ 23:40:
Hmm, ben zeer benieuwd wat ik hiervoor kan verzinnen... In principe IN.

Na 1x doorlezen lijkt het echt enorm ingewikkeld ;) Dus we gaan maar eens beginnen met de boel schematisch op te zetten.

Heb wel al een vraagje over je voorbeeldronde wat me nu al opviel:
Bij de uitleg: "welke speler heeft wat gewonnen en voor hoeveel" staat 2x Opponent = W en 1x Opponent = N.
Moet dit 3x W zijn of zie ik iets over het hoofd?
Dit klopte niet, ik heb het aangepast :)
_js_ schreef op dinsdag 26 oktober 2010 @ 00:34:
*O* Nieuwe Contest *O*

Bij de vorige programmeervuur deden er een aantal PHPers mee en die hebben misschien wat meer moeite met het onthouden van de status van het spel dan anderen, is het voor hun misschien handig om de server bij elke beurt de status van het spel mee te geven aan de spelers, dus hoeveel van elk dier elke speler heeft, hoeveel geldkaarten ze hebben en bij een veiling of je veilingmeester bent?
Je kan je status natuurlijk naar een filetje wegschrijven, maar mocht dit echt een issue zijn dan wil ik wel overwegen het een en ander wat aan te passen.
Komen er ook oefentoernooien zodat we in kunnen schatten hoe sterk onze speler is?
Dit kun je natuurlijk altijd zelf organiseren met andere deelnemers, ook hier, als er veel vraag naar is wil ik wel wat opzetten.
En de score die er nu staat is alleen per spel, hoe worden de punten geteld over meerdere rondes? Worden alle punten die je in je spelen hebt verzameld opgeteld? Of een vast aantal punten voor 1e, 2e, 3e en 4e plaats?
Ik had een afvalrace voor ogen, waarbij de laatste steeds het veld moet ruimen tot er maar vier over zijn, die gene worden dan ingedeeld op puntenaantal.
Ook zie ik in jouw regels staat dat de veilingmeester een hoger bod mag doen op een veiling, maar in Wikipedia staat dat een veilingmeester alleen hetzelfde bod mag doen. Welke regel geldt hier?
Hoger of gelijk is mogelijk, al zie ik niet wat de toegevoegde waarde is voor een auctioneer om hoger te bieden dan het hoogste bod :+
Is het niet in kunnen zien van wat alle tegenstanders bieden op een veiling met opzet zo ontworpen? Aangezien je in het reguliere spel wel weet wat de andere spelers bieden.
Ik zal nog even kijken of ik hier wat kan aanpassen, het is wel interessante informatie natuurlijk :)

oprecht vertrouwen wordt nooit geschaad


  • Domdo
  • Registratie: juni 2009
  • Laatst online: 24-09 13:11
Uit de TS begrijp ik dat een speler mogelijk aan meerdere spellen tegelijk mee kan doen, betekent dat ook dat een speler dan meer dan 1 request tegelijk kan binnen krijgen en dus minder resources beschikbaar heeft ???

Het vervelende is dat de meeste mensen zo wie zo al beschikking heeft over meerdere resources maar als de ene speler meer tegelijk moet verwerken dan een andere lijkt het mij dat het nog oneerlijker kan worden.

  • Arjan
  • Registratie: juni 2001
  • Niet online

Arjan

copyright is wrong

Topicstarter
Als je meerdere spelers op een pc laat runnen moeten die natuurlijk resources delen, maar volgens mij is dit probleem niet noodzakelijk CPU intensief en kun je vooral veel winst behalen door slimme algoritmes :)

oprecht vertrouwen wordt nooit geschaad


  • Dricus
  • Registratie: februari 2002
  • Laatst online: 11:55

Dricus

ils sont fous, ces tweakers

Zoals ik het uit de TS en uit de Wiki begrijp zijn de biedingen bij een koehandel (type=trade) voor de tegenstander verborgen. Je kunt dan alleen zien hoeveel geldkaarten de tegenstander heeft neergelegd. Bij een veiling (type=auction) kun je de biedingen van je tegenstanders wel zien. In dat opzicht is de beschrijving in de TS dus correct volgens mij.

Stel niet uit tot morgen wat je vandaag nog tot morgen kunt uitstellen...


  • Arjan
  • Registratie: juni 2001
  • Niet online

Arjan

copyright is wrong

Topicstarter
Dricus schreef op dinsdag 26 oktober 2010 @ 11:29:
Zoals ik het uit de TS en uit de Wiki begrijp zijn de biedingen bij een koehandel (type=trade) voor de tegenstander verborgen. Je kunt dan alleen zien hoeveel geldkaarten de tegenstander heeft neergelegd. Bij een veiling (type=auction) kun je de biedingen van je tegenstanders wel zien. In dat opzicht is de beschrijving in de TS dus correct volgens mij.
Het probleem is dat je momenteel alleen de hoogste bieding kan zien, bv:
W bied 10
N bied 20
E krijgt dan alleen te zien dat N zijn opponent is en deze 20 heeft geboden.
E weet dus niet wat/of W geboden heeft hetgeen interessant kan zijn voor zijn bod.
Ik denk dat ik in de message string tijdens een auction ronde weergeef wat er geboden is, dat veranderd niks aan de huidige opzet en spelers die deze informatie willen gebruiken hebben deze beschikbaar.

oprecht vertrouwen wordt nooit geschaad


  • Dricus
  • Registratie: februari 2002
  • Laatst online: 11:55

Dricus

ils sont fous, ces tweakers

Aah, op die manier. Zo had ik het nog niet bekeken inderdaad. Ik kan me voorstellen dat dat wel interessante informatie is ja.

Nog een vraagje over het connecten: Krijg je na het sturen van een ?connect request met één of meerdere URL's erin ook meteen een antwoord van de server waarin te vinden is welke URL welk ID heeft gekregen? Dat lijkt me bij het testen handig als je één server hebt die requests voor meerdere AI's afhandelt. Dan weet de server naar welke AI hij welk request moet routeren.

PS:
Complimenten voor het starten van deze contest trouwens! Ook een erg leuke keuze voor dit spel, vind ik.

[Voor 5% gewijzigd door Dricus op 26-10-2010 11:44]

Stel niet uit tot morgen wat je vandaag nog tot morgen kunt uitstellen...


  • MLM
  • Registratie: juli 2004
  • Laatst online: 19-01-2018

MLM

aka Zolo

De market en id velden die je altijd mee krijgt zijn samen in principe uniek voor elke speler lijkt me, dus die kan je gebruiken :)

Afhankelijk van hoeveel tijd ik heb zal ik eens kijken of ik mee doe.

-niks-


  • Domdo
  • Registratie: juni 2009
  • Laatst online: 24-09 13:11
Arjan schreef op dinsdag 26 oktober 2010 @ 11:18:
Als je meerdere spelers op een pc laat runnen moeten die natuurlijk resources delen, maar volgens mij is dit probleem niet noodzakelijk CPU intensief en kun je vooral veel winst behalen door slimme algoritmes :)
Het gaat mij er meer om, dat het meerdere spelers tegelijk laat runnen, wel iets van eerlijk gaat. Niet dat er 1 speler is die alleen maar 1 krijgt, en dan een andere speler in één keer 10 tegelijk krijgt.

  • Arjan
  • Registratie: juni 2001
  • Niet online

Arjan

copyright is wrong

Topicstarter
Dricus schreef op dinsdag 26 oktober 2010 @ 11:43:
[...]
Nog een vraagje over het connecten: Krijg je na het sturen van een ?connect request met één of meerdere URL's erin ook meteen een antwoord van de server waarin te vinden is welke URL welk ID heeft gekregen? Dat lijkt me bij het testen handig als je één server hebt die requests voor meerdere AI's afhandelt. Dan weet de server naar welke AI hij welk request moet routeren.
De eerste url past bij het eerste id en zo verder.
PS:
Complimenten voor het starten van deze contest trouwens! Ook een erg leuke keuze voor dit spel, vind ik.
dank!
Domdo schreef op dinsdag 26 oktober 2010 @ 11:51:
[...]


Het gaat mij er meer om, dat het meerdere spelers tegelijk laat runnen, wel iets van eerlijk gaat. Niet dat er 1 speler is die alleen maar 1 krijgt, en dan een andere speler in één keer 10 tegelijk krijgt.
Ik snap niet helemaal wat je bedoeld, maar als je connect aan de server wordt er maar één spel gestart, zodra dit afgerond is zul je een nieuwe connect moeten doen naar de server alvorens je weer kan spelen. Tijdens tournooien zal dit anders verlopen, maar dan mogen er überhaupt niet meerdere dezelfde spelers aan één contest meedoen. ( dit ivm. elkaar aan handelswaar helpen :) )

oprecht vertrouwen wordt nooit geschaad


  • Dricus
  • Registratie: februari 2002
  • Laatst online: 11:55

Dricus

ils sont fous, ces tweakers

Arjan schreef op dinsdag 26 oktober 2010 @ 12:17:
De eerste url past bij het eerste id en zo verder.
Zoals je zelf al aageeft gaat dit bij het eindtoernooi anders werken. Het lijkt me wel handig dat je even aangeeft hoe dat dan precies gaat werken zodat we onze progsels daarop kunnen voorbereiden :).

Ik ga in ieder geval proberen mee te doen. Mijn progsel zal waarschijnlijk in C# geschreven worden. Ik maak dan zelf een simpele HTTP server en in verband met het bovenstaande zorg ik wel dat elke instantie van mijn AI op zijn eigen poort draait. Dan hoef ik me om dat hele ID niet zo druk te maken.

Stel niet uit tot morgen wat je vandaag nog tot morgen kunt uitstellen...


  • Arjan
  • Registratie: juni 2001
  • Niet online

Arjan

copyright is wrong

Topicstarter
Dricus schreef op dinsdag 26 oktober 2010 @ 13:03:
[...]

Zoals je zelf al aageeft gaat dit bij het eindtoernooi anders werken. Het lijkt me wel handig dat je even aangeeft hoe dat dan precies gaat werken zodat we onze progsels daarop kunnen voorbereiden :).
[...]
De eerste vier ids zijn altijd alleen maar bij de connectende speler bekend, dat zal niet veranderen. Maar aangezien de ids bij elke query van de server meegestuurd worden lijkt me dat verder geen probleem.

oprecht vertrouwen wordt nooit geschaad


  • Darkstone
  • Registratie: mei 2009
  • Laatst online: 26-04-2014

Darkstone

Het kan altijd sneller.

in ontvang ?type=start en wil een veiling starten, moet ik dan verplicht 5 seconden wachten? Er staat geen manier tussen om te zeggen "ja we gaan veilen, draai de bovenste kaart maar om".

als ik het goed begrijp gebeurt het bieden sequentioneel, en kan er maximaal 1x worden geboden.
het is dus niet mogelijk om te starten met een laag bod, om te kijken wat de rest gaat doen (om vervolgens het bod weer te verhogen)

ik zie ook nergens staan met hoeveel money je nu eigenlijk begint, kan je je money ook wisselen? of ben je gebonden aan de kaartjes die je hebt.

plus, als ik de huidige opzet zie kan je niet zien wie en wanneer voor welke handelswaar heeft geboden, dat is uitermate handig om je tegenspelers dwars te zitten, door bijvoorbeeld een type handelswaar waarvan je tegenspeler er 3 van heeft, voor zijn neus weg te pikken >:)
Je hebt een halve seconde om te reageren op het opzetten van een connectie, vervolgens heb je vijf seconden de tijd om een antwoord te verzinnen indien dit nodig is.
Je mag met meerdere dezelfde spelers in één spel gaan zitten tijdens het testen/debuggen maar tijdens het eindtournooi zal dit natuurlijk niet plaatsvinden. Twee spelers met elkaar laten samenspelen zit er daarom niet in :)
kan die limiet van een halve seconde worden opgehoogd? anders mis je automatisch een ronde als je ping hoger is dan 500ms

'de sheet' -- Dell Latitude E6520, 1080p, i7-2820QM, X25-M 80GB, 16GB, 97Wh
Gezocht: Baan software development, C++, gave software, omgeving Delft.


  • Arjan
  • Registratie: juni 2001
  • Niet online

Arjan

copyright is wrong

Topicstarter
darkstone schreef op dinsdag 26 oktober 2010 @ 14:10:
in ontvang ?type=start en wil een veiling starten, moet ik dan verplicht 5 seconden wachten? Er staat geen manier tussen om te zeggen "ja we gaan veilen, draai de bovenste kaart maar om".
[...]
In principe is de auction de default actie wanneer je niks teruggeeft, dus is antwoorden niet strikt noodzakelijk.
[...]
je kan dus volstaan door gewoon de connectie af te sluiten, of een lege string te sturen, of wat dan ook :)
als ik het goed begrijp gebeurt het bieden sequentioneel, en kan er maximaal 1x worden geboden.
het is dus niet mogelijk om te starten met een laag bod, om te kijken wat de rest gaat doen (om vervolgens het bod weer te verhogen)
Zolang er nog mensen aan het bieden zijn zul je steeds de gelegenheid krijgen een nieuw bod uit te brengen.
Pas als er twee mensen gepassed hebben stopt de veiling.
ik zie ook nergens staan met hoeveel money je nu eigenlijk begint, kan je je money ook wisselen? of ben je gebonden aan de kaartjes die je hebt.
Je bent gebonden aan de kaartjes die je hebt. Daarnaast krijg je nog geld via de 'geldezel' en door slim te bieden tijdens auctions/trade.
Vergeet niet, als je het hoogste bod hebt bij een veiling, maar de veilingmeester oefent zijn kooprecht uit, dan
ontvang je het hoogste bod.
plus, als ik de huidige opzet zie kan je niet zien wie en wanneer voor welke handelswaar heeft geboden, dat is uitermate handig om je tegenspelers dwars te zitten, door bijvoorbeeld een type handelswaar waarvan je tegenspeler er 3 van heeft, voor zijn neus weg te pikken >:)
Als je daar het geld voor hebt zou ik dat zeker doen!
Als je echter geen geld meer over hebt dan kunnen anderen in een trade zo je hele goederen leegroven ;)
kan die limiet van een halve seconde worden opgehoogd? anders mis je automatisch een ronde als je ping hoger is dan 500ms
Kan, maar 500ms is al een hele beste ping dacht ik zo.

oprecht vertrouwen wordt nooit geschaad


  • Dricus
  • Registratie: februari 2002
  • Laatst online: 11:55

Dricus

ils sont fous, ces tweakers

Nog een vraagje: Uit je voorbeeld lijkt het dat een speler zijn antwoord stuurt in de vorm van een GET request naar de server. Klopt dit, of stuur je die tekst gewoon terug als response op de GET request van de server? Als het een response is, dan lijkt het me handig dat je de syntax van zo'n response wat preciezer specificeert. Daarnaast zou een overzichtje van welke responses mogelijk zijn bij welke requests ook handig zijn.

Stel niet uit tot morgen wat je vandaag nog tot morgen kunt uitstellen...


  • Arjan
  • Registratie: juni 2001
  • Niet online

Arjan

copyright is wrong

Topicstarter
Dricus schreef op dinsdag 26 oktober 2010 @ 15:21:
Nog een vraagje: Uit je voorbeeld lijkt het dat een speler zijn antwoord stuurt in de vorm van een GET request naar de server. Klopt dit, of stuur je die tekst gewoon terug als response op de GET request van de server? Als het een response is, dan lijkt het me handig dat je de syntax van zo'n response wat preciezer specificeert. Daarnaast zou een overzichtje van welke responses mogelijk zijn bij welke requests ook handig zijn.
Het hoeft geen GET te zijn met alle headers enzo, gewoon een string over de socket terugsturen die eruit ziet als ?param=value&param=value etc.

Je response bestaat met uitzondering van het starten van een trade in principe alleen maar uit een hoeveelheid money geloof ik :)

oprecht vertrouwen wordt nooit geschaad


  • Vaan Banaan
  • Registratie: februari 2001
  • Niet online

Vaan Banaan

Heeft ook Apache ontdekt

Ik snap het geld even niet:
Bij aanvang van het spel ontvangt iedere speler als startkapitaal de volgende geldkaarten:
2 x 0
4 x 10
1 x 50

55 geldkaarten. Deze kaarten worden in het spel gebruikt om te betalen. De waarde van deze kaarten varieert van 0 tot 500 (10x0 20x10 10x5 5x100 5x200 5x500).
moet dat misschien 50 zijn?
En dan over de geldezel:
Onder de dierkaarten bevindt zich ook een geldezel. Wanneer deze kaart omgedraaid wordt ter veiling ontvangen alle spelers het volgende bedrag:
Bij de eerste ezelkaart 50
Bij de tweede ezelkaart 100
Bij de derde ezelkaart 200
Bij de vierde ezelkaart 500

Hoe krijg je deze informatie en is dat dan 1 biljet met de desbetreffende waarde of mag je zelf een setje verzinnen?
-edit- Ah ik snap het denk ik al, in het begin dus 2 x 0, 4 x 10 en 1 x 50 en gedurende het spel met de ezels 1 x (1 biljet van) 50, 1 x 100, 1 x 200 en 1 x 500. De aantallen in de wiki zijn voor een spel met max 5 spelers en hier spelen we met 4 spelers

-edit2-
hmm bij auction krijgt iedereen je biljetten te zien, ik kan dus niet gaan kloten door 100 te betalen met 'onzichtbaar' 1 x 100 + 1 x 0, waardoor het lijkt dat ik 2 x 50 heb gegeven?

Ik neem ook even aan dat je geen bieding > bedrag-in-handen mag doen. Wordt dat gezien als pass? Het lijkt me anders erg ingewikkeld worden als iemand heeft gebluft. Gaat de kaart dan naar de een na hoogste bieder, of gaat de bieding dan weer verder vanaf de een na hoogste bieder, etc.

[Voor 33% gewijzigd door Vaan Banaan op 26-10-2010 17:34]

500 "The server made a boo boo"


  • Arjan
  • Registratie: juni 2001
  • Niet online

Arjan

copyright is wrong

Topicstarter
Vaan Banaan schreef op dinsdag 26 oktober 2010 @ 16:58:
[...]
-edit2-
hmm bij auction krijgt iedereen je biljetten te zien, ik kan dus niet gaan kloten door 100 te betalen met 'onzichtbaar' 1 x 100 + 1 x 0, waardoor het lijkt dat ik 2 x 50 heb gegeven?

Ik neem ook even aan dat je geen bieding > bedrag-in-handen mag doen. Wordt dat gezien als pass? Het lijkt me anders erg ingewikkeld worden als iemand heeft gebluft. Gaat de kaart dan naar de een na hoogste bieder, of gaat de bieding dan weer verder vanaf de een na hoogste bieder, etc.
Tijdens de auction geef je aan wat je wil bieden voor de handelswaar, je hoeft dit echter niet te hebben!
Je kan meteen de eerste ronde tien miljoen miljard bieden, al denk ik dat de meeste medespelers wel door zullen hebben dat je bluft ;)

Als er sprake is van iemand die bluft, dan laat de server aan iedereen zien hoeveel deze speler echt heeft en vervolgens begint de veiling van voor af aan, alleen weet nu iedereen wat de bluffende speler te bieden heeft waardoor er voor deze speler waarschijnlijk weinig te halen valt :)

oprecht vertrouwen wordt nooit geschaad


  • Darkstone
  • Registratie: mei 2009
  • Laatst online: 26-04-2014

Darkstone

Het kan altijd sneller.

maar wat heeft dat voor zin? als je alles goed bijhoud weet je toch al automatisch precies wat elke speler heeft?

althans, ik neem een dat je medespelers bij een verhandeling (trade) te zien krijgen wat er precies word verhandeld.

kan ik dan, ook als mijn bieding klopt zeggen: ho ho ho, ik zat te bluffen! *bieding begint weer van voor af aan*

'de sheet' -- Dell Latitude E6520, 1080p, i7-2820QM, X25-M 80GB, 16GB, 97Wh
Gezocht: Baan software development, C++, gave software, omgeving Delft.


  • BSTNjitRam
  • Registratie: november 2004
  • Laatst online: 26-09 09:16
Je bluft alleen als je meer biedt dan je hebt. Als je kan betalen wat je biedt dan gaat de deal altijd door.

En als er tussen 2 spelers geruild wordt weet je alleen hoeveel kaarten er geruild worden en niet welke.
Dus dan weet je niet meer hoeveel elke speler precies heeft.

Bordspellenopruiming! https://www.marktplaats.nl/u/martijn/14875712/


  • Darkstone
  • Registratie: mei 2009
  • Laatst online: 26-04-2014

Darkstone

Het kan altijd sneller.

ik zie nog een bug, de geldezel word vertegenwoordigd door handelswaar G?
conflicteert met:
Arjan schreef op maandag 25 oktober 2010 @ 23:22:
NaamWaarde
A10
B40
C90
D160
E250
F350
G500
H650
I800
J1000

'de sheet' -- Dell Latitude E6520, 1080p, i7-2820QM, X25-M 80GB, 16GB, 97Wh
Gezocht: Baan software development, C++, gave software, omgeving Delft.


  • _js_
  • Registratie: oktober 2002
  • Laatst online: 25-09 03:02
@hierboven: waarom zou de geldezel niet ook een speelkaart kunnen zijn?
Arjan schreef op dinsdag 26 oktober 2010 @ 08:44:
Dit kun je natuurlijk altijd zelf organiseren met andere deelnemers, ook hier, als er veel vraag naar is wil ik wel wat opzetten.
Ik denk dat een/meer vooraf georganiseerde oefenrondes beter is, zodat er een doel is om naar toe te werken.
Hoger of gelijk is mogelijk, al zie ik niet wat de toegevoegde waarde is voor een auctioneer om hoger te bieden dan het hoogste bod :+
Het verschil is dat als ik 10 bied en het eerste deel van de veiling win en de veilingmeester geen geldkaarten van 10 heeft (maar wel hogere) dan kan de veilingmeester mijn kaart niet kopen.
Arjan schreef op dinsdag 26 oktober 2010 @ 21:16:
Als er sprake is van iemand die bluft, dan laat de server aan iedereen zien hoeveel deze speler echt heeft en vervolgens begint de veiling van voor af aan, alleen weet nu iedereen wat de bluffende speler te bieden heeft waardoor er voor deze speler waarschijnlijk weinig te halen valt :)
Is dit wel handig? Als die speler blijft bluffen dan zal het spel nooit eindigen.


Misschien nog handige informatie uit vorige Programmeervuren:
C CGI applicatie voor in een webserver: Soultaker in "Het Grote Tweakers Programmeervuur"
C# en andere .NET gebruikt System.Net.HttpListener (als admin draaien!), een voorbeeld van zeeslag webserver staat op MLM in "Programmeervuur zeeslag"
Java: Janoz in "Programmeervuur zeeslag"
En je kunt natuurlijk ook gewoon je PHP, ASP, etc. bij een webhost plaatsen. Alleen even zorgen dat je de status van elk spel (tijdelijk) opslaat, kwestie van serialiseren van je status object of array en wegschrijven naar een bestand/database/... met het spel-id.

[Voor 13% gewijzigd door _js_ op 26-10-2010 21:50]


  • Arjan
  • Registratie: juni 2001
  • Niet online

Arjan

copyright is wrong

Topicstarter
_js_ schreef op dinsdag 26 oktober 2010 @ 21:40:
@hierboven: waarom zou de geldezel niet ook een speelkaart kunnen zijn?

[...]

Is dit wel handig? Als die speler blijft bluffen dan zal het spel nooit eindigen.

[...]
Scherp.. Ik zal het aanpassen dat je een keer kan bluffen, een volgende overtreding wordt geïnterpreteerd als passen :)

oprecht vertrouwen wordt nooit geschaad


  • jbdeiman
  • Registratie: september 2008
  • Laatst online: 17:02
Wel binnen dezelfde veiling hoop ik, niet voor het hele spel?
Is het in het echte spel ook zo dat je als je bluft moet laten zien hoeveel je precies hebt? Misschien is het leuker om dan aan te geven: speler heeft niet genoeg. Daarnaast max 3x bluffen per veiling (dit kost niet heel veel tijd) en een melding teruggeven aan de speler als hij / zij hetzelfde bedrag of hoger probeert te bluffen bij een volgend deel van de veiling. Zo vang je al een (deels) domme speler af. Immers als je geen 150 kan bieden is 151 al helemaal onmogelijk ;)
Zo dwing je misschien ook e.e.a. af en gaat het bluffen wat verder dan alleen maar een keer bluffen en (omdat je het niet kan betalen) precies duidelijk te hebben wat de speler heeft.

  • Arjan
  • Registratie: juni 2001
  • Niet online

Arjan

copyright is wrong

Topicstarter
jbdeiman schreef op dinsdag 26 oktober 2010 @ 22:27:
Wel binnen dezelfde veiling hoop ik, niet voor het hele spel?
jup
Is het in het echte spel ook zo dat je als je bluft moet laten zien hoeveel je precies hebt?
jup
Misschien is het leuker om dan aan te geven: speler heeft niet genoeg. Daarnaast max 3x bluffen per veiling (dit kost niet heel veel tijd) en een melding teruggeven aan de speler als hij / zij hetzelfde bedrag of hoger probeert te bluffen bij een volgend deel van de veiling. Zo vang je al een (deels) domme speler af. Immers als je geen 150 kan bieden is 151 al helemaal onmogelijk ;)
Zo dwing je misschien ook e.e.a. af en gaat het bluffen wat verder dan alleen maar een keer bluffen en (omdat je het niet kan betalen) precies duidelijk te hebben wat de speler heeft.
Ik probeer zo dicht mogelijk bij het origineel te blijven, de regels die aangepast zijn zijn dit omdat ze anders voor een eindeloze loop zouden kunnen zorgen ( zoals de bluffende speler )

oprecht vertrouwen wordt nooit geschaad


  • Anoniem: 156876
  • Registratie: oktober 2005
  • Niet online
darkstone schreef op dinsdag 26 oktober 2010 @ 01:03:
count me in *O*
heb ik meteen een gelegenheid om me meer te verdiepen in php, moet ik wel ergens een host vandaan toveren...

offtopic:
suggesties?
offtopic:
Ik heb nog een host over die ik niet gebruik, als je me even PM't dan kunnen we vast wel iets regelen.. ;)

  • Vaan Banaan
  • Registratie: februari 2001
  • Niet online

Vaan Banaan

Heeft ook Apache ontdekt

Ok, met dat bluffen wordt volgens mij wel lachen. Maar ik zit toch even met de auction.
Ik moet dus bieden met de kaarten die ik in mijn handen heb? Anders gezegd: als ik een biljet van 200 heb en 2 van nul, kan ik geen honderd bieden? Want als ik het hoogste bod heb en de veilingmeester heeft geen 100 terug zou ik het kaartje niet mogen kopen. Valt dit dan ook onder 'bluffen'? Want ik dan kan de volgende ronde 200 bieden, dus wel hoger. Niet dat het ergens op slaat, want de andere spelers hebben mijn geldkaarten dan toch al gezien.

Als ik nu 1 biljet van 100 heb, 2 van 50, en 1 van 0 en ik wil 100 bieden, moet ik aangeven in welke combinatie ik ga betalen, dus money=ff of money=h Ik kan dus de anderen niet het bos in sturen.

Ik gooi dit hier trouwens zonder enig kennis van het spel op tafel.
Maar het lijkt me dat de kunst van deze programmeerwedstrijd voor een belangrijk deel is, uit zien te vinden wie hoeveel geld in zijn handen heeft en met welke bedragen. En dan zou ik het money verhaal met de kaartjes juist bij de veiling wel jammer vinden. Dus dan zou het bij type=auction misschien leuker zijn om bij money= een waarde aan de andere spelers te laten zien, in plaats van welke geldkaarten. En bij de info dan ook iets met Q's doen. Dus bijvoorbeeld:
Ik stuur ?money=h ik bied 100
De volgende speler ziet: ?market=1&id=3&type=auction&opponent=E&goods=A&money=100 Honderd geboden door Oost (dat ben ik vanuit zuid gezien) voor kaart A
Stel dat de rest past. De server weet dat ik ?money=h ook echt op handen heb en ik moet dokken.
?market=1&id=2&type=collect&opponent=E&money=h Geef 100 aan Oost (Vanuit mijn zuid gezien)
Vervolgens stuur ik dan ?money=nh Ik betaal 100 met een biljet van 0 en een biljet van 100
De server krijgt dus iets anders dan ik heb geboden (ik had ook money=ff kunnen sturen), maar het bedrag klopt wel en de server kan natuurlijk ook controleren dat ik de kaarten n en h ook echt op de hand heb.
De server stuurt naar mij: ?market=1&id=2&type=information?opponent=Z&money=-nh Ok je hebt betaald met nh (en dus 100 armer)
En daardoor krijg ik toch de kaart
?market=1&id=2&type=receive&goods=A Jeuh, ik heb kaart A
De veilingboer krijgt zijn geld: ?market=1&id=1&type=receive&opponent=W&money=nh 0 en 100 ontvangen van West (vanuit zuid gezien)
Info aan de speler na mij ?market=1&id=3&type=information?opponent=E&goods=A&money=-100,QQ Oost heeft kaart A gekocht voor honderd met 2 kaarten
Dus nu weet alleen de veilingboer hoe ik de 100 heb uitgegeven.
Ik heb in dit voorbeeld wel eerst de betaalslag voor de ontvangst beurt gedaan, zodat bij een fout een bluf kan worden verstuurd.
Ik dacht dat je voorbeeld met N S E W in je openingspost niet helemaal klopte, maar je verstuurt het bericht van de server natuurlijk steeds naar de speler vanuit Zuid gezien, dat heb ik nu pas door met het maken van dit voorbeeld

500 "The server made a boo boo"


  • Illusion
  • Registratie: november 2000
  • Laatst online: 15:16

Illusion

(the art of)

Zoals ik het spel in het echt gespeeld heb mag je bij een veiling best 70 bieden als je alleen kaarten van bijv. 50 en 100 hebt. Alleen zul je als je wint TEN MINSTE het bedrag moeten betalen dat je geboden hebt. Bied je 70 en kan je alleen 50 of 100 betalen, dan dien je dus 100 te betalen! De betaalkaarten geef je dicht aan de veilingmeester, waardoor na een paar veilingen echt niet meer duidelijk is wie welke betaalkaarten heeft.

[Voor 9% gewijzigd door Illusion op 27-10-2010 03:24]

Soms ben ik er wel, en soms ook weer niet.


  • Dricus
  • Registratie: februari 2002
  • Laatst online: 11:55

Dricus

ils sont fous, ces tweakers

darkstone schreef op dinsdag 26 oktober 2010 @ 21:23:
maar wat heeft dat voor zin? als je alles goed bijhoud weet je toch al automatisch precies wat elke speler heeft?
Zoals ik het begrijp uit de TS weten de medespelers niet voor welk bedrag handelswaar van eigenaar wisselt. Dat blijkt ook min of meer wel uit de beschrijving op wikipedia. Als er een aantal trades plaats hebben gevonden, weet je van die spelers die daarbij betrokken waren dus niet meer precies hoeveel geld ze hebben.

Stel niet uit tot morgen wat je vandaag nog tot morgen kunt uitstellen...


  • CodeIT
  • Registratie: juni 2002
  • Laatst online: 26-09 17:37

CodeIT

Code IT

Zo werkt het volgens mij in het echte spel ook. Lijkt me uitdagender.

  • Vaan Banaan
  • Registratie: februari 2001
  • Niet online

Vaan Banaan

Heeft ook Apache ontdekt

Illusion schreef op woensdag 27 oktober 2010 @ 03:23:
Zoals ik het spel in het echt gespeeld heb mag je bij een veiling best 70 bieden als je alleen kaarten van bijv. 50 en 100 hebt. Alleen zul je als je wint TEN MINSTE het bedrag moeten betalen dat je geboden hebt. Bied je 70 en kan je alleen 50 of 100 betalen, dan dien je dus 100 te betalen! De betaalkaarten geef je dicht aan de veilingmeester, waardoor na een paar veilingen echt niet meer duidelijk is wie welke betaalkaarten heeft.
Daar had ik nog niet eens aan gedacht en vult het verhaal in mijn vorige post prima aan.
Als ik bijvoorbeeld weet dat de speler na mij 160 heeft met 4 kaarten: ntfh, kan ik vervolgens 60 bieden, waardoor hij flink extra zal moeten betalen (minimaal 100) Als hij bijvoorbeeld met 70 zou bieden en de ronde wint, moet hij toch met 100 betalen.
Als blijkt dat de andere speler dat teveel vindt en ik zelf ook niet precies 60 heb, is het voor mij houten bek en zal ik ook meer moeten betalen (wordt dan ook minimaal 100)
Verder als ik bijvoorbeeld de veiling win met 90 en ik geef 2 kaarten, weet je niet zeker meer hoe ik heb betaald (ff, nh, th, of als ik lomp doe: nT, tT) Je kunt hier alleen uit concluderen, dat ik meer heb betaald dan waarmee ik de auctionronde had gewonnen.
De veilingboer krijgt zijn geld: ?market=1&id=1&type=receive&opponent=W&money=ff 50 en 50 ontvangen van West (vanuit zuid gezien)
Info aan de speler na mij ?market=1&id=3&type=information?opponent=E&goods=A&money=-90,QQ Oost heeft kaart A gekocht voor 90 met 2 kaarten Ha, mooi niet, ik heb er zelfs 100 voor betaald

[Voor 17% gewijzigd door Vaan Banaan op 27-10-2010 17:29]

500 "The server made a boo boo"


  • Pete
  • Registratie: november 2005
  • Laatst online: 04-09 12:52
darkstone schreef op dinsdag 26 oktober 2010 @ 01:03:
count me in *O*
heb ik meteen een gelegenheid om me meer te verdiepen in php, moet ik wel ergens een host vandaan toveren...

offtopic:
suggesties?
http://aws.amazon.com/free/ <- kun je voor een jaar een gratis server gebruiken...

petersmit.eu


  • Domdo
  • Registratie: juni 2009
  • Laatst online: 24-09 13:11
Zou het ook mogelijk zijn om een andere poort te kunnen gebruiken ipv. 80 ? Nu zie ik allemaal 'could not connect to 80 *.*.*.*:43210' in de log verschijnen, dus ik ga er vanuit dat er gewoon altijd naar poort 80 verbonden wordt, en mijn server is niet beschikbaar op poort 80 en dat doe ik liever ook niet tenzij het echt niet anders kan.

  • Arjan
  • Registratie: juni 2001
  • Niet online

Arjan

copyright is wrong

Topicstarter
In reactie op vaan banaan, begrijp ik goed dat je voorstelt de uiteindelijke betaalde som bij een veiling blind te maken? zo ja, ik ben dit aan het implementeren, zodra de server up to date is post ik het hier :)

@Domdo, gewoon in je url je poort nummer verwerken. De server zelf draait ook op een andere poort, namelijk 56789, dus voor poort 12345 gewoon http://jouwhost:12345/jouwphpofcgibestand.iets :)
Ah wacht dat doe je al, heb je er wel http voor staan?

[Voor 7% gewijzigd door Arjan op 27-10-2010 17:01]

oprecht vertrouwen wordt nooit geschaad


  • Domdo
  • Registratie: juni 2009
  • Laatst online: 24-09 13:11
nope, en met http ervoor werkt het wel :)

  • marqram
  • Registratie: januari 2008
  • Laatst online: 08:06
yes, een programmeer-contest! Kijk al sinds de vorige contest eens per week. Ik denk dat ik wel ergens tijd kan vinden een leuke PHP-inzending te fabriceren... Eerst maar eens verdiepen in het spelletje!

  • Vaan Banaan
  • Registratie: februari 2001
  • Niet online

Vaan Banaan

Heeft ook Apache ontdekt

Arjan schreef op woensdag 27 oktober 2010 @ 17:00:
In reactie op vaan banaan, begrijp ik goed dat je voorstelt de uiteindelijke betaalde som bij een veiling blind te maken? zo ja, ik ben dit aan het implementeren, zodra de server up to date is post ik het hier :)
Ehm, ja zo had ik het natuurlijk ook kunnen verwoorden. :')
Dus ja, zoals bij trade ook bij auction Q's meesturen, maar ook wel het hoogst geboden bedrag meesturen.
Ik las eerder dat je de auction history wilde meesturen, wil je dan alle biedingen W10N20E30W40E50W100 meesturen, of alleen de hoogste bedragen zoals in end: W100N20E50 ?

500 "The server made a boo boo"


  • Arjan
  • Registratie: juni 2001
  • Niet online

Arjan

copyright is wrong

Topicstarter
Vaan Banaan schreef op woensdag 27 oktober 2010 @ 17:42:
[...]

Ehm, ja zo had ik het natuurlijk ook kunnen verwoorden. :')
Dus ja, zoals bij trade ook bij auction Q's meesturen, maar ook wel het hoogst geboden bedrag meesturen.
Ik las eerder dat je de auction history wilde meesturen, wil je dan alle biedingen W10N20E30W40E50W100 meesturen, of alleen de hoogste bedragen zoals in end: W100N20E50 ?
Alle biedingen staan erin, en de server is geupdate :)

oprecht vertrouwen wordt nooit geschaad


  • Dricus
  • Registratie: februari 2002
  • Laatst online: 11:55

Dricus

ils sont fous, ces tweakers

Het lijkt me erg handig als je ook de TS even bijwerkt met deze info zodat we niet het hele topic door hoeven zoeken om onze info compleet te krijgen :).

Stel niet uit tot morgen wat je vandaag nog tot morgen kunt uitstellen...


  • Bolukan
  • Registratie: oktober 2002
  • Laatst online: 21-09 07:58
Kan auctioneer ook meegestuurd worden aan de auctioner, zodat je eraan herinnerd wordt dat je aan het veilen was.
Verder steun ik Banaan met zijn voorstel biedingsbedragen (verbale Amount) en betaalkaarten (fysieke Money) uit elkaar te trekken.
Dit geldt ook voor de auctioneer die mogelijk moet overbetalen om het kaartje zelf te kunnen houden.n

Ps: Op 11 december vindt het NK Koehandel 2010 plaats

  • Onbekend
  • Registratie: juni 2005
  • Nu online
Leuk dat er weer een nieuwe contest is.
Van Koehandel heb ik eigenlijk nog nooit gehoord, en de spelregels lijken erg complex. Ik zal eerst maar eens naar een online game zoeken, en die een flink aantal maal spelen om de spelregels onder de knie te krijgen en evt. een tactiek te bepalen.
Als ik dan nog tijd over heb hoop ik wel een speler te kunnen maken....

Speel ook Airplane Manager en Repeat


  • Arjan
  • Registratie: juni 2001
  • Niet online

Arjan

copyright is wrong

Topicstarter
Bolukan schreef op donderdag 28 oktober 2010 @ 16:57:
Kan auctioneer ook meegestuurd worden aan de auctioner, zodat je eraan herinnerd wordt dat je aan het veilen was.
Verder steun ik Banaan met zijn voorstel biedingsbedragen (verbale Amount) en betaalkaarten (fysieke Money) uit elkaar te trekken.
Dit geldt ook voor de auctioneer die mogelijk moet overbetalen om het kaartje zelf te kunnen houden.n

Ps: Op 11 december vindt het NK Koehandel 2010 plaats
Voor de duidelijkheid nog maar eens, je mag bieden wat je wilt tijdens een veiling!
De enige eis is dat je het bedrag uitdrukt in de kaarteenheden, je hoeft deze echter niet te bezitten. ( maar er zijn gevolgen als je bluft, zoals uitgelegd )

Dit is zo in het echte spel, dit is zo in dit spel, dit is ook nooit anders geweest :p

oprecht vertrouwen wordt nooit geschaad


  • Onbekend
  • Registratie: juni 2005
  • Nu online
Ik heb helaas geen online spel gevonden, maar wel een duidelijke uitleg:
http://www.spelbreker.nl/...ies/koehandel_cursus.html


Voordat ik ga programmeren, eerst een paar vraagjes:

Stel dat je tijdens de veiling bijvoorbeeld geen kaart H hebt kunnen kopen, kan je er dan wel op andere manier daar aan komen?

Hoe weet ik (bij de start en tijdens het onderhandelen en bieden) welke speelkaarten en geldkaarten ik in mijn bezit heb? Het is misschien wel mogelijk dat allemaal tijdelijk weg te schrijven, maar dan weet ik nooit of ik synchroon loop met de server.

Krijg ik tijdens het bieden ook alle andere informatie door met dat bijvoorbeeld speler W heeft X-bedrag geboden en dat speler N heeft overboden?

Stel dat ik een laatste bod heb gedaan, en de rest past (is informatie voor mij). Mag ik dan nog een hoger bod uitbrengen.

Zijn er altijd 4 spelers per market?

Als een markt is afgelopen, krijgt elke speler dan nog informatie over wie welke kaarten uiteindelijk had?

Speel ook Airplane Manager en Repeat


  • Arjan
  • Registratie: juni 2001
  • Niet online

Arjan

copyright is wrong

Topicstarter
Onbekend schreef op donderdag 28 oktober 2010 @ 21:14:
Ik heb helaas geen online spel gevonden, maar wel een duidelijke uitleg:
http://www.spelbreker.nl/...ies/koehandel_cursus.html


Voordat ik ga programmeren, eerst een paar vraagjes:

Stel dat je tijdens de veiling bijvoorbeeld geen kaart H hebt kunnen kopen, kan je er dan wel op andere manier daar aan komen?
nope
Hoe weet ik (bij de start en tijdens het onderhandelen en bieden) welke speelkaarten en geldkaarten ik in mijn bezit heb? Het is misschien wel mogelijk dat allemaal tijdelijk weg te schrijven, maar dan weet ik nooit of ik synchroon loop met de server.
Het is je eigen verantwoording dit bij te houden, een speler maken die alleen maar bijhoud wat er bij/af gaat zou dus een mooie start zijn :)
Krijg ik tijdens het bieden ook alle andere informatie door met dat bijvoorbeeld speler W heeft X-bedrag geboden en dat speler N heeft overboden?
ja, dat staat in de message string tijdens het bieden
Stel dat ik een laatste bod heb gedaan, en de rest past (is informatie voor mij). Mag ik dan nog een hoger bod uitbrengen.
nee, dat zou gek zijn
Zijn er altijd 4 spelers per market?
ja
Als een markt is afgelopen, krijgt elke speler dan nog informatie over wie welke kaarten uiteindelijk had?
nee

:P

oprecht vertrouwen wordt nooit geschaad


  • Darkstone
  • Registratie: mei 2009
  • Laatst online: 26-04-2014

Darkstone

Het kan altijd sneller.

je kan wel de logs opvragen natuurlijk.

enee, ik neem aan dat je de logs alleen kan opvragen nadat het spel is afgelopen? O-)

'de sheet' -- Dell Latitude E6520, 1080p, i7-2820QM, X25-M 80GB, 16GB, 97Wh
Gezocht: Baan software development, C++, gave software, omgeving Delft.


  • Arjan
  • Registratie: juni 2001
  • Niet online

Arjan

copyright is wrong

Topicstarter
darkstone schreef op donderdag 28 oktober 2010 @ 22:26:
je kan wel de logs opvragen natuurlijk.

enee, ik neem aan dat je de logs alleen kan opvragen nadat het spel is afgelopen? O-)
tijdens de wedstrijden zullen de logs uitstaan ;)
nu kun je de logs realtime uitlezen voor debugging :)

oprecht vertrouwen wordt nooit geschaad


  • Skinny
  • Registratie: januari 2000
  • Laatst online: 02:22

Skinny

DIRECT!

Alsof ik het al niet veel te druk heb, maar deze uitdaging zie ik ook wel zitten en dus ben ik even aan de slag gegaan. Inmiddels heb ik een 'domme' speler die overal passed en altijd een auction start bij zijn beurt.

Ik krijg nu van de server het volgende bericht terug wat ik niet kan rijmen met de docs uit de TS..
code:
1
type=auction&goods=B&message=W0N0E0


Er is geen auctioneer en/of opponent aanwezig. Nu zie ik in de message wel dat er blijkbaar drie keer 0 is geboden/passed, maar wat is hier nu de exacte opzet ?

SIZE does matter.
"You're go at throttle up!"


  • Onbekend
  • Registratie: juni 2005
  • Nu online
Arjan schreef op donderdag 28 oktober 2010 @ 22:23:
Het is je eigen verantwoording dit bij te houden, een speler maken die alleen maar bijhoud wat er bij/af gaat zou dus een mooie start zijn :)
Dat is vervelend. :(
Als ik 1 request mis waarin een transactie staat (kaarten of geld), is mijn speler niet meer in staat om de rest van het spel nog wel goed te spelen.
Daar gaan een aantal programmeurs problemen mee krijgen omdat ze geen stabiele webserververbinding hebben.....
nee, dat zou gek zijn
Nee, dat is volgens mij niet gek.
Hiermee weet ik hoeveel de kaart voor de bieders waard is. Maar dat zegt niets over veilingmeester die niet mee biedt. Die kan het wel een laag bedrag vinden die dus heel graag de kaart voor het zelfde bedrag overneemt.

Speel ook Airplane Manager en Repeat


  • Arjan
  • Registratie: juni 2001
  • Niet online

Arjan

copyright is wrong

Topicstarter
Skinny schreef op vrijdag 29 oktober 2010 @ 03:09:
[...]

Er is geen auctioneer en/of opponent aanwezig. Nu zie ik in de message wel dat er blijkbaar drie keer 0 is geboden/passed, maar wat is hier nu de exacte opzet ?
Als niemand anders de auctioneer is, dan ben je het zelf :)
Onbekend schreef op vrijdag 29 oktober 2010 @ 08:03:
[...]

Dat is vervelend. :(
Als ik 1 request mis waarin een transactie staat (kaarten of geld), is mijn speler niet meer in staat om de rest van het spel nog wel goed te spelen.
Daar gaan een aantal programmeurs problemen mee krijgen omdat ze geen stabiele webserververbinding hebben.....
Je verbinding hoeft maar 10min stabiel te zijn, zo spannend is dat niet. Op zich wil ik best een optie maken om de status van het speelveld op te vragen, maar ik denk dat wanneer een speler niet in staat is die requests op te vangen die het verloop van het spel aangeven, dat dit het eerste probleem is dat hij/zij moet aanpakken.
[...]

Nee, dat is volgens mij niet gek.
Hiermee weet ik hoeveel de kaart voor de bieders waard is. Maar dat zegt niets over veilingmeester die niet mee biedt. Die kan het wel een laag bedrag vinden die dus heel graag de kaart voor het zelfde bedrag overneemt.
Het punt is juist dat je niet weet of de veilingmeester deze kaart graag wil, je moet een inschatting maken en daar je bod op baseren, dit is een van de onderdelen die dit tot een uitdagend spel maken. Je kan namelijk grof geld verdienen op een kaart die erg gewild is door de veilingmeester!

[edit]
voor de luiaards:
PHP:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
<?php

$market = intval( $_GET["market"] );

if ( !$market ) return;

$filename = "/tmp/market_" . $market . ".txt";

$previous = file( $filename );

$opponents = array(
    "W" => "",
    "N" => "",
    "E" => "" 
);

foreach ( (array)$previous as $i )
{
    $temp = explode( "=", $i );

    if ( count( $temp ) > 1 )
    {
        $opponents[ rtrim( $temp[ 0 ] ) ] = rtrim( $temp[ 1 ] );
    }
}

$goods = $_GET["goods"];

$opponent = $_GET["opponent"];

if ( $_GET["type"] == "information" )
{
    if ( $goods[ 0 ] == "-" )
    {
        $g = (array)substr( $goods, 1 );
        
        foreach( $g as $i )
        {
            $temp = $opponents[ $opponent ];
        
            $p = strpos( $temp, $i );
            $opponents[ $opponent ] = substr( $temp, 0, $p );
            $opponents[ $opponent ] .= substr( $temp, $p + 1 );
        }
    }
    else
    {
        $opponents[ $opponent ] .= $goods;
    }
}

$file = fopen( $filename, "w" );

fprintf( $file, "W=%s\n", $opponents[ "W" ] );
fprintf( $file, "N=%s\n", $opponents[ "N" ] );
fprintf( $file, "E=%s\n", $opponents[ "E" ] );

fclose( $file );

?>


let op! Ik ben geen php programmeur, als dit stukje code er met je vrouw vandoor gaat, oorlog verklaard aan een klein land naar keuze terwijl jij huilend in een hoekje achterblijft, dan kan ik daar geen verantwoording voor nemen.

Dit stukje code zou in een file per market moeten bijhouden hoeveel goederen elke speler ( met uitzondering van de speler zelf) heeft. Dat dit de drempel voor php programmeurs maar weer mag verlagen :>

[Voor 32% gewijzigd door Arjan op 29-10-2010 10:33]

oprecht vertrouwen wordt nooit geschaad


  • joppybt
  • Registratie: december 2002
  • Laatst online: 18:22
Misschien een aanvulling voor de OP. Sommige dingen zijn misschien triviaal voor mensen die vaker hebben meegedaan maar iemand die voor het eerst mee doet wordt het niet gemakkelijk gemaakt
------------------
Om mee te doen moet je zelf een website op een webserver programmeren. Dit staat nergens in de OP
Je meldt je aan voor een spelletje door de url http://iets.nl van jou webserver aan de 'scheidsrechter' server door te geven.
Gedurende het spel wordt alle communicatie geïnitieerd door de scheidsrechter. Die zal bij toerbeurt aan een speler met een HTTP GET instructies gegeven Moet ik hier gewoon een 200 OK op teruggeven?
edit:
Fout gedacht dus, zie latere posts, je moet in de 'body' je antwoord al geven

Na zo'n instructie heb je maximaal 5 seconde om te antwoorden door een eigen HTTP GET te doen naar 'scheidsrechter' server.
edit:
Fout gedacht dus, zie latere posts, je moet in de 'body' je antwoord al geven

------------------
Disclaimer: ik weet dus niet of het zo goed interpreteer. De instructies zijn daar niet duidelijk over.
Ergens anders begrijp ik namelijk dat ik een socket open moet laten staan.
Het is me dus vooral niet duidelijk hoe ik antwoord geef aan de server. Vanaf een webserver met ASP kan ik volgens mij niet echt sockets open laten staan.

[Voor 7% gewijzigd door joppybt op 29-10-2010 15:11. Reden: Verwarring voorkomen]


  • Arjan
  • Registratie: juni 2001
  • Niet online

Arjan

copyright is wrong

Topicstarter
joppybt schreef op vrijdag 29 oktober 2010 @ 13:33:
Misschien een aanvulling voor de OP. Sommige dingen zijn misschien triviaal voor mensen die vaker hebben meegedaan maar iemand die voor het eerst mee doet wordt het niet gemakkelijk gemaakt
------------------
Om mee te doen moet je zelf een website op een webserver programmeren. Dit staat nergens in de OP
Je meldt je aan voor een spelletje door de url http://iets.nl van jou webserver aan de 'scheidsrechter' server door te geven.
Gedurende het spel wordt alle communicatie geïnitieerd door de scheidsrechter. Die zal bij toerbeurt aan een speler met een HTTP GET instructies gegeven Moet ik hier gewoon een 200 OK op teruggeven?
Je hoeft alleen maar je response te geven, waarbij je je antwoord teruggeeft alsof het onderdeel van een GET string was.
als jij wil aangeven dat je tien wil bieden, dan schrijf je plain text "?money=t"
nog duidelijker, als je een speler wil maken die alleen maar 10 biedt op alle requests :+ kun je die zo maken:
PHP:
1
2
3
<?php
echo "?money=t";
?>
Na zo'n instructie heb je maximaal 5 seconde om te antwoorden door een eigen HTTP GET te doen naar 'scheidsrechter' server.
zie bovenstaande
Disclaimer: ik weet dus niet of het zo goed interpreteer. De instructies zijn daar niet duidelijk over.
Ergens anders begrijp ik namelijk dat ik een socket open moet laten staan.
Het is me dus vooral niet duidelijk hoe ik antwoord geef aan de server. Vanaf een webserver met ASP kan ik volgens mij niet echt sockets open laten staan.
Alleen als je je eigen webserver schrijft moet je iets met sockets gaan doen, anders kun je, ook in ASP volstaan met het volgende:
ASP.NET Visual Basic:
1
2
3
<%
Response.Write( "?money=t" );
%>

oprecht vertrouwen wordt nooit geschaad


  • dcm360
  • Registratie: december 2006
  • Niet online

dcm360

HD7566 powered

joppybt schreef op vrijdag 29 oktober 2010 @ 13:33:
Gedurende het spel wordt alle communicatie geïnitieerd door de scheidsrechter. Die zal bij toerbeurt aan een speler met een HTTP GET instructies gegeven Moet ik hier gewoon een 200 OK op teruggeven?
Na zo'n instructie heb je maximaal 5 seconde om te antwoorden door een eigen HTTP GET te doen naar 'scheidsrechter' server.
Niet helemaal juist. Die code 200 klopt wel (standaard HTTP gedrag), maar je stuurt je antwoord aan de server tegelijk mee terug (binnen 5 seconden). Je doet zelf dus geen GET request terug maar je geeft een response ;)

  • joppybt
  • Registratie: december 2002
  • Laatst online: 18:22
Ok, het is nu al een stuk duidelijker.

Ik was ernstig op het verkeerde been gezet door de syntax van de response
code:
1
?money=t


Dat vraagteken is een heel gebruikelijke syntax voor een querystring maar dient eigenlijk geen enkel praktisch doel in de response-body. Maar ik zal me houden aan deze syntax.

Ligt het trouwens aan mij dat http://www.houbenweb.nl/market.html het niet doet? (geen verbinding)

[Voor 13% gewijzigd door joppybt op 29-10-2010 15:25]


  • joppybt
  • Registratie: december 2002
  • Laatst online: 18:22
Ondertussen doet de server het wel (weer).

Ik heb een extreem simpele server ingericht die altijd '?money=t' teruggeeft. Je mag hem testen achter http://82.75.133.12:82/default.asp waarbij je ziet dat hij van buiten best wel te bereiken is. Poort forwarding heb ik dus goed ingesteld.

Als ik echter via http://www.houbenweb.nl/market.html een spel opstart en de logging bekijk zie ik alleen maar 'response timed out' op alle GET-requests waar de server een antwoord verwacht.
code:
1
2
3
4
5
6
2010:10:29 21:54:42:940 player connected from 82.75.133.12 82 /default.asp
2010:10:29 21:54:42:941 GET /default.asp?market=206&id=1137&type=start HTTP/1.1\r\nContent-Type: text/html; charset=iso-8859-1\r\n
2010:10:29 21:54:47:969 response timed out
2010:10:29 21:54:47:969 GET /default.asp?market=206&id=1137&type=auction&goods=E&message=W0N0E0 HTTP/1.1\r\nContent-Type: text/html; charset=iso-8859-1\r\n
2010:10:29 21:54:52:994 response timed out
... enzovoorts

Wat doe ik fout?

  • Darkstone
  • Registratie: mei 2009
  • Laatst online: 26-04-2014

Darkstone

Het kan altijd sneller.

ik heb ook wat moeilijkheden...

ik gebruik Qt creator:
C++:
1
2
3
4
char block[] = "hallo";
QTcpSocket *clientConnection = tcpServer->nextPendingConnection();  //tcpServer is een object van het type QtcpServer
connect(clientConnection, SIGNAL(disconnected()), clientConnection, SLOT(deleteLater()));
clientConnection->disconnectFromHost();


ik gebruik die code om mn requist over te zenden (in dit geval "hallo")
als ik putty gebruik om de data op te halen krijg ik altijd hallo te zien
als ik firefox gebruik (dmv http://127.0.0.1:4900) om hetzelfde te zien krijg ik soms hallo te zien, soms een "de connectie werd onverwacht geherinitaliseerd" error
met IE gebeurt er niets 8)7

heeft er iemand misschien een c++ of zelfs plain C opzet? ik ben al 3 dagen bezig, er er schijnt geen enkele manier te zijn om zonder al teveel gedoe een response over te zenden...
volgens mij moet ik een http response zenden in plaats van een TCP response, maar de enige class die dat schijnt te kunnen (Qhttp) is depricated :X

dit is op windows, als iemand de oplossing toevallig weet..

[Voor 3% gewijzigd door Darkstone op 30-10-2010 00:49]

'de sheet' -- Dell Latitude E6520, 1080p, i7-2820QM, X25-M 80GB, 16GB, 97Wh
Gezocht: Baan software development, C++, gave software, omgeving Delft.


  • JeroenTheStig
  • Registratie: mei 2000
  • Laatst online: 06:42
Leuk, ik ga ook een poging doen om wat in elkaar te programmeren. Ik had al een klein beginnetje gemaakt, maar ik dacht dat de ?id=1&bla=bla parameters achter de URL waren. Het is dus de bedoeling om de variabelen als plain text in de body van de request te gooien?

  • joppybt
  • Registratie: december 2002
  • Laatst online: 18:22
Als ik het goed samenvat:
- De scheidsrechter benadert de url naar jouw webserver met ?market=123&id=456 etc in de URL
- De 'pagina' van jou webserver moet binnen 5 seconde in de body plain text je antwoord teruggeven als &money=t om aan te geven dat je 10 biedt.

  • Arjan
  • Registratie: juni 2001
  • Niet online

Arjan

copyright is wrong

Topicstarter
darkstone schreef op zaterdag 30 oktober 2010 @ 00:44:
ik heb ook wat moeilijkheden...

ik gebruik Qt creator:
C++:
1
2
3
4
char block[] = "hallo";
QTcpSocket *clientConnection = tcpServer->nextPendingConnection();  //tcpServer is een object van het type QtcpServer
connect(clientConnection, SIGNAL(disconnected()), clientConnection, SLOT(deleteLater()));
clientConnection->disconnectFromHost();


ik gebruik die code om mn requist over te zenden (in dit geval "hallo")
als ik putty gebruik om de data op te halen krijg ik altijd hallo te zien
als ik firefox gebruik (dmv http://127.0.0.1:4900) om hetzelfde te zien krijg ik soms hallo te zien, soms een "de connectie werd onverwacht geherinitaliseerd" error
met IE gebeurt er niets 8)7

heeft er iemand misschien een c++ of zelfs plain C opzet? ik ben al 3 dagen bezig, er er schijnt geen enkele manier te zijn om zonder al teveel gedoe een response over te zenden...
volgens mij moet ik een http response zenden in plaats van een TCP response, maar de enige class die dat schijnt te kunnen (Qhttp) is depricated :X

dit is op windows, als iemand de oplossing toevallig weet..
Ik zie je nergens socket.write aanroepen, daarnaast is het handig om de boel te flushen alvorens je de connectie sluit.
C++:
1
2
socket.write( "hallo\r\n\r\n" );
while ( socket.waitForBytesWritten() ) { }; // had zelf wat problemen met de flush functie bij veel data

oprecht vertrouwen wordt nooit geschaad


  • joppybt
  • Registratie: december 2002
  • Laatst online: 18:22
Arjen, weet je ook hoe het zit met de timeouts? Dat is namelijk het enige wat ik ooit terugzie in de logfiles. De scheids-server heeft nog nooit een webserver bereikt.

  • Darkstone
  • Registratie: mei 2009
  • Laatst online: 26-04-2014

Darkstone

Het kan altijd sneller.

Arjan schreef op zaterdag 30 oktober 2010 @ 11:53:
[...]

Ik zie je nergens socket.write aanroepen, daarnaast is het handig om de boel te flushen alvorens je de connectie sluit.
C++:
1
2
socket.write( "hallo\r\n\r\n" );
while ( socket.waitForBytesWritten() ) { }; // had zelf wat problemen met de flush functie bij veel data
dat doet hij automatisch als je de socket sluit, met een clientConnection->flush(); ertussen hetzelfde resultaat

o wacht... ik ben een regel vergeten te kopieren }:O

C++:
1
2
3
4
5
char block[] = "hallo";
QTcpSocket *clientConnection = tcpServer->nextPendingConnection();  //tcpServer is een object van het type QtcpServer
connect(clientConnection, SIGNAL(disconnected()), clientConnection, SLOT(deleteLater()));
clientConnection->write(block); //<--
clientConnection->disconnectFromHost();


ik kijk wel in het vorige topic of er ergens een .zip rondslingert :)

edit: niets gevonden, alleen maar php en c# code.

'de sheet' -- Dell Latitude E6520, 1080p, i7-2820QM, X25-M 80GB, 16GB, 97Wh
Gezocht: Baan software development, C++, gave software, omgeving Delft.


  • Arjan
  • Registratie: juni 2001
  • Niet online

Arjan

copyright is wrong

Topicstarter
joppybt schreef op zaterdag 30 oktober 2010 @ 12:04:
Arjen, weet je ook hoe het zit met de timeouts? Dat is namelijk het enige wat ik ooit terugzie in de logfiles. De scheids-server heeft nog nooit een webserver bereikt.
er is iets mis aan het gaan, dat is wel duidelijk, ik ga proberen er naar te kijken, maar mijn tijd in het weekend is helaas beperkt ( koters :p )

oprecht vertrouwen wordt nooit geschaad


  • joppybt
  • Registratie: december 2002
  • Laatst online: 18:22
Okido, dan weet ik in ieder geval dat ik in beginsel nog niets fout doe.

  • - peter -
  • Registratie: september 2002
  • Laatst online: 15:13
Hee, hartstikke leuk!

Ik ga zeker meedoen, nouja, ik ga proberen iets in C# the klussen. Vorige contest was echt geweldig!

Leuk ook dit spel, zit wel aardig wat uitdaging in, alleen al om de boel te modelleren.

Count me in.

  • joppybt
  • Registratie: december 2002
  • Laatst online: 18:22
Volgens mij zit er nog een foutje in het voorbeeld.
E biedt 50. Dat wordt uiteindelijk overgenomen door veilingmeester Z die daarmee de handelswaar wint.
Nu moet E dus de 50 krijgen van Z. In het vervolg (zie met name de Z-regels) wordt echter gesuggereerd dat W het geld krijgt.

Ik heb ook nog een vraagje over de trade. Als ik het goed snap:
De betrokken spelers doen beide een bod aan de scheidsrechter waarbij de andere speler alleen het (al dan niet geblufte) totaalbedrag en het aantal kaarten te horen krijgt.
Klopt het dat de scheidsrechter (die wel 'onder de kaarten' kan kijken) bepaalt wie er gewonnen heeft en de winnaar aanwijst? De twee niet-deelnemende partijen krijgen nooit te weten welk bedrag er nu daadwerkelijk onder de kaarten lag?
Hoe wordt bij het echte spel de winnaar bepaald als er geen scheidsrechter is, zonder de kaartjes bloot te geven?

Ofwel: kun je ook een voorbeeld communicatie van een trade toevoegen?

  • Darkstone
  • Registratie: mei 2009
  • Laatst online: 26-04-2014

Darkstone

Het kan altijd sneller.

stel, ik oefen mijn veilingmeester recht uit, er was 50 geboden op de kaart.

ik stuur naar de server: ?money=ttttt (5x een 10)
de speler waarvan ik de kaart overkoop krijgt: ?money=ttttt
alle anderen krijgen te zien: ?money=QQQQQ50 (that is, 5x een 10, of 1x 50 plus 4 lege kaarten)

het is wel verwarrend, begrijp ik het goed dat als speler N veilingmeester is, speler E 10 bied, dat ik dan krijg:
?market=1&id=4&type=auction&opponent=E&auctioneer=N&goods=A&money=Q10
en als ik dan overbied, weet speler W dan of E iets geboden heeft?

(arjan, het voorbeeld moet nog gewijzigd worden met juist Q gebruik)

'de sheet' -- Dell Latitude E6520, 1080p, i7-2820QM, X25-M 80GB, 16GB, 97Wh
Gezocht: Baan software development, C++, gave software, omgeving Delft.


  • DeoDupke
  • Registratie: maart 2002
  • Laatst online: 26-05 22:09
leuk, ik ga ook iets in elkaar draaien. In een ver verleden wel eens het spel gespeeld maar kan me niet meer herinneren wat het idee was dus moet alles nog even goed lezen.

No worries m8


  • MLM
  • Registratie: juli 2004
  • Laatst online: 19-01-2018

MLM

aka Zolo

Tevens, als je de ?connect aanroept krijg je geen valide HTTP respons terug, hij retourneert "GET ?meer tekst" als platte tekst, zonder HTTP headers.

De .NET WebRequest interpreteert de "GET" als de HTTP status code (dat hoort 200, 404 oid te zijn), en vind dan dat je een protocol violation begaat (wat ook zo is). Denk niet dat het echt een probleem gaat zijn aangezien jij jouw logica al uitgevoerd hebt, maar het is niet echt netjes :)

Bij mij wil jouw server ook geen connecties openen naar mijn server lijkt het, maar dat is waarschijnlijk hetzelfde probleem als hierboven aangegeven :)

-niks-


  • JeroenTheStig
  • Registratie: mei 2000
  • Laatst online: 06:42
MLM schreef op zaterdag 30 oktober 2010 @ 21:57:
Tevens, als je de ?connect aanroept krijg je geen valide HTTP respons terug, hij retourneert "GET ?meer tekst" als platte tekst, zonder HTTP headers.

De .NET WebRequest interpreteert de "GET" als de HTTP status code (dat hoort 200, 404 oid te zijn), en vind dan dat je een protocol violation begaat (wat ook zo is). Denk niet dat het echt een probleem gaat zijn aangezien jij jouw logica al uitgevoerd hebt, maar het is niet echt netjes :)

Bij mij wil jouw server ook geen connecties openen naar mijn server lijkt het, maar dat is waarschijnlijk hetzelfde probleem als hierboven aangegeven :)
Ah, ik heb een soortgelijk probleem, maar dan in Java Servlets. Ik krijg geen request binnen als ik via http://houbenweb.nl/market.html mijn URL doorgeef. Als ik op de log kijk van de host, dan zie ik een response time out.

Ik krijg ook de meest vreemde foutmelding te zien als ik met Apache Http Components een request afvuur op houbenweb.nl:56789. Iets met invalid protocol of iets dergelijks, maar dat moet hetzelfde euvel zijn. Ik heb het nu eerst opgelost met een simpele URLConnection en lees de plain text in die in binnenkrijg.

Ik denk dat er niks anders op zit dan dat ik mbv Sockets moet gaan communiceren.

[Voor 5% gewijzigd door JeroenTheStig op 30-10-2010 22:16]


  • Onbekend
  • Registratie: juni 2005
  • Nu online
Met testen gaat het bij mij ook niet helemaal goed.
Laatste test gaf in de log-file:

2010:10:30 19:32:50:917 could not connect to <KNIP>

En verder lijkt het alsof ik helemaal geen GET-parameters meekrijg...

Speel ook Airplane Manager en Repeat


  • JeroenTheStig
  • Registratie: mei 2000
  • Laatst online: 06:42
Onbekend schreef op zaterdag 30 oktober 2010 @ 22:09:
Met testen gaat het bij mij ook niet helemaal goed.
Laatste test gaf in de log-file:

2010:10:30 19:32:50:917 could not connect to <KNIP>

En verder lijkt het alsof ik helemaal geen GET-parameters meekrijg...
Wat gebruik je precies (taal, frameworks, etc.) om de requests mee op te vangen?

  • Onbekend
  • Registratie: juni 2005
  • Nu online
Ik gebruik PHP en lees gewoon met $_GET[] de waarden uit.
Mijn testscript staat op de zelfde webserver waar ik vorig jaar de Zeeslagcompetitie had neergezet.

Als ik in de adresbalk van de browser de GET-parameters invul, komen ze wel mee. Maar de GET-parameters van http://houbenweb.nl/market.html komen totaal niet aan. De string $_SERVER["QUERY_STRING"] blijft ook leeg.

Speel ook Airplane Manager en Repeat


  • JeroenTheStig
  • Registratie: mei 2000
  • Laatst online: 06:42
Onbekend schreef op zaterdag 30 oktober 2010 @ 22:36:
Ik gebruik PHP en lees gewoon met $_GET[] de waarden uit.
Mijn testscript staat op de zelfde webserver waar ik vorig jaar de Zeeslagcompetitie had neergezet.

Als ik in de adresbalk van de browser de GET-parameters invul, komen ze wel mee. Maar de GET-parameters van http://houbenweb.nl/market.html komen totaal niet aan. De string $_SERVER["QUERY_STRING"] blijft ook leeg.
Ik heb zojuist nog even met Wireshark gekeken of er uberhaupt iets binnenkomt. En inderdaad, er komt wat aan:
code:
1
2
GET /koehandel?market=64&id=1393&type=start HTTP/1.1
Content-Type: text/html; charset=iso-8859-1

Het vreemde is dat mijn Java Servlet er totaal niet op reageert... Deze servlet draait trouwens in een Apache Tomcat container.

Misschien kun je ook eens kijken of er uberhaupt wat binnenkomt op je machine, bijvoorbeeld met Wireshark.

  • Darkstone
  • Registratie: mei 2009
  • Laatst online: 26-04-2014

Darkstone

Het kan altijd sneller.

goed.. ik heb nu een c++ socket die min of meer werkt (alleen in firefox.. geen idee hoe dat kan), de vraag is nu:

hoe de f**k haal ik get GET gedeelte van de URL op met QtcpSocket
als ik naar 127.0.0.1:4900/?foo=bar ga, dan kan ik alle functies aanroepen die ik wil, hoogstens word er van "127.0.0.1" geprint..

ik ben waarschijnlijk totaal de verkeerde classes (QTcpServer plus QTcpSocket) aan het gebruiken, maar ik kan nergens vinden welke ik nu wél moet gebruiken ;(
zou de eerste die een werkje c(++) server heeft hem even hier willen posten? dan kan ik ook weer verder

'de sheet' -- Dell Latitude E6520, 1080p, i7-2820QM, X25-M 80GB, 16GB, 97Wh
Gezocht: Baan software development, C++, gave software, omgeving Delft.


  • Arjan
  • Registratie: juni 2001
  • Niet online

Arjan

copyright is wrong

Topicstarter
Ik weet niet waar het precies mis gaat, maar de GET string die ik stuur snapt apache niet.. terwijl netcat + hexdump aangeeft dat ie binair overeenkomt met de string die bv. firefox genereert..

@ darkstone

Ik kan je de code van de koehande server geven, maarja 'werkend'... :+

je moet iig socket->waitForReadyRead() aanroepen ( of met signals werken ) en vervolgens de data lezen ( bv readAll ).
In deze data staat dan gewoon de get string.

[Voor 40% gewijzigd door Arjan op 30-10-2010 23:20]

oprecht vertrouwen wordt nooit geschaad


  • Ryur
  • Registratie: december 2007
  • Laatst online: 14:40
Hmm.. ik probeer nu ook mee te doen.
Hiermee ga ik voor de eerste keer in C# werken, maar heb al ruime (teveel) ervaring in JavaEE; hoop dat mijn kennis bruikbaar is.

Wat mij nu al opvalt hoe lekker VS2010 werkt t.o.v. Eclipse. Alleen nu nog ff kijken voor R#.

Maar mijn vraag is: moet ik nou zelf een remote webserver aanmaken om te testen hiervoor?

  • Darkstone
  • Registratie: mei 2009
  • Laatst online: 26-04-2014

Darkstone

Het kan altijd sneller.

Arjan schreef op zaterdag 30 oktober 2010 @ 23:14:
je moet iig socket->waitForReadyRead() aanroepen ( of met signals werken ) en vervolgens de data lezen ( bv readAll ).
In deze data staat dan gewoon de get string.
_/-\o_ x100

edit: het werkt, nog even portforwarding instellen in mn kpn experiabox...
GoTCoast schreef op zaterdag 30 oktober 2010 @ 23:25:
Maar mijn vraag is: moet ik nou zelf een remote webserver aanmaken om te testen hiervoor?
ja, daar is iedereen nu mee aan het klooien :X

[Voor 6% gewijzigd door Darkstone op 31-10-2010 00:24]

'de sheet' -- Dell Latitude E6520, 1080p, i7-2820QM, X25-M 80GB, 16GB, 97Wh
Gezocht: Baan software development, C++, gave software, omgeving Delft.


  • Onbekend
  • Registratie: juni 2005
  • Nu online
Ik zie dat er bij mij ook geen log-files worden weggeschreven. Dit zou altijd moeten gebeuren zodra het script gestart wordt.
Het lijkt erop dat mijn script totaal niet wordt aangeroepen.


Ik heb op mijn server nu het volgende scriptje staan:
http://www.koolmedemblik.nl/Koehandel/Test.php
PHP:
1
2
3
4
5
<?php
echo "Start...<br>";
echo "Parameters: ".$_SERVER["QUERY_STRING"]."<br>";
echo "End...<br>";
?>

De parameters die je geeft, geeft het programma ook zelf terug.
Misschien kan je daarmee de communicatie testen.

Speel ook Airplane Manager en Repeat


  • MLM
  • Registratie: juli 2004
  • Laatst online: 19-01-2018

MLM

aka Zolo

Arjan schreef op zaterdag 30 oktober 2010 @ 23:14:
Ik weet niet waar het precies mis gaat, maar de GET string die ik stuur snapt apache niet.. terwijl netcat + hexdump aangeeft dat ie binair overeenkomt met de string die bv. firefox genereert..

@ darkstone

Ik kan je de code van de koehande server geven, maarja 'werkend'... :+

je moet iig socket->waitForReadyRead() aanroepen ( of met signals werken ) en vervolgens de data lezen ( bv readAll ).
In deze data staat dan gewoon de get string.
Misschien heb je geen of andere headers gebruikt ofzo, maar met http://web-sniffer.net/ kan ik wel zien dat mijn server werkt, alleen beetje raar dan

-niks-


  • Arjan
  • Registratie: juni 2001
  • Niet online

Arjan

copyright is wrong

Topicstarter
GoTCoast schreef op zaterdag 30 oktober 2010 @ 23:25:
[...]
Maar mijn vraag is: moet ik nou zelf een remote webserver aanmaken om te testen hiervoor?
je zou ook een simpel php scriptje kunnen draaien die je programma aanroept :)
PHP:
1
2
3
<?php
exec( jouwprogramma $_SERVER['QUERY_STRING'] );
?>

oprecht vertrouwen wordt nooit geschaad


  • _js_
  • Registratie: oktober 2002
  • Laatst online: 25-09 03:02
GoTCoast schreef op zaterdag 30 oktober 2010 @ 23:25:
Maar mijn vraag is: moet ik nou zelf een remote webserver aanmaken om te testen hiervoor?
Ik heb in _js_ in "Programming Contest: Koehandel" voorbeeld webservers voor verschillende talen verzameld uit vorige programmeervuur contests. Je kunt ook nog bij de volledige oplossingen die deelnemers hebben gegeven kijken.

Voor C# kun je System.Net.HttpListener gebruiken, het voorbeeld op msdn geeft al een bruikbare aanzet voor dit contest (programma zal wel als admin moeten draaien).

[Voor 3% gewijzigd door _js_ op 30-10-2010 23:45. Reden: sneller :P]


  • CoolGamer
  • Registratie: mei 2005
  • Laatst online: 14:09

CoolGamer

What is it? Dragons?

GoTCoast schreef op zaterdag 30 oktober 2010 @ 23:25:
Hmm.. ik probeer nu ook mee te doen.
Hiermee ga ik voor de eerste keer in C# werken, maar heb al ruime (teveel) ervaring in JavaEE; hoop dat mijn kennis bruikbaar is.

Wat mij nu al opvalt hoe lekker VS2010 werkt t.o.v. Eclipse. Alleen nu nog ff kijken voor R#.

Maar mijn vraag is: moet ik nou zelf een remote webserver aanmaken om te testen hiervoor?
.NET Framework biedt out-of-the-box een basis aan voor een HTTP server. HTTPListener heet de class. Hiervoor zijn als je even zoekt zat voorbeelden te vinden.

Spuit 11 -O-

Programma hoeft niet als admin te draaien als je een poort kiest groter dan 1024.

[Voor 6% gewijzigd door CoolGamer op 30-10-2010 23:49]

¸.·´¯`·.¸.·´¯`·.¸><(((º>¸.·´¯`·.¸><(((º>¸.·´¯`·.¸.·´¯`·.¸.·´¯`·.¸<º)))><¸.·´¯`·.¸.·´¯`·.¸.·´¯`·.¸


  • _js_
  • Registratie: oktober 2002
  • Laatst online: 25-09 03:02
TheCoolGamer schreef op zaterdag 30 oktober 2010 @ 23:44:Programma hoeft niet als admin te draaien als je een poort kiest groter dan 1024.
Toch wel? Ik heb net nog eens getest met mijn oude zeeslag speler, en die opent echt geen poort wanneer die niet als admin draait, ook niet als de port hoger is dan 1024 (mijn gekozen poort was 1728).

  • CoolGamer
  • Registratie: mei 2005
  • Laatst online: 14:09

CoolGamer

What is it? Dragons?

Klopt, je hebt gelijkt.

Je moet een niet administrator eerst registeren voordat hij een poort kan gebruiken. Dit is het commando ervoor (wat je eenmalig moet uitvoeren als administrator):
netsh http add urlacl url=http://+:80/adres user=DOMAIN\User listen=yes


Artikel: http://msdn.microsoft.com/en-us/library/ms733768.aspx

[Voor 10% gewijzigd door CoolGamer op 31-10-2010 00:22]

¸.·´¯`·.¸.·´¯`·.¸><(((º>¸.·´¯`·.¸><(((º>¸.·´¯`·.¸.·´¯`·.¸.·´¯`·.¸<º)))><¸.·´¯`·.¸.·´¯`·.¸.·´¯`·.¸


  • JeroenTheStig
  • Registratie: mei 2000
  • Laatst online: 06:42
MLM schreef op zaterdag 30 oktober 2010 @ 23:41:
[...]

Misschien heb je geen of andere headers gebruikt ofzo, maar met http://web-sniffer.net/ kan ik wel zien dat mijn server werkt, alleen beetje raar dan
Als ik op web-sniffer.net de URL ;http://houbenweb.nl:56789/?connect=&url1=test.nl' invul, dan zie je dat de response niet goed is:
code:
1
Status: GET /?market=71&id=1421



Normaal zou je zoiets willen zien als response:
code:
1
2
3
4
5
Status: HTTP/1.1 200 OK
Server: Apache-Coyote/1.1   
Content-Length: 8   
Date:   Sat, 30 Oct 2010 22:17:44 GMT   
Connection: close


[edit]
Ik zie net dat dit niet heel belangrijk is, omdat dit alleen het aanmelden betreft.

[Voor 13% gewijzigd door JeroenTheStig op 31-10-2010 00:27]


  • Arjan
  • Registratie: juni 2001
  • Niet online

Arjan

copyright is wrong

Topicstarter
Die response kan ik zo aanpassen,het probleem zit echter in de GET query die mijn server verstuurd, apache pikt deze niet op!
En ik heb eigenlijk geen idee waarom..

[Voor 3% gewijzigd door Arjan op 31-10-2010 00:35]

oprecht vertrouwen wordt nooit geschaad


  • Darkstone
  • Registratie: mei 2009
  • Laatst online: 26-04-2014

Darkstone

Het kan altijd sneller.

als ik deze header gebruik:
code:
1
2
3
4
5
6
HTTP/1.0 200 OK\r\n
Location: http://127.0.0.1/\r\n
Connection: close\r\n
Content-Type: text/html; charset=UTF-8\r\n
\r\n
blaargh content hier


doet hij het *eindelijk* in IE.

nu nog even portforwarding configureren op mn experiabox, dat word feest :')

edit: simpele vraag:
ik wil QByteArray::operator[] (char&) overloaden zodat ik:
C++:
1
money = getQuerry["money"];

kan dit zonder de source van QByteArray aan te passen?

ik meen me te herrineren dat het kon met een bepaalde constructie, maar ik ben vergeten welke, google helpt mij ook niet 123 verder.

[Voor 48% gewijzigd door Darkstone op 31-10-2010 02:26]

'de sheet' -- Dell Latitude E6520, 1080p, i7-2820QM, X25-M 80GB, 16GB, 97Wh
Gezocht: Baan software development, C++, gave software, omgeving Delft.


  • joppybt
  • Registratie: december 2002
  • Laatst online: 18:22
Arjan schreef op zondag 31 oktober 2010 @ 00:34:
Die response kan ik zo aanpassen,het probleem zit echter in de GET query die mijn server verstuurd, apache pikt deze niet op!
En ik heb eigenlijk geen idee waarom..
Jij stuurt request
code:
1
2
GET /default.asp?market=76&id=1441&type=start HTTP/1.1
Content-Type: text/html; charset=iso-8859-1

Dat vind mijn IIS webserver ook niet fijn.
Als je aan het HTTP/1.1 protocol wilt voldoen moet je namelijk ook een host-header meesturen, dus
code:
1
2
3
GET /default.asp?market=76&id=1441&type=start HTTP/1.1
Host: pietje.example.com:82
Content-Type: text/html; charset=iso-8859-1

Dan pikt mijn webserver het al een stuk beter op vanaf de buitenwereld.
(alternatief is HTTP/1.0 gebruiken maar dat is om allerlei andere redenen weer een verslechtering)

  • JeroenTheStig
  • Registratie: mei 2000
  • Laatst online: 06:42
joppybt schreef op zondag 31 oktober 2010 @ 11:43:
[...]

Jij stuurt request
code:
1
2
GET /default.asp?market=76&id=1441&type=start HTTP/1.1
Content-Type: text/html; charset=iso-8859-1

Dat vind mijn IIS webserver ook niet fijn.
Als je aan het HTTP/1.1 protocol wilt voldoen moet je namelijk ook een host-header meesturen, dus
code:
1
2
3
GET /default.asp?market=76&id=1441&type=start HTTP/1.1
Host: pietje.example.com:82
Content-Type: text/html; charset=iso-8859-1

Dan pikt mijn webserver het al een stuk beter op vanaf de buitenwereld.
(alternatief is HTTP/1.0 gebruiken maar dat is om allerlei andere redenen weer een verslechtering)
Ah, dat is mooi, mogelijk lost dat ook mijn problemen op (Java Servlets + Apache Tomcat).

  • Arjan
  • Registratie: juni 2001
  • Niet online

Arjan

copyright is wrong

Topicstarter
Ik heb de host toegevoegd aan de GET query en bolukan mede-auteur gemaakt voor de topic start, aangezien ik vandaag niet veel tijd heb om er mee bezig te zijn en de zondag de ideale dag is voor jullie om wat te proggen :p

oprecht vertrouwen wordt nooit geschaad


  • joppybt
  • Registratie: december 2002
  • Laatst online: 18:22
Arjan schreef op zondag 31 oktober 2010 @ 12:18:
Ik heb de host toegevoegd aan de GET query en bolukan mede-auteur gemaakt voor de topic start, aangezien ik vandaag niet veel tijd heb om er mee bezig te zijn en de zondag de ideale dag is voor jullie om wat te proggen :p
Bijna goed: Host moet de url van 'onze' server zijn en niet hard-coded Host: houbenweb.nl:56789

  • Arjan
  • Registratie: juni 2001
  • Niet online

Arjan

copyright is wrong

Topicstarter
oh, hehe oeps :P is aangepast

oprecht vertrouwen wordt nooit geschaad


  • JeroenTheStig
  • Registratie: mei 2000
  • Laatst online: 06:42
Volgens mij wordt de poortnummer nog niet goed meegegeven aan de host. Ik zie namelijk in de logging 'Host: ***:‘\r\n'

Daar zou nog 8081 achter moeten staan :)

[Voor 5% gewijzigd door JeroenTheStig op 19-01-2011 15:48]


  • Skinny
  • Registratie: januari 2000
  • Laatst online: 02:22

Skinny

DIRECT!

Boktor schreef op zondag 31 oktober 2010 @ 12:41:
Volgens mij wordt de poortnummer nog niet goed meegegeven aan de host. Ik zie namelijk in de logging 'Host: xxx.yyy.zzz:‘\r\n'

Daar zou nog 8081 achter moeten staan :)
D'r staat wel iets.. een a in de lucht ;-)

...\nHost: *****.com:ª\r\nContent-Type: text/html; charset=iso-8859-1\r\n

[Voor 3% gewijzigd door Skinny op 10-12-2020 10:00]

SIZE does matter.
"You're go at throttle up!"


  • Arjan
  • Registratie: juni 2001
  • Niet online

Arjan

copyright is wrong

Topicstarter
Skinny schreef op zondag 31 oktober 2010 @ 12:43:
[...]


D'r staat wel iets.. een a in de lucht ;-)

...\nHost: *****.com:ª\r\nContent-Type: text/html; charset=iso-8859-1\r\n
is gefixt, de server kan net ff unresponsive geweest zijn, maar zou nu gewoon moeten draaien

oprecht vertrouwen wordt nooit geschaad


  • joppybt
  • Registratie: december 2002
  • Laatst online: 18:22
Hmm, als ik met wireshark kijk stuur jij ondertussen een prima request naar mijn server.
Desalniettemin keurt mijn IIS hem af met 400 Bad Request.
Als ik jou request met telnet uitvoer gaat het wel goed.

Ik zal nog verder zoeken

  • Skinny
  • Registratie: januari 2000
  • Laatst online: 02:22

Skinny

DIRECT!

@joppybt: zelfde probleem hier maar dan met een HttpListener in C#.. de request via telnet komt goed door (ook vanaf externe lokatie) maar vanaf de game server niet..

[Voor 9% gewijzigd door Skinny op 31-10-2010 13:27]

SIZE does matter.
"You're go at throttle up!"

Pagina: 1 2 3 4 Laatste


Nintendo Switch (OLED model) Apple iPhone 13 LG G1 Google Pixel 6 Call of Duty: Vanguard Samsung Galaxy S21 5G Apple iPad Pro (2021) 11" Wi-Fi, 8GB ram Nintendo Switch Lite

Tweakers vormt samen met Hardware Info, AutoTrack, Gaspedaal.nl, Nationale Vacaturebank, Intermediair en Independer DPG Online Services B.V.
Alle rechten voorbehouden © 1998 - 2021 Hosting door True

Tweakers maakt gebruik van cookies

Bij het bezoeken van het forum plaatst Tweakers alleen functionele en analytische cookies voor optimalisatie en analyse om de website-ervaring te verbeteren. Op het forum worden geen trackingcookies geplaatst. Voor het bekijken van video's en grafieken van derden vragen we je toestemming, we gebruiken daarvoor externe tooling die mogelijk cookies kunnen plaatsen.

Meer informatie vind je in ons cookiebeleid.

Sluiten

Forum cookie-instellingen

Bekijk de onderstaande instellingen en maak je keuze. Meer informatie vind je in ons cookiebeleid.

Functionele en analytische cookies

Deze cookies helpen de website zijn functies uit te voeren en zijn verplicht. Meer details

janee

    Cookies van derden

    Deze cookies kunnen geplaatst worden door derde partijen via ingesloten content en om de gebruikerservaring van de website te verbeteren. Meer details

    janee