Well, this post is all about how I am programming the networks, and hopefully, how I think I am being "smart". Hopefully it doesn't all backfire into my face.
First of all... the way that the server and the client will be "sending" messages will be very, very similar. Thus, if the messages what they send will be similar, so will the messages they receive. The BIG difference comes in how they respond once the message is received.
For instance. The Client will request "DrawCard","Library" (Because I want the commands to look similar I added Library... Library is actually "Implied" with "DrawCard".) Then the server will send a reply "DrawCard","Forest"... In this case the "implied" position (the hand) is not used. So the message sent was the same, but the server will respond differently than the client will...
So what I've done to help me code cleanly, and hopefully smartly, is I've used the Lazarus feature of "including" files. So my generic send code can be used (NetSend.inc) for both the server and the client... both have "command","parameter" sending, it's just that the client is saying "DrawCard","Library", whilst the server is saying "DrawCard","Forest"... but they both use the exact (letter for letter) same code.
Even the receiving (NetReceive.inc) code can be reused, up to the point where the *interpretation* of "DrawCard" needs to happen. That then is seperated into the server's code, and the Client's code.
It does mean though that I'll have some "dead" commands on both sides... like "RequestNewTable"... the Server won't be sending a table request back... It does something else. This is few and far between though, so hopefully not too many dead alleys in my code.
Looking forward to hopefully be able to do some connecting to tables, and talking away soon. (And after that... who knows? Drawing and playing cards!)
Labels: Networking, Programming
If anyone who's using a newish version of DA, can email me a screenshot (where the opponent hand is inside the main window) I'll much appreciate it. Or you can just replace it on the wiki directly.
Thanks!
Labels: Community
Hi all,
I want to apologize that February is (likely) not going to make it. However I am going through all the code at the moment and noticing where I can improve. So in a lot of instances it's a rewrite (well, not complete) of the existing code. It is because the old code was geared at getting single player working, but now I need slightly more abstract code to deal with multi player and single player.
For instance, as it is at the moment, creating a token, and playing a card doesn't use any of the same code (it's pretty much copied and pasted and then modified). However for internet play, it would be much cleaner if I could just have
"Playcard('Atog',X,Y,Facing)"
and
"Playcard('Saproling token',X,Y,Facing)" (the problem is that DA doesn't "know" Saproling token, but it knows Atog).
But that's not how it works at the moment... and that's the type of thing I need to fix. Basically playing a token will tell DA (not forever, just for now) that Saproling token, is a 1/1 green card with the name "Saproling token".
So far I've therefor implemented the "hand" actions, and looked through the "zone" actions, but they all indirectly reference stuff that falls in the "in-play" actions, where I've not yet got.
I am not going to put a target date down (again), but know that I am working on DA almost daily at the moment, so we'll be getting there sooner rather than later.
Labels: Programming
This is a revision has some fixes, shows some of the work on the networking, but also, includes a Conflux patch. Hopefully it works great, and everything is hunky-dorey!
Let me know if any bugs came out of this revision.
Revision 101:
F : Multiple users on one installation is supported now (different settings per user) - to be tested on linux
F : A pointer is added for multiplayer games (not visible in single player) to point at blockers etc.
Fix : You can now shift cards up and down when viewing a zone.
Fix : Searching for "Gold" and not "exclude unselected colors" will find all the gold cards
F : Added an application icon.
C : Send messages of the whole "hand" window, excl life actions.
M : Conflux is now included. PLEASE TEST, as I do not supply it. Let me know if there is funnies!
Labels: Networking, Revision, Search
I was on the #Lazarus-ide channel on the Freenode server the other day, talking about open source projects and so forth. Some of the other people commented that in terms of open source, it's usually not the "best" programmers that can pull off the marvels of open source, but the most dedicated.
With that I realised that the networking is probably not that hard, I should just start. So really good news is that I've been busy! Nothing that will affect the users much at the moment, but in time, everything will slot together nicely.
My strategy for tackling this task is to do all the "sending" code first, and then follow with the receiving code (which I think will be harder, but if the sending is finalized, the receiving should be much easier).
My progress so far:
* I've added building blocks for sending code (which will probably be reused in the server).
* I've implemented most of the sending of actions in the "hand"
Labels: Networking