Ah, I see. Well, I've done it several times, but not object-oriented. Or maybe, semi-OOP. Like I think I had objects for "player" and "deck" and "table" but not like PokerGame - I just composed the little classes into a function based system.
I have always played a lot of different games, so from the get-go I built a system that would support nearly any arbitrary poker game. I did this by making sort of a meta-language that described how poker games were played, i.e. supporting draws and discards and betting rounds, etc. Then I made a system for essentially producing the next event from the current state and the game description. It's been a reallllly long time since I've looked at it but this is basically how it worked.
My system was for simulation, but it has the same basic requirements as writing a poker server, because I was interested in simulating strategies, so I would basically pit strategies against each other and simulate hand after hand. I was frustrated that most poker stats were based on all in equity, usually against a random range (this was pre-pokerstove or maybe about the same time). So I wanted to see how hand equities held up against players who were tight and passive, etc.
Here's a link to what my game description file looks like. It's probably relatively self-explanatory. The actual code to deal hands is probably messy as ****, it's been like 15 years since I wrote it, and I was interested in results more than perfection. It's written in a hybrid of C++ and tcl/tk (a scripting language, like perl or python)
https://gist.github.com/rustybrooks/...9eab6f5c0af2e4