Future plans

Oct 14, 2008 at 6:54 PM
Hello,
Are there any plans for future development?

Cheers
Coordinator
Oct 15, 2008 at 11:08 AM
Hi,
Thanks for your interest in the project.
Currently the plans are that RC 3.5 will mature to become the first version of the application.
In the future there are many fields in which the project can grow:
  • Connect the server to a backend database which will store statistics and player rankings
  • Provide statistics to the players which will show their given hand strength
  • Implement a tougher computer adversaries
  • Better game graphics
  • Internet game rooms
  • More...

All of these fields can be covered as it depends on the amount of time invested.
The open source community is more than welcome to contribute so the project will grow:

  • Bug reports/fixes
  • Feature requests
  • Patches Implementation

Thanks again for the support

Gil

Oct 15, 2008 at 3:33 PM

Hello Gil,
First let me say: GREAT JOB

I am glad to hear that. Since discovering this project, I spent last few months looking over your application and implemented major and minor architectural & structual changes. Here is quick overview.
Separated application into 5 solutions.

  1. Game Server
    • Multithreaded game server implemented as Windows service
    • Remote game management via Admin console
    • Additional configuration features as number of seats, minimum number of players
    • Complete games logging
    • Uses WCF
    • More
  2. Lobby Server
    • Provides for central client log in
    • Provides list & status of games
    • Provides game logs to clients
    • Implemented as windows service
    • Managed via WCF
    • More 
  3. Client (little work done)
    • Client dependent on WCF service only
    • Most likely will be done in Silverlight 2
    • Eliminate dependencies on internal dll's
    • Client designed in 2 parts
      • 1 lobby connection UI
      • 1-x games UI
  4. Admin Console
    • Provides central UI for management of all servers
    • Handles multiple game, lobby & bot servers  
    • Stores configuration and data in database
    • Uses DevExpress XAF & XPO
  5. Bot Server
    • Independent AI server implemented as windows service
    • Managed via WCF
    • Ability to handle multiple bot with custom configurations 

My list of other features I would like to implement is about mile long and I am sure will take long time. High on my list is implementing full logging, tracing and exception handling via Enterprise library and implementing unit tests.
I am planning first big milestone for this week end. 100 concurent  game tables with 500 AI players. I am hoping to get idea on scalability of the whole system and amount of optimization needed.
On the positive note. I did run 100,000 games on 5 concurent tables totaling 23 players with full game log with out any problem. All runing on my workstation. 


Cheers

Ivan Bondy - MCPD, MCDBA, MCSA, MCTS - Sharepoint consultant

Coordinator
Oct 16, 2008 at 10:53 AM
Hi Ivan,
I will be happy to see your work in action.
I know that other people who were interested in the project will love to see it as well.
Keep us posted!
Thanks,
Gil
Oct 20, 2008 at 3:56 PM
Edited Oct 20, 2008 at 4:26 PM
Hello Gil,
I started blog about my experience with WPFPoker. 
I am hoping to post my poker plans later on this week.
http://www.ivanbondy.com/Blog/archive/tags/Poker/default.aspx

Cheers
Ivan
Nov 28, 2008 at 8:47 AM
Keep up with the good work!
I am looking for future development on this project.
Coordinator
Nov 29, 2008 at 9:33 PM
Hi!
Thanks for your comment and taking the time to vote on new features.
Be sure to register to the project RSS feed so you won't miss any future update.

Gil
Mar 25, 2009 at 2:25 PM
Hi all.
I'm glad I stumbled across this project! Is it still alive?

Are there any instructions on how to get a game running? I can get it to build and the client to execute, but I'm not sure how to get the game server running and the client hooked up.
Coordinator
Mar 25, 2009 at 7:31 PM

Hi!
Thanks for your interest in the project.
Regarding your first question, the project is still alive; future development is in hibernation on my part. Since this project is an open source project, the community is more than welcome to develop it and enhance it.
The only public project which extends it is described in the previous posts by Ivan.

Regarding your second question, when the client loads click "Game"->"Start New Game"
on the wizard select the "Single Player", click "Next", now enter the number of computer opponents you want and click "Finish".
Wait for the game to load and enjoy!

Good luck!
Gil

Mar 25, 2009 at 8:09 PM
It works! :) Thanks Gils. I'll see what damage I can do to it.
May 2, 2009 at 2:08 AM
Edited May 5, 2009 at 9:54 PM
    First of all let me tell you once again ... nice job. I really like to say thanks, Why? Because months ago I told you that I will try to change this program to Visual Basic, so you suggest me that better try to learn CSharp. I did. I'm not the better of the better, that's your position but in these months I have learnt many new things about Csharp. I have made some changes to your program (Raw sockets version), I made a graphical client (windows forms) with characters (people playing) like those on programs like bwin and pokerstars.
    I'm still learning some techniques, so I have opened at least 200 ports on my computer to assist players on 200 different rooms, I know is not the better way but for the moment is ok, if you have any tip that you like to share on how to implement the manage of many rooms using the same port, is very welcomed, I think it will require many many many changes to the code (socket version).

Thanks.
Coordinator
May 2, 2009 at 8:48 PM
    

Hi Jonathan,

Glad to see you're making progress. I'm glad to read about it, I'll be happier seeing a running version of your poker.

Regarding your question about the sockets, the current design only hosts a single room in a server. Although this design is simple, it doesn't impose a restriction on changing it to host multiple rooms.
To be more technical, you can open a single server socket to listen to incoming clients. When the room is selected, (either by the player or the server,) you can pass the client socket to the selected room.  With this solution you'll get a single point of access to all of your rooms.
Your intuition was right. This solution will require some changes in the design, and more work on the communication protocol (in the raw sockets version).

So after you learned C#, you might want to learn (kind of) a new technology. I suggest you take a look at the WCF version and see that it isn't that scary. You can skip all of that nasty communication plumbing and concentrate on your desired poker features.

Good luck!

Gil
May 3, 2009 at 6:21 PM
Hi Gils

Thanks for your advises and your help, I really appreciate that.
On more question, according to your experience, What will I win in WCF version compared with raw sockets? I mean, will be easier to change the code to run multiple rooms? I'll take your advise and learn a little of WCF.

Thanks ...
Johnatan.
May 4, 2009 at 5:56 PM
Edited May 4, 2009 at 9:52 PM
Johnatan,
I am in the middle of moving to the new house, but I will try, in next few days, to send you my multi-table version using WCF. You may get little better performance using sockets, but you will have hard time with scalability and maintainability. WCF is definitely way to go. You can use tcp, http or other supported WCF protocols with no or minimal code changes.

Cheers
Ivan Bondy
 
May 4, 2009 at 8:51 PM
Ibondy,
Thanks for your help and your offer, I really appreciate it. I'll waiting for that. Meanwhile, I'll be reading some books about WCF.
Once again, thanks.

Cheers
Johnatan
Aug 4, 2009 at 6:36 PM

Hi gils/Ibondy ...

Here for this place again, as you remember I liked a lot your poker project, in fact thanks for that and suggestions because now I fill more confortable with c# instead of vb.net. (now I'm experimenting a little with c++). Well, On these vacations I like to dedicate more time to put my ideas on the project, in fact I make a new client (windows form) with avatars, and changing that now to XNA (I know I can use WPF but I like XNA). I know you use WCF but I still think will get better performance using raw sockets and that's the road I'll take for this time maybe make some changes to WCF. Now, My questions is; MS has made many improvements on sockets to get high performance on high concurrency over servers, said that, I like to know if is good idea make the lobby based on asynsocket project (http://asyncsocket.codeplex.com/) and change the game server to use nito async library (http://nitoasync.codeplex.com/)?

What do you think?

Why did I say that type of questions? Well, your server code is synchronous, I mean it wait for player answer but in a multitable game I suppose it must act in a different way, I mean wait but for multple answer in different rooms. (Remember, I'm learning new thigs everyday, and that because of you).

Good project, excellent code, brilliant people ...

Thanks,

Johnatan ...

Coordinator
Aug 6, 2009 at 8:01 AM

Hi Jhonatan,

Glad to read you made some more progress. When will we be able to see a running version of the game?

To answer your question, sure you can use those libraries to improve the server code to support multitables server.
I understand you want to do it with basic sockets instead of WCF, I think it is a good approach to use an existing library to do so.
Since the server was designed for simplicity you'll need to refactor a little bit to improve it to be asynchronous.

Good luck!

Gil

Aug 7, 2009 at 7:36 PM

Hi Gil,

Well I hope to make available the poker client soon, but I'm making some needed changes ..., I'm going to add those libraries (already tested) to manage game server and lobby ...

I like to ask you something: if you were making changes to the server to control dropped connections, How do you try/achieve it? I mean, when the server is weaiting for requiered players they connect at the moment and the server list in his table but before begin somebody can drop its connection later trying to connect again it will receive "name exist".

To start the game I added a delegate timer that check when the minimum players have been connected, wait for more five seconds and start the game if there were more connections.

I was wondering if is good idea to add a delegate timer (is going to check the whole list) that continiously check for valid connections? and if so, How to check that the connection is realy valid? because "isavailable" property from sockets always return true.

If the server recognise when player dropped it can send the list of real connected users or recent dropped connections and in that way refresh the room and add/delete avatars in it.

Regards,

Johnatan ...

Coordinator
Aug 9, 2009 at 6:34 PM

Hello once again,

I'll start by answering your second question.
Yes, the IsAvailable property will always return true, that is because the socket is a logical connection made by multiple physical connections (routers, switches, and your ethernet/wifi card) so there is no way of telling that the physical connection is broken until you'll try to send/receive something.
Most communicative applications uses time outs  to detect loss of logical connections. In most cases there is a timer which checks when was the last active broadcast on the channel and if that time is higher than a defined timeout it declares the connection as lost and initiates the socket shutdown.
In conclusion, your intuition was right. You'll have to have a timer (one is enough) which will test a data structure which maps each socket to the time it was last active. I guess your socket wrapper will have to update that data structure with the last active time.

Regarding your first question, I don't know how you modified the server to support multitables. I can refer to the single table room design.
In the case a connection is lost, the player will be dropped (it should free the player name). I don't think this is implemented prior to a game start, so a solution as described above should be added to monitor the connection and test if some players didn't give up and disconnected from the server.

Hope it helps,

Gil

Jan 10, 2010 at 9:53 PM

Is anyone still contributing to this project? I found it a few days ago and was very impressed about the development so far.
I read all the discussions and saw that some of you already improved some of the mentioned points. What do you think
about sharing all your code? I'm very interested in the UI and multi table improvements.

I'm now starting to develop a simple "tight aggressive" strategy as starting point that can be used by the bot players.
But I think I first have to improve the logic a bit. There is a lot of information, that is not exposed to the Strategy-Classes
right now (like potsize, nr. of players, nr. of active (not folded) players, position and so on). It makes no sense to start with
the strategy if all the information is missing.

Does someone is still interested in developing for this project? Please contact me!

Best regards,
Tobias

Jan 10, 2010 at 11:53 PM

Hello Tobias,

I am still working on new version of WPF Poker (time permitting). Currently, I am re-writting  poker engine to use async pattern. Re-write is targeting Internet play and scalability. The client and UI will be in Silverlight instread of WPF and using sockets instaed of WCF. (due to Silverlight limitations with duplex connections).  Contact me at ivan at mammothmicro.com.

 

Coordinator
Jan 11, 2010 at 4:06 PM

Hi Tobias!

I'm glad you found interest in the project!
Regarding your first question, I refer you to my reply from March 25th, 2009.
You can read here all of the ventures of other users who might want to contribute. I suggest teaming up with them and contributing to the project.
As you can see, I'm still monitoring the posts and will be more than happy uploading any patch that is useful.

Regarding your remark on improving the AI strategies: I think you can easily pass the missing information if you change the WaitSynchronization method in AiClientHelper so it will pass the missing information to the AI strategy (I suggest adding another virtual method, so you won't break the API of other implementations).
All of the information you need is there: The player are ordered according to their round order; you got the pot information and the community cards.

Hope it helps,

Gil

Coordinator
Jan 11, 2010 at 4:13 PM

Hi Ivan!

Just a quick thought regarding the use of async patterns which you've mentioned. A few of the new features in .NET 4.0 might be helpful:

Keep us posted!

Gil

Jan 11, 2010 at 4:45 PM

Hello Gil,

Yes .Net 4.0 is great and I am using System.Threading.Tasks library. I redesigned engine to look more like a workflow process. At the beginning of the game you set your game tasks items (shuffle, deal, betting, etc.), their order and the engine than executes the game. That way creating new games or modifying existing games will involve just plugging in new task item(s).

I just wish I had more time to spend on this project!

Ivan

Coordinator
May 16, 2010 at 1:26 PM

Hello all,

I've updated the project to support .NET 4.0 and Visual Studio 2010. The sources are now branched to support the old framework (and VS2008) and the new framework.
The only major change is that the service discovery is now using the new implementation of WS-Discovery which is now a part of .NET 4.0.

Contributions may still be accepted to both versions.

Gil

May 17, 2010 at 4:03 AM

Good to know that you¿re still working (time permitting) in the poker project, I have made some changes to code but my time now is limited too. I suppose that if you updated the code to get the nice features of VS2010, if possible that those changes include the new concurrent dictionary and all related, it eliminate the necessity to lock before make any change to the items list.

As I said before, you did an excellent job with this beatiful jewerly of code, I have learnt a lot, and since that day my first choice for programming is c#.

Cheers,

Johnatan.

Dec 13, 2011 at 7:24 PM

Hello Gil

Is there anything new with this project?

Cheers,

Ogao

Dec 13, 2011 at 11:04 PM

Hi, I didn't contribute anything yet. Actually I have no experience in socket or WCF programming. Maybe the recently active coders in this project like gils, ibondy and johnatan17 can tell if anything happened or contribute their last achievements so we can build on it.

Best regards, toolsche

Coordinator
Dec 18, 2011 at 1:32 PM

Hi All,

I'm sorry to inform you that this project is no longer active.

Since it is an open source project it now belongs to you as the community who is interested in it.

Feel free to open a new project and keep it growing with new features and bug fixes.

And please don't forget to paste the link to the new project here so others will enjoy it too.

Best wishes.

Gil

May 24, 2014 at 11:55 PM
GREAT JOB, Gil! It's been almost 3 years since this project is with no activity, but still good! How about @ibondy update? Can we see something? Where have you upload it?
Im news here, so Im gonna check your projects! :) I hope I can contribute something!