Author SHA1 Message Date
floty 015d6b7c72 create additional class for server time delay; remove define NEW_LOCAL_GAME 2014-07-27 18:09:19 +02:00
floty 304eac07a3 first modifcations for new local game; enabling: uncomment define NEW_LOCAL_GAME in game_defs.h 2014-07-11 18:15:40 +02:00
floty cf60947efc delete old cards value function, thx for the great reliability last 8 years ;) 2014-06-12 02:32:38 +02:00
floty b79c60e246 complete integration of new cards value function with an additional auxiliary function; renaming some variables; comment old code 2014-06-12 02:24:59 +02:00
floty a2d7c2e916 running astyle 2014-06-08 17:04:59 +02:00
floty 16f3f6ceb2 shifting auxiliary function bitcount from Tools to CardsValue 2014-06-08 17:03:53 +02:00
floty 61bdbe8e06 edit hints of cppcheck 2014-06-04 00:45:55 +02:00
doitux 027ba4c2f7 Update and rename PokerTH.appdata.xml to pokerth.appdata.xml 2014-05-27 12:34:27 +02:00
doitux b51c346695 Update PokerTH.appdata.xml
Fix some typos
2014-05-27 10:31:33 +02:00
doitux 1d86cd3835 Update PokerTH.appdata.xml 2014-05-27 10:29:58 +02:00
doitux c1d7266e50 multiple changes (like backbutton handling fixes) for android releases 1.1.1 2014-05-27 08:04:47 +02:00
doitux f3c86990c9 Merge remote-tracking branch 'origin/master' 2014-05-27 08:03:36 +02:00
doitux ceb123d21d android changes on gametable 2014-05-27 08:03:30 +02:00
doitux df2cf5287a android changes on startwindow 2014-05-27 08:02:18 +02:00
doitux 72d8e59d18 add initial appdata file (#280) 2014-05-27 07:22:54 +02:00
floty 590f9f7a33 prepare implementing new cards value function for calculating odds: rename myCards to myHoleCards 2014-05-26 12:41:21 +02:00
floty 6dffbaeea5 implement short version of new cards value function; reimplement calc cards chance with new short cards value function 2014-05-26 02:06:49 +02:00
floty 0f59c0ad57 implement new cards value function; circa factor 10 faster than old version 2014-05-24 15:13:49 +02:00
floty ac85136ac2 activate new format for log export due to insufficients part of old format 2014-05-11 16:45:23 +02:00
lotodore c2fa235e80 Merge branch 'master' of github.com:/pokerth/pokerth 2014-05-10 21:07:15 +02:00
lotodore 36149eddfe Adding different error messages for connection failure with IPv6 (#276). 2014-05-10 21:06:50 +02:00
floty e4d358f97a cleanup game logging; delete old code and disused defines 2014-04-04 18:51:26 +02:00
lotodore 316f2f43c3 Adding libboost-chrono dependency on Mac/Linux. 2014-03-29 20:33:21 +01:00
lotodore 757f12f35b Switching from asio deadline_timer to asio steady_timer in order to fix #55. This requires the (boost or native) chrono lib. 2014-03-29 16:13:53 +01:00
floty 8a1e3a4371 bugfix check log-object for debug_mode 2014-03-25 21:33:10 +01:00
floty 1f0e256fe6 reorgranize debug_mode 2014-03-23 23:11:16 +01:00
floty b93525607e run astyle 2014-03-16 21:46:52 +01:00
floty 2a78c06d03 reorgranize debug_mode 2014-03-16 21:45:35 +01:00
floty ef96b76c1d replace throwing exceptions in distribute pot function by error handling with error messages 2014-03-15 18:58:04 +01:00
284 changed files with 9768 additions and 25515 deletions
-21
View File
@@ -1,21 +0,0 @@
# exclude changes done by make process
Makefile
Makefile.chatcleaner
Makefile.pokerth_db
Makefile.pokerth_game
Makefile.pokerth_lib
Makefile.pokerth_protocol
Makefile.pokerth_server
Makefile.pokerth_dbofficial
bin/
chatcleaner
lib/
mocs/
obj/
pokerth
qrc_pokerth.cpp
uics/
make.sh
gitpush_serverstuff_stable
pokerth_server
.vscode/
-10
View File
@@ -1,13 +1,3 @@
2017-09-01 version 1.1.2
- PokerTH is now fully compatible with c++11 compilation mode
- Upgraded to websockets 0.7
- BUGFIX: SQL errors are saved to server log (partly #324)
- BUGFIX: Players deliberately preventing start of play (#304)
- BUGFIX: Rating feature didn't work for special usernames (#319)
- BUGFIX: Ignore feature only works after restart (#320)
- BUGFIX: Shorten too long usernames on the table gui (#326)
- BUGFIX: "accidentally call" blocker now for working for FKey presses (#330)
2014-01-10 version 1.1.1 2014-01-10 version 1.1.1
- BUGFIX: Fixed crash when the first action in the first game times out (#258) - BUGFIX: Fixed crash when the first action in the first game times out (#258)
- BUGFIX: Properly refresh the game table graphics after changing settings (#253) - BUGFIX: Properly refresh the game table graphics after changing settings (#253)
+2 -2
View File
@@ -15,7 +15,7 @@ Linux:
- libSDL_mixer, libSDL --> http://www.libsdl.org/ - libSDL_mixer, libSDL --> http://www.libsdl.org/
- libSQLite3 --> http://sqlite.org/ - libSQLite3 --> http://sqlite.org/
- libtinyxml > 2.0 --> http://www.sourceforge.net/projects/tinyxml - libtinyxml > 2.0 --> http://www.sourceforge.net/projects/tinyxml
- protoc >= 2.3.0 (during build), libprotobuf >= 2.3.0 -> https://github.com/google/protobuf - protoc >= 2.3.0 (during build), libprotobuf >= 2.3.0 -> http://code.google.com/p/protobuf/downloads/list
- For the server: libircclient 1.3 --> http://www.sourceforge.net/projects/libircclient/ - For the server: libircclient 1.3 --> http://www.sourceforge.net/projects/libircclient/
Windows: Windows:
@@ -28,7 +28,7 @@ Basic Installation
Linux: Linux:
1. Type "cd path/to/the/sources". Then do for example "/usr/qt/4/bin/qmake pokerth.pro" to configure the makefile for your system. 1. Type "cd path/to/the/sources". Then do for example "/usr/qt/4/bin/qmake pokerth.pro" to configure the makefile for your system.
Pay attention that the QTDIR environment variable points to Qt4 not Qt3. For example QTDIR=/usr/qt/4. Pay attention that the QTDIR environment varialbe points to Qt4 not Qt3. For example QTDIR=/usr/qt/4.
You can set this variable typing: "export QTDIR=/usr/qt/4" You can set this variable typing: "export QTDIR=/usr/qt/4"
2. Type "make" to compile the package. 2. Type "make" to compile the package.
-1
View File
@@ -28,7 +28,6 @@
* shall include the source code for the parts of OpenSSL used as well * * shall include the source code for the parts of OpenSSL used as well *
* as that of the covered work. * * as that of the covered work. *
*****************************************************************************/ *****************************************************************************/
syntax = "proto2";
option java_package = "de.chatcleaner.protocol"; option java_package = "de.chatcleaner.protocol";
option java_outer_classname = "ProtoBuf"; option java_outer_classname = "ProtoBuf";
+2 -2
View File
@@ -41,13 +41,13 @@ unix : !mac {
QMAKE_LIBDIR += lib $${PREFIX}/lib /opt/gsasl/lib QMAKE_LIBDIR += lib $${PREFIX}/lib /opt/gsasl/lib
INCLUDEPATH += $${PREFIX}/include INCLUDEPATH += $${PREFIX}/include
LIB_DIRS = $${PREFIX}/lib $${PREFIX}/lib64 $$system($$QMAKE_QMAKE -query QT_INSTALL_LIBS) LIB_DIRS = $${PREFIX}/lib $${PREFIX}/lib64 $$system(qmake -query QT_INSTALL_LIBS)
BOOST_PROGRAM_OPTIONS = boost_program_options boost_program_options-mt BOOST_PROGRAM_OPTIONS = boost_program_options boost_program_options-mt
BOOST_SYS = boost_system boost_system-mt BOOST_SYS = boost_system boost_system-mt
# #
# searching in $PREFIX/lib, $PREFIX/lib64 and $$system($$QMAKE_QMAKE -query QT_INSTALL_LIBS) # searching in $PREFIX/lib, $PREFIX/lib64 and $$system(qmake -query QT_INSTALL_LIBS)
# to override the default '/usr' pass PREFIX # to override the default '/usr' pass PREFIX
# variable to qmake. # variable to qmake.
# #
+2 -2
View File
@@ -42,14 +42,14 @@ unix : !mac {
QMAKE_LIBDIR += lib $${PREFIX}/lib /opt/gsasl/lib QMAKE_LIBDIR += lib $${PREFIX}/lib /opt/gsasl/lib
INCLUDEPATH += $${PREFIX}/include INCLUDEPATH += $${PREFIX}/include
LIB_DIRS = $${PREFIX}/lib $${PREFIX}/lib64 $$system($$QMAKE_QMAKE -query QT_INSTALL_LIBS) LIB_DIRS = $${PREFIX}/lib $${PREFIX}/lib64 $$system(qmake -query QT_INSTALL_LIBS)
BOOST_THREAD = boost_thread boost_thread-mt BOOST_THREAD = boost_thread boost_thread-mt
BOOST_PROGRAM_OPTIONS = boost_program_options boost_program_options-mt BOOST_PROGRAM_OPTIONS = boost_program_options boost_program_options-mt
BOOST_SYS = boost_system boost_system-mt BOOST_SYS = boost_system boost_system-mt
# #
# searching in $PREFIX/lib, $PREFIX/lib64 and $$system($$QMAKE_QMAKE -query QT_INSTALL_LIBS) # searching in $PREFIX/lib, $PREFIX/lib64 and $$system(qmake -query QT_INSTALL_LIBS)
# to override the default '/usr' pass PREFIX # to override the default '/usr' pass PREFIX
# variable to qmake. # variable to qmake.
# #
+2 -2
View File
@@ -9,8 +9,8 @@
# of binary-size if you leave Qt out. # of binary-size if you leave Qt out.
# (see http://trolltech.com/developer/downloads/qt/mac) # (see http://trolltech.com/developer/downloads/qt/mac)
QT_FW_PATH="/Users/$USER/Qt/5.9/clang_64/lib" QT_FW_PATH="/Developer/Qt5/5/clang_64/lib"
QT_PLUGIN_PATH="/Users/$USER/Qt/5.9/clang_64/plugins" QT_PLUGIN_PATH="/Developer/Qt5/5/clang_64/plugins"
SDL_FW_PATH="/Library/Frameworks" SDL_FW_PATH="/Library/Frameworks"
APPLICATION="./pokerth.app" APPLICATION="./pokerth.app"
BINARY="$APPLICATION/Contents/MacOs/pokerth" BINARY="$APPLICATION/Contents/MacOs/pokerth"
+18
View File
@@ -0,0 +1,18 @@
<?xml version="1.0" encoding="UTF-8"?>
<!-- Copyright 2014 PokerTH GbR <webmaster@pokerth.net> -->
<application>
<id type="desktop">pokerth.desktop</id>
<metadata_license>CC-BY-3.0</metadata_license>
<project_license>AGPL-3.0</project_license>
<name>PokerTH</name>
<summary>Poker game with single- and multiplayer support</summary>
<description>
<p>PokerTH is a poker game for the popular Texas Hold'em Poker variant. You can play singleplayer games with up to 9 computer-opponents or meet other PokerTH players around the world via internet games. Also multiplayer games in your LAN are possible with the network game mode. If you like to change the look and feel of the PokerTH gametable or the card deck just visit the styles gallery and choose your favourite style. To compare your poker skills with the other PokerTH players you can check your game results and rankings on our website.</p>
</description>
<screenshots>
<screenshot type="default" width="624" height="351">http://www.pokerth.net/pokerth_appdata_table1.png</screenshot>
<screenshot width="624" height="351">http://www.pokerth.net/pokerth_appdata_table2.png</screenshot>
</screenshots>
<url type="homepage">http://www.pokerth.net</url>
<updatecontact>webmaster@pokerth.net</updatecontact>
</application>
Regular → Executable
+3 -10
View File
@@ -1,17 +1,10 @@
# QMake pro-file for PokerTH # QMake pro-file for PokerTH
TEMPLATE = subdirs TEMPLATE = subdirs
SUBDIRS = pokerth_protocol.pro pokerth_db.pro pokerth_lib.pro SUBDIRS = pokerth_protocol.pro pokerth_db.pro pokerth_lib.pro pokerth_game.pro
official_server { !mac:!gui_800x480:!client {
SUBDIRS += pokerth_dbofficial.pro SUBDIRS += pokerth_server.pro chatcleaner.pro
} }
client: {
SUBDIRS += pokerth_game.pro
}
!mac:!gui_800x480:!client:!qml-client {
SUBDIRS += pokerth_server.pro chatcleaner.pro
}
CONFIG += ordered CONFIG += ordered
OTHER_FILES += \ OTHER_FILES += \
+1 -2
View File
@@ -1,4 +1,3 @@
syntax = "proto2";
/***************************************************************************** /*****************************************************************************
* PokerTH - The open source texas holdem engine * * PokerTH - The open source texas holdem engine *
* Copyright (C) 2006-2013 Felix Hammer, Florian Thauer, Lothar May * * Copyright (C) 2006-2013 Felix Hammer, Florian Thauer, Lothar May *
@@ -702,7 +701,7 @@ message ReportGameAckMessage {
message ErrorMessage { message ErrorMessage {
enum ErrorReason { enum ErrorReason {
custReserved = 0; reserved = 0;
initVersionNotSupported = 1; initVersionNotSupported = 1;
initServerFull = 2; initServerFull = 2;
initAuthFailure = 3; initAuthFailure = 3;
-26
View File
@@ -1,26 +0,0 @@
# QMake pro-file for PokerTH
!c++11 {
system( $$QMAKE_CXX -dumpversion | grep -e "^6.[0-9]" > /dev/null ) {
greaterThan(QT_MAJOR_VERSION, 5) | equals(QT_MAJOR_VERSION, 5) {
CONFIG += c++11
}
else {
equals(QT_MAJOR_VERSION, 4) : greaterThan(QT_MINOR_VERSION, 7) {
CONFIG += "c++11"
QMAKE_CXXFLAGS += "-std=gnu++11"
}
else {
error (QT must be greater and 4.8+)
}
}
}
}
c++11 {
!system( $$QMAKE_CXX -dumpversion | grep -e "^6.[0-9]" > /dev/null ) {
equals(QT_MAJOR_VERSION, 4) : greaterThan(QT_MINOR_VERSION, 7) {
QMAKE_CXXFLAGS += "-std=gnu++11"
}
}
}
+1 -4
View File
@@ -17,9 +17,6 @@ DEFINES += ENABLE_IPV6 TIXML_USE_STL
QT -= core gui QT -= core gui
#PRECOMPILED_HEADER = src/pch_lib.h #PRECOMPILED_HEADER = src/pch_lib.h
# Check for c++11
include(pokerth_common.pro)
INCLUDEPATH += . \ INCLUDEPATH += . \
src src
@@ -60,7 +57,7 @@ mac{
CONFIG += x86_64 CONFIG += x86_64
CONFIG -= x86 CONFIG -= x86
CONFIG -= ppc CONFIG -= ppc
QMAKE_MACOSX_DEPLOYMENT_TARGET = 10.12 QMAKE_MACOSX_DEPLOYMENT_TARGET = 10.6
QMAKE_CXXFLAGS -= -std=gnu++0x QMAKE_CXXFLAGS -= -std=gnu++0x
# for universal-compilation on PPC-Mac uncomment the following line # for universal-compilation on PPC-Mac uncomment the following line
-97
View File
@@ -1,97 +0,0 @@
# QMake pro-file for PokerTH official server DB backend
TEMPLATE = lib
CODECFORSRC = UTF-8
CONFIG += staticlib \
thread \
exceptions \
rtti \
stl \
warn_on
UI_DIR = uics
TARGET = lib/pokerth_dbofficial
MOC_DIR = mocs
OBJECTS_DIR = obj
QT -= core \
gui
# Check for c++11
include(pokerth_common.pro)
# PRECOMPILED_HEADER = dbofficial/pch_lib.h
INCLUDEPATH += . \
./src
DEPENDPATH += . \
./src
# Input
HEADERS += src/dbofficial/asyncdbauth.h \
src/dbofficial/asyncdbcreategame.h \
src/dbofficial/asyncdbgameplace.h \
src/dbofficial/asyncdbupdatescore.h \
src/dbofficial/asyncdbquery.h \
src/dbofficial/serverdbthread.h \
src/dbofficial/serverdbfactoryinternal.h \
src/dbofficial/compositeasyncdbquery.h \
src/dbofficial/singleasyncdbquery.h \
src/dbofficial/querycontext.h \
src/dbofficial/asyncdbendgame.h \
src/dbofficial/db_table_defs.h \
src/dbofficial/asyncdblogin.h \
src/dbofficial/asyncdbreportavatar.h \
src/dbofficial/asyncdbreportgame.h \
src/dbofficial/asyncdbavatarblacklist.h \
src/dbofficial/asyncdbadminplayers.h \
src/dbofficial/asyncdbblockplayer.h \
src/dbofficial/asyncdbplayerlastgames.h \
src/dbofficial/dbidmanager.h
SOURCES += src/dbofficial/asyncdbauth.cpp \
src/dbofficial/asyncdbcreategame.cpp \
src/dbofficial/asyncdbgameplace.cpp \
src/dbofficial/asyncdbupdatescore.cpp \
src/dbofficial/asyncdbquery.cpp \
src/dbofficial/serverdbthread.cpp \
src/dbofficial/serverdbfactoryinternal.cpp \
src/dbofficial/singleasyncdbquery.cpp \
src/dbofficial/compositeasyncdbquery.cpp \
src/dbofficial/querycontext.cpp \
src/dbofficial/asyncdbendgame.cpp \
src/dbofficial/asyncdblogin.cpp \
src/dbofficial/asyncdbreportavatar.cpp \
src/dbofficial/asyncdbreportgame.cpp \
src/dbofficial/asyncdbavatarblacklist.cpp \
src/dbofficial/asyncdbadminplayers.cpp \
src/dbofficial/asyncdbblockplayer.cpp \
src/dbofficial/asyncdbplayerlastgames.cpp \
src/dbofficial/dbidmanager.cpp
win32 {
DEFINES += _WIN32_WINNT=0x0501
INCLUDEPATH += ../../../boost/ \
../../../GnuTLS/include \
../../../curl/include \
../../../mysql/include \
../../../mysql++/lib \
../../../zlib
}
!win32 {
# #### My release static build options
# QMAKE_CXXFLAGS += -ffunction-sections -fdata-sections
INCLUDEPATH += /usr/include \
/usr/include/mysql \
/usr/include/mysql++
INCLUDEPATH += /opt/boost/include
}
mac {
# make it universal
CONFIG += x86
CONFIG -= ppc
QMAKE_MACOSX_DEPLOYMENT_TARGET = 10.4
# for universal-compilation on PPC-Mac uncomment the following line
# on Intel-Mac you have to comment this line out or build will fail.
# QMAKE_MAC_SDK=/Developer/SDKs/MacOSX10.4u.sdk/
INCLUDEPATH += /Developer/SDKs/MacOSX10.5.sdk/usr/include/
INCLUDEPATH += /Library/Frameworks/SDL.framework/Headers
INCLUDEPATH += /Library/Frameworks/SDL_mixer.framework/Headers
INCLUDEPATH += /opt/local/include/mysql++ \
/opt/local/include/mysql5/mysql
}
+31 -51
View File
@@ -26,9 +26,6 @@ DEFINES += ENABLE_IPV6 TIXML_USE_STL BOOST_FILESYSTEM_DEPRECATED
DEFINES += PREFIX=\"$${PREFIX}\" DEFINES += PREFIX=\"$${PREFIX}\"
TARGET = pokerth TARGET = pokerth
# Check for c++11
include(pokerth_common.pro)
# PRECOMPILED_HEADER = src/pch_game.h # PRECOMPILED_HEADER = src/pch_game.h
android{ android{
@@ -411,8 +408,7 @@ unix:!mac {
LIBPATH += $${PREFIX}/lib /opt/gsasl/lib LIBPATH += $${PREFIX}/lib /opt/gsasl/lib
LIB_DIRS = $${PREFIX}/lib \ LIB_DIRS = $${PREFIX}/lib \
$${PREFIX}/lib64 \ $${PREFIX}/lib64 \
$${PREFIX}/lib/x86_64-linux-gnu \ $$system(qmake -query QT_INSTALL_LIBS)
$$system($$QMAKE_QMAKE -query QT_INSTALL_LIBS)
} }
android{ android{
LIBPATH += $${PREFIX}/lib/armv7 LIBPATH += $${PREFIX}/lib/armv7
@@ -426,14 +422,14 @@ unix:!mac {
boost_iostreams-mt boost_iostreams-mt
BOOST_REGEX = boost_regex \ BOOST_REGEX = boost_regex \
boost_regex-mt boost_regex-mt
BOOST_CHRONO = boost_chrono \
boost_chrono-mt
BOOST_SYS = boost_system \ BOOST_SYS = boost_system \
boost_system-mt boost_system-mt
BOOST_RANDOM = boost_random \ BOOST_RANDOM = boost_random \
boost_random-mt boost_random-mt
BOOST_CHRONO = boost_chrono \
boost_chrono-mt
# searching in $PREFIX/lib, $PREFIX/lib64 and $$system($$QMAKE_QMAKE -query QT_INSTALL_LIBS) # searching in $PREFIX/lib, $PREFIX/lib64 and $$system(qmake -query QT_INSTALL_LIBS)
# to override the default '/usr' pass PREFIX # to override the default '/usr' pass PREFIX
# variable to qmake. # variable to qmake.
for(dir, LIB_DIRS):exists($$dir) { for(dir, LIB_DIRS):exists($$dir) {
@@ -469,6 +465,14 @@ unix:!mac {
message("Found $$lib") message("Found $$lib")
BOOST_REGEX = -l$$lib BOOST_REGEX = -l$$lib
} }
for(lib, BOOST_CHRONO):exists($${dir}/lib$${lib}.so*) {
message("Found $$lib")
BOOST_CHRONO = -l$$lib
}
for(lib, BOOST_CHRONO):exists($${dir}/lib$${lib}.a) {
message("Found $$lib")
BOOST_CHRONO = -l$$lib
}
!android{ !android{
for(lib, BOOST_RANDOM):exists($${dir}/lib$${lib}.so*) { for(lib, BOOST_RANDOM):exists($${dir}/lib$${lib}.so*) {
message("Found $$lib") message("Found $$lib")
@@ -487,37 +491,16 @@ unix:!mac {
message("Found $$lib") message("Found $$lib")
BOOST_SYS = -l$$lib BOOST_SYS = -l$$lib
} }
!c++11 {
for(lib, BOOST_CHRONO):exists($${dir}/lib$${lib}.so*) {
message("Found $$lib")
BOOST_CHRONO = -l$$lib
}
for(lib, BOOST_CHRONO):exists($${dir}/lib$${lib}.a) {
message("Found $$lib")
BOOST_CHRONO = -l$$lib
}
}
} }
!android{ !android{
c++11 { BOOST_LIBS = $$BOOST_THREAD \
BOOST_LIBS = $$BOOST_THREAD \
$$BOOST_FS \ $$BOOST_FS \
$$BOOST_IOSTREAMS \ $$BOOST_IOSTREAMS \
$$BOOST_REGEX \ $$BOOST_REGEX \
$$BOOST_CHRONO \
$$BOOST_RANDOM \ $$BOOST_RANDOM \
$$BOOST_SYS $$BOOST_SYS
!count(BOOST_LIBS, 6):error("Unable to find boost libraries in PREFIX=$${PREFIX}") !count(BOOST_LIBS, 7):error("Unable to find boost libraries in PREFIX=$${PREFIX}")
}
!c++11 {
BOOST_LIBS = $$BOOST_THREAD \
$$BOOST_FS \
$$BOOST_IOSTREAMS \
$$BOOST_REGEX \
$$BOOST_RANDOM \
$$$$BOOST_SYS \
$$BOOST_CHRONO
!count(BOOST_LIBS, 7):error("Unable to find boost libraries in PREFIX=$${PREFIX}")
}
if($$system(sdl-config --version)):error("sdl-config not found in PATH - libSDL_mixer, libSDL are required!") if($$system(sdl-config --version)):error("sdl-config not found in PATH - libSDL_mixer, libSDL are required!")
UNAME = $$system(uname -s) UNAME = $$system(uname -s)
BSD = $$find(UNAME, "BSD") BSD = $$find(UNAME, "BSD")
@@ -537,6 +520,7 @@ unix:!mac {
$$BOOST_FS \ $$BOOST_FS \
$$BOOST_IOSTREAMS \ $$BOOST_IOSTREAMS \
$$BOOST_REGEX \ $$BOOST_REGEX \
$$BOOST_CHRONO \
$$BOOST_SYS $$BOOST_SYS
!count(BOOST_LIBS, 5):error("Unable to find boost libraries in PREFIX=$${PREFIX}/armv5") !count(BOOST_LIBS, 5):error("Unable to find boost libraries in PREFIX=$${PREFIX}/armv5")
LIBS += -ltinyxml LIBS += -ltinyxml
@@ -576,7 +560,7 @@ mac {
CONFIG += x86_64 CONFIG += x86_64
CONFIG -= x86 CONFIG -= x86
CONFIG -= ppc CONFIG -= ppc
QMAKE_MACOSX_DEPLOYMENT_TARGET = 10.12 QMAKE_MACOSX_DEPLOYMENT_TARGET = 10.6
QMAKE_CXXFLAGS -= -std=gnu++0x QMAKE_CXXFLAGS -= -std=gnu++0x
# workaround for problems with boost_filesystem exceptions # workaround for problems with boost_filesystem exceptions
@@ -588,20 +572,22 @@ mac {
LIBPATH += lib LIBPATH += lib
# QT dynamic linked framework (see also mac_post_make.sh) # QT dynamic linked framework (see also mac_post_make.sh)
LIBS += -F /Library/Frameworks
LIBS += -framework \ LIBS += -framework \
QtCore QtCore
LIBS += -framework \ LIBS += -framework \
QtGui QtGui
LIBS += -framework \
SDL # SDL and SDL_mixer come as frameworks
LIBS += -framework \ LIBS += -framework \
SDL_mixer SDL
LIBS += -framework \
SDL_mixer
# make sure you have an x86_64 version of boost # make sure you have an x86_64 version of boost
LIBS += /usr/local/lib/libboost_thread-mt.a LIBS += /usr/local/lib/libboost_thread.a
LIBS += /usr/local/lib/libboost_filesystem.a LIBS += /usr/local/lib/libboost_filesystem.a
LIBS += /usr/local/lib/libboost_regex.a LIBS += /usr/local/lib/libboost_regex.a
LIBS += /usr/local/lib/libboost_chrono.a
LIBS += /usr/local/lib/libboost_random.a LIBS += /usr/local/lib/libboost_random.a
LIBS += /usr/local/lib/libboost_system.a LIBS += /usr/local/lib/libboost_system.a
LIBS += /usr/local/lib/libboost_iostreams.a LIBS += /usr/local/lib/libboost_iostreams.a
@@ -615,26 +601,20 @@ mac {
-lprotobuf \ -lprotobuf \
-lz \ -lz \
-framework \ -framework \
Cocoa Carbon
# set the application icon # set the application icon
RC_FILE = pokerth.icns RC_FILE = pokerth.icns
LIBPATH += /Developer/SDKs/MacOSX10.6.sdk/usr/lib
LIBPATH += /usr/local/lib INCLUDEPATH += /Developer/SDKs/MacOSX10.6.sdk/usr/include/
LIBPATH += /usr/local/opt/openssl/lib INCLUDEPATH += /Library/Frameworks/SDL.framework/Headers
LIBPATH += /usr/local/opt/tinyxml/lib INCLUDEPATH += /Library/Frameworks/SDL_mixer.framework/Headers
LIBPATH += /usr/local/opt/protobuf/lib
INCLUDEPATH += /usr/local/include INCLUDEPATH += /usr/local/include
INCLUDEPATH += /usr/local/opt/openssl/include
INCLUDEPATH += /usr/local/opt/tinyxml/include
INCLUDEPATH += /usr/local/opt/protobuf/include
INCLUDEPATH += /Library/Frameworks/SDL.framework/Headers
INCLUDEPATH += /Library/Frameworks/SDL_mixer.framework/Headers
} }
OTHER_FILES += docs/infomessage-id-desc.txt OTHER_FILES += docs/infomessage-id-desc.txt
official_server { official_server {
LIBPATH += pkth_stat/daemon_lib/lib LIBPATH += pkth_stat/daemon_lib/lib
LIBS += -lpokerth_dbofficial \ LIBS += -lpokerth_closed \
-lmysqlpp -lmysqlpp
DEFINES += POKERTH_OFFICIAL_SERVER DEFINES += POKERTH_OFFICIAL_SERVER
} }
+8 -50
View File
@@ -17,9 +17,6 @@ DEFINES += ENABLE_IPV6 TIXML_USE_STL BOOST_FILESYSTEM_DEPRECATED
QT -= core gui QT -= core gui
#PRECOMPILED_HEADER = src/pch_lib.h #PRECOMPILED_HEADER = src/pch_lib.h
# Check for c++11
include(pokerth_common.pro)
INCLUDEPATH += . \ INCLUDEPATH += . \
src \ src \
src/engine \ src/engine \
@@ -195,6 +192,7 @@ SOURCES += \
src/net/common/servergame.cpp \ src/net/common/servergame.cpp \
src/net/common/servergamestate.cpp \ src/net/common/servergamestate.cpp \
src/net/common/serverlobbythread.cpp \ src/net/common/serverlobbythread.cpp \
src/net/common/serverdelaytime.cpp \
src/net/common/serverbanmanager.cpp \ src/net/common/serverbanmanager.cpp \
src/net/common/servercallback.cpp \ src/net/common/servercallback.cpp \
src/net/common/serveradminbot.cpp \ src/net/common/serveradminbot.cpp \
@@ -229,49 +227,9 @@ android|android_test{
SOURCES += src/engine/local_engine/tools_android.cpp SOURCES += src/engine/local_engine/tools_android.cpp
} }
official_server:!win32:!gui_800x480:!client:{ official_server{
# INCLUDEPATH += pkth_stat/daemon_lib/src # note: relict from former official/closed db build INCLUDEPATH += pkth_stat/daemon_lib/src
DEFINES += POKERTH_OFFICIAL_SERVER DEFINES += POKERTH_OFFICIAL_SERVER
HEADERS += src/dbofficial/asyncdbauth.h \
src/dbofficial/asyncdbcreategame.h \
src/dbofficial/asyncdbgameplace.h \
src/dbofficial/asyncdbupdatescore.h \
src/dbofficial/asyncdbquery.h \
src/dbofficial/serverdbthread.h \
src/dbofficial/serverdbfactoryinternal.h \
src/dbofficial/compositeasyncdbquery.h \
src/dbofficial/singleasyncdbquery.h \
src/dbofficial/querycontext.h \
src/dbofficial/asyncdbendgame.h \
src/dbofficial/db_table_defs.h \
src/dbofficial/asyncdblogin.h \
src/dbofficial/asyncdbreportavatar.h \
src/dbofficial/asyncdbreportgame.h \
src/dbofficial/asyncdbavatarblacklist.h \
src/dbofficial/asyncdbadminplayers.h \
src/dbofficial/asyncdbblockplayer.h \
src/dbofficial/dbidmanager.h
SOURCES += src/dbofficial/asyncdbauth.cpp \
src/dbofficial/asyncdbcreategame.cpp \
src/dbofficial/asyncdbgameplace.cpp \
src/dbofficial/asyncdbupdatescore.cpp \
src/dbofficial/asyncdbquery.cpp \
src/dbofficial/serverdbthread.cpp \
src/dbofficial/serverdbfactoryinternal.cpp \
src/dbofficial/singleasyncdbquery.cpp \
src/dbofficial/compositeasyncdbquery.cpp \
src/dbofficial/querycontext.cpp \
src/dbofficial/asyncdbendgame.cpp \
src/dbofficial/asyncdblogin.cpp \
src/dbofficial/asyncdbreportavatar.cpp \
src/dbofficial/asyncdbreportgame.cpp \
src/dbofficial/asyncdbavatarblacklist.cpp \
src/dbofficial/asyncdbadminplayers.cpp \
src/dbofficial/asyncdbblockplayer.cpp \
src/dbofficial/dbidmanager.cpp
INCLUDEPATH += /usr/include \
/usr/include/mysql \
/usr/include/mysql++
} }
win32{ win32{
@@ -294,17 +252,17 @@ mac{
CONFIG += x86_64 CONFIG += x86_64
CONFIG -= x86 CONFIG -= x86
CONFIG -= ppc CONFIG -= ppc
QMAKE_MACOSX_DEPLOYMENT_TARGET = 10.12 QMAKE_MACOSX_DEPLOYMENT_TARGET = 10.6
QMAKE_CXXFLAGS -= -std=gnu++0x QMAKE_CXXFLAGS -= -std=gnu++0x
# for universal-compilation on PPC-Mac uncomment the following line # for universal-compilation on PPC-Mac uncomment the following line
# on Intel-Mac you have to comment this line out or build will fail. # on Intel-Mac you have to comment this line out or build will fail.
# QMAKE_MAC_SDK=/Developer/SDKs/MacOSX10.4u.sdk/ # QMAKE_MAC_SDK=/Developer/SDKs/MacOSX10.4u.sdk/
LIBPATH += /usr/local/opt/openssl/lib
INCLUDEPATH += /usr/local/opt/openssl/include INCLUDEPATH += /Developer/SDKs/MacOSX10.6.sdk/usr/include/
INCLUDEPATH += /Library/Frameworks/SDL.framework/Headers
INCLUDEPATH += /Library/Frameworks/SDL_mixer.framework/Headers
INCLUDEPATH += /usr/local/include INCLUDEPATH += /usr/local/include
INCLUDEPATH += /Library/Frameworks/SDL.framework/Headers
INCLUDEPATH += /Library/Frameworks/SDL_mixer.framework/Headers
} }
android{ android{
+1 -14
View File
@@ -17,9 +17,6 @@ QT -= core \
gui gui
# PRECOMPILED_HEADER = src/pch_lib.h # PRECOMPILED_HEADER = src/pch_lib.h
# Check for c++11
include(pokerth_common.pro)
INCLUDEPATH += . \ INCLUDEPATH += . \
src src
DEPENDPATH += . \ DEPENDPATH += . \
@@ -34,29 +31,19 @@ SOURCES += src/third_party/protobuf/pokerth.pb.cc \
win32 { win32 {
DEFINES += CURL_STATICLIB DEFINES += CURL_STATICLIB
DEFINES += _WIN32_WINNT=0x0501 DEFINES += _WIN32_WINNT=0x0501
system(protoc pokerth.proto --cpp_out=src/third_party/protobuf)
system(protoc chatcleaner.proto --cpp_out=src/third_party/protobuf)
system(protoc pokerth.proto --java_out=tests/src)
} }
unix : !mac { unix : !mac {
INCLUDEPATH += $${PREFIX}/include INCLUDEPATH += $${PREFIX}/include
system(protoc pokerth.proto --cpp_out=src/third_party/protobuf) system(protoc pokerth.proto --cpp_out=src/third_party/protobuf)
system(protoc chatcleaner.proto --cpp_out=src/third_party/protobuf) system(protoc chatcleaner.proto --cpp_out=src/third_party/protobuf)
system(protoc pokerth.proto --java_out=tests/src) system(protoc pokerth.proto --java_out=tests/src)
android {
system(wine protoc.exe pokerth.proto --cpp_out=src/third_party/protobuf)
system(wine protoc.exe chatcleaner.proto --cpp_out=src/third_party/protobuf)
system(wine protoc.exe pokerth.proto --java_out=tests/src)
}
} }
mac { mac {
# make it x86_64 only # make it x86_64 only
CONFIG += x86_64 CONFIG += x86_64
CONFIG -= x86 CONFIG -= x86
CONFIG -= ppc CONFIG -= ppc
QMAKE_MACOSX_DEPLOYMENT_TARGET = 10.12 QMAKE_MACOSX_DEPLOYMENT_TARGET = 10.6
# for universal-compilation on PPC-Mac uncomment the following line # for universal-compilation on PPC-Mac uncomment the following line
# on Intel-Mac you have to comment this line out or build will fail. # on Intel-Mac you have to comment this line out or build will fail.
+19 -32
View File
@@ -19,9 +19,6 @@ DEFINES += PREFIX=\"$${PREFIX}\"
QT -= core gui QT -= core gui
#PRECOMPILED_HEADER = src/pch_lib.h #PRECOMPILED_HEADER = src/pch_lib.h
# Check for c++11
include(pokerth_common.pro)
INCLUDEPATH += . \ INCLUDEPATH += . \
src \ src \
src/engine \ src/engine \
@@ -73,6 +70,7 @@ HEADERS += \
src/net/senderhelper.h \ src/net/senderhelper.h \
src/net/serveraccepthelper.h \ src/net/serveraccepthelper.h \
src/net/serverlobbythread.h \ src/net/serverlobbythread.h \
src/net/serverdelaytime.h \
src/net/socket_helper.h \ src/net/socket_helper.h \
src/net/socket_msg.h \ src/net/socket_msg.h \
src/net/socket_startup.h \ src/net/socket_startup.h \
@@ -178,20 +176,18 @@ unix : !mac {
LIBPATH += lib $${PREFIX}/lib /opt/gsasl/lib LIBPATH += lib $${PREFIX}/lib /opt/gsasl/lib
INCLUDEPATH += $${PREFIX}/include INCLUDEPATH += $${PREFIX}/include
# see issue https://github.com/pokerth/pokerth/issues/282 LIB_DIRS = $${PREFIX}/lib $${PREFIX}/lib64 $$system(qmake -query QT_INSTALL_LIBS)
INCLUDEPATH += $${PREFIX}/include/libircclient
LIB_DIRS = $${PREFIX}/lib $${PREFIX}/lib64 $$system($$QMAKE_QMAKE -query QT_INSTALL_LIBS)
BOOST_FS = boost_filesystem boost_filesystem-mt BOOST_FS = boost_filesystem boost_filesystem-mt
BOOST_THREAD = boost_thread boost_thread-mt BOOST_THREAD = boost_thread boost_thread-mt
BOOST_PROGRAM_OPTIONS = boost_program_options boost_program_options-mt BOOST_PROGRAM_OPTIONS = boost_program_options boost_program_options-mt
BOOST_IOSTREAMS = boost_iostreams boost_iostreams-mt BOOST_IOSTREAMS = boost_iostreams boost_iostreams-mt
BOOST_CHRONO = boost_chrono boost_chrono-mt
BOOST_SYS = boost_system boost_system-mt BOOST_SYS = boost_system boost_system-mt
BOOST_REGEX = boost_regex boost_regex-mt BOOST_REGEX = boost_regex boost_regex-mt
BOOST_RANDOM = boost_random boost_random-mt BOOST_RANDOM = boost_random boost_random-mt
BOOST_CHRONO = boost_chrono boost_chrono-mt
# #
# searching in $PREFIX/lib, $PREFIX/lib64 and $$system($$QMAKE_QMAKE -query QT_INSTALL_LIBS) # searching in $PREFIX/lib, $PREFIX/lib64 and $$system(qmake -query QT_INSTALL_LIBS)
# to override the default '/usr' pass PREFIX # to override the default '/usr' pass PREFIX
# variable to qmake. # variable to qmake.
# #
@@ -237,6 +233,14 @@ unix : !mac {
message("Found $$lib") message("Found $$lib")
BOOST_REGEX = -l$$lib BOOST_REGEX = -l$$lib
} }
for(lib, BOOST_CHRONO):exists($${dir}/lib$${lib}.so*) {
message("Found $$lib")
BOOST_CHRONO = -l$$lib
}
for(lib, BOOST_CHRONO):exists($${dir}/lib$${lib}.a) {
message("Found $$lib")
BOOST_CHRONO = -l$$lib
}
for(lib, BOOST_RANDOM):exists($${dir}/lib$${lib}.so*) { for(lib, BOOST_RANDOM):exists($${dir}/lib$${lib}.so*) {
message("Found $$lib") message("Found $$lib")
BOOST_RANDOM = -l$$lib BOOST_RANDOM = -l$$lib
@@ -253,29 +257,11 @@ unix : !mac {
message("Found $$lib") message("Found $$lib")
BOOST_SYS = -l$$lib BOOST_SYS = -l$$lib
} }
!c++11 {
for(lib, BOOST_CHRONO):exists($${dir}/lib$${lib}.so*) {
message("Found $$lib")
BOOST_CHRONO = -l$$lib
}
for(lib, BOOST_CHRONO):exists($${dir}/lib$${lib}.a) {
message("Found $$lib")
BOOST_CHRONO = -l$$lib
}
}
} }
} }
c++11 { BOOST_LIBS = $$BOOST_THREAD $$BOOST_FS $$BOOST_PROGRAM_OPTIONS $$BOOST_IOSTREAMS $$BOOST_REGEX $$BOOST_CHRONO $$BOOST_RANDOM $$BOOST_SYS
BOOST_LIBS = $$BOOST_THREAD $$BOOST_FS $$BOOST_PROGRAM_OPTIONS $$BOOST_IOSTREAMS $$BOOST_REGEX $$BOOST_RANDOM $$BOOST_SYS !count(BOOST_LIBS, 8){
!count(BOOST_LIBS, 7){ error("Unable to find boost libraries in PREFIX=$${PREFIX}")
error("Unable to find boost libraries in PREFIX=$${PREFIX}")
}
}
!c++11 {
BOOST_LIBS = $$BOOST_THREAD $$BOOST_FS $$BOOST_PROGRAM_OPTIONS $$BOOST_IOSTREAMS $$BOOST_REGEX $$BOOST_RANDOM $$BOOST_SYS $$BOOST_CHRONO
!count(BOOST_LIBS, 8){
error("Unable to find boost libraries in PREFIX=$${PREFIX}")
}
} }
UNAME = $$system(uname -s) UNAME = $$system(uname -s)
@@ -310,7 +296,7 @@ mac {
CONFIG += x86_64 CONFIG += x86_64
CONFIG -= x86 CONFIG -= x86
CONFIG -= ppc CONFIG -= ppc
QMAKE_MACOSX_DEPLOYMENT_TARGET = 10.12 QMAKE_MACOSX_DEPLOYMENT_TARGET = 10.6
QMAKE_CXXFLAGS -= -std=gnu++0x QMAKE_CXXFLAGS -= -std=gnu++0x
# workaround for problems with boost_filesystem exceptions # workaround for problems with boost_filesystem exceptions
@@ -322,9 +308,10 @@ mac {
LIBPATH += lib LIBPATH += lib
# make sure you have an x86_64 version of boost # make sure you have an x86_64 version of boost
LIBS += /usr/local/lib/libboost_thread-mt.a LIBS += /usr/local/lib/libboost_thread.a
LIBS += /usr/local/lib/libboost_filesystem.a LIBS += /usr/local/lib/libboost_filesystem.a
LIBS += /usr/local/lib/libboost_regex.a LIBS += /usr/local/lib/libboost_regex.a
LIBS += /usr/local/lib/libboost_chrono.a
LIBS += /usr/local/lib/libboost_random.a LIBS += /usr/local/lib/libboost_random.a
LIBS += /usr/local/lib/libboost_system.a LIBS += /usr/local/lib/libboost_system.a
LIBS += /usr/local/lib/libboost_iostreams.a LIBS += /usr/local/lib/libboost_iostreams.a
@@ -344,7 +331,7 @@ mac {
official_server { official_server {
LIBPATH += pkth_stat/daemon_lib/lib LIBPATH += pkth_stat/daemon_lib/lib
LIBS += -lpokerth_dbofficial -lmysqlpp LIBS += -lpokerth_closed -lmysqlpp
DEFINES += POKERTH_OFFICIAL_SERVER DEFINES += POKERTH_OFFICIAL_SERVER
} }
+2 -4
View File
@@ -39,13 +39,11 @@ class BadWordCheck: public QObject
public: public:
BadWordCheck(); BadWordCheck();
void setBadWords(QStringList bw) void setBadWords(QStringList bw) {
{
badWords = bw; badWords = bw;
} }
void setBadWordsException(QStringList bwe) void setBadWordsException(QStringList bwe) {
{
badWordsException = bwe; badWordsException = bwe;
} }
+1 -2
View File
@@ -39,8 +39,7 @@ class CapsFloodCheck: public QObject
public: public:
CapsFloodCheck(); CapsFloodCheck();
void setCapsNumberToTrigger(int n) void setCapsNumberToTrigger(int n) {
{
capsNumberToTrigger = n; capsNumberToTrigger = n;
} }
bool run(QString); bool run(QString);
+1 -2
View File
@@ -46,8 +46,7 @@ public:
~CleanerConfig(); ~CleanerConfig();
std::string getConfigFileName() const std::string getConfigFileName() const {
{
return configFileName; return configFileName;
} }
+1 -2
View File
@@ -39,8 +39,7 @@ class LetterRepeatingCheck: public QObject
public: public:
LetterRepeatingCheck(); LetterRepeatingCheck();
void setLetterNumberToTrigger(int n) void setLetterNumberToTrigger(int n) {
{
letterNumberToTrigger = n; letterNumberToTrigger = n;
} }
bool run(QString); bool run(QString);
+1 -2
View File
@@ -45,8 +45,7 @@ public:
TextFloodCheck(); TextFloodCheck();
~TextFloodCheck(); ~TextFloodCheck();
void setTextFloodLevelToTrigger(int level) void setTextFloodLevelToTrigger(int level) {
{
textFloodLevelToTrigger = level; textFloodLevelToTrigger = level;
} }
+2 -4
View File
@@ -39,12 +39,10 @@ class UrlCheck: public QObject
public: public:
UrlCheck(); UrlCheck();
void setUrlStrings(QStringList us) void setUrlStrings(QStringList us) {
{
urlStrings = us; urlStrings = us;
} }
void setUrlExceptionStrings(QStringList ues) void setUrlExceptionStrings(QStringList ues) {
{
urlExceptionStrings = ues; urlExceptionStrings = ues;
} }
bool run(QString); bool run(QString);
-3
View File
@@ -311,9 +311,6 @@ ConfigFile::ConfigFile(char *argv0, bool readonly) : noWriteAccess(readonly)
configList.push_back(ConfigInfo("DBServerDatabaseName", CONFIG_TYPE_STRING, "pokerth")); configList.push_back(ConfigInfo("DBServerDatabaseName", CONFIG_TYPE_STRING, "pokerth"));
configList.push_back(ConfigInfo("DBServerEncryptionKey", CONFIG_TYPE_STRING, "")); configList.push_back(ConfigInfo("DBServerEncryptionKey", CONFIG_TYPE_STRING, ""));
configList.push_back(ConfigInfo("GameNameBadWordList", CONFIG_TYPE_STRING_LIST, "Regex")); configList.push_back(ConfigInfo("GameNameBadWordList", CONFIG_TYPE_STRING_LIST, "Regex"));
configList.push_back(ConfigInfo("ServerRestrictGuestLogin", CONFIG_TYPE_INT, "0"));
configList.push_back(ConfigInfo("ServerLimitRankNum", CONFIG_TYPE_INT, "4"));
configList.push_back(ConfigInfo("ServerLimitRankPeriod", CONFIG_TYPE_INT, "60"));
//fill tempList firstTime //fill tempList firstTime
configBufferList = configList; configBufferList = configList;
+2 -2
View File
@@ -61,7 +61,7 @@ using namespace std;
using namespace boost::filesystem; using namespace boost::filesystem;
struct AvatarFileState { struct AvatarFileState {
std::ifstream inputStream; ifstream inputStream;
}; };
AvatarManager::AvatarManager(bool useExternalServer, const std::string &externalServerAddress, AvatarManager::AvatarManager(bool useExternalServer, const std::string &externalServerAddress,
@@ -363,7 +363,7 @@ AvatarManager::StoreAvatarInCache(const MD5Buf &md5buf, AvatarFileType avatarFil
path tmpPath(cacheDir); path tmpPath(cacheDir);
tmpPath /= (md5buf.ToString() + ext); tmpPath /= (md5buf.ToString() + ext);
string fileName(tmpPath.file_string()); string fileName(tmpPath.file_string());
std::ofstream o(fileName.c_str(), ios_base::out | ios_base::binary | ios_base::trunc); ofstream o(fileName.c_str(), ios_base::out | ios_base::binary | ios_base::trunc);
if (!o.fail()) { if (!o.fail()) {
o.write((const char *)data, size); o.write((const char *)data, size);
o.close(); o.close();
+12 -34
View File
@@ -291,33 +291,22 @@ CryptHelper::AES128Encrypt(const unsigned char *keyData, unsigned keySize, const
outCipher.resize(cipherSize); outCipher.resize(cipherSize);
#ifdef HAVE_OPENSSL #ifdef HAVE_OPENSSL
#if OPENSSL_VERSION_NUMBER >= 0x10100000L EVP_CIPHER_CTX encryptCtx;
EVP_CIPHER_CTX *encryptCtx = EVP_CIPHER_CTX_new(); EVP_CIPHER_CTX_init(&encryptCtx);
#else
EVP_CIPHER_CTX _encryptCtx;
EVP_CIPHER_CTX *encryptCtx;
encryptCtx = &_encryptCtx;
#endif // OPENSSL_VERSION_NUMBER >= 0x10100000L
EVP_CIPHER_CTX_init(encryptCtx);
int outCipherSize = cipherSize; int outCipherSize = cipherSize;
int success = EVP_EncryptInit(encryptCtx, EVP_aes_128_cbc(), key, iv); int success = EVP_EncryptInit(&encryptCtx, EVP_aes_128_cbc(), key, iv);
EVP_CIPHER_CTX_set_padding(encryptCtx, 0); EVP_CIPHER_CTX_set_padding(&encryptCtx, 0);
if (success) { if (success) {
success = EVP_EncryptUpdate(encryptCtx, &outCipher[0], &outCipherSize, paddedPlainStr, paddedPlainSize); success = EVP_EncryptUpdate(&encryptCtx, &outCipher[0], &outCipherSize, paddedPlainStr, paddedPlainSize);
if (success && outCipherSize) { if (success && outCipherSize) {
// Since padding is off, this will not modify the cipher. However, parameters need to be set. // Since padding is off, this will not modify the cipher. However, parameters need to be set.
EVP_EncryptFinal(encryptCtx, &outCipher[0], &outCipherSize); EVP_EncryptFinal(&encryptCtx, &outCipher[0], &outCipherSize);
retVal = true; retVal = true;
} }
} else } else
outCipher.clear(); outCipher.clear();
#if OPENSSL_VERSION_NUMBER >= 0x10100000L
EVP_CIPHER_CTX_free(encryptCtx);
#endif // OPENSSL_VERSION_NUMBER >= 0x10100000L
#else #else
gcry_cipher_hd_t hd; gcry_cipher_hd_t hd;
gcry_error_t err = gcry_cipher_open(&hd, GCRY_CIPHER_AES128, GCRY_CIPHER_MODE_CBC, 0); gcry_error_t err = gcry_cipher_open(&hd, GCRY_CIPHER_AES128, GCRY_CIPHER_MODE_CBC, 0);
@@ -349,33 +338,22 @@ CryptHelper::AES128Decrypt(const unsigned char *keyData, unsigned keySize, const
BytesToKey(keyData, keySize, key, iv); BytesToKey(keyData, keySize, key, iv);
outPlain.resize(cipherSize); outPlain.resize(cipherSize);
#ifdef HAVE_OPENSSL #ifdef HAVE_OPENSSL
#if OPENSSL_VERSION_NUMBER >= 0x10100000L EVP_CIPHER_CTX decryptCtx;
EVP_CIPHER_CTX *decryptCtx = EVP_CIPHER_CTX_new(); EVP_CIPHER_CTX_init(&decryptCtx);
#else
EVP_CIPHER_CTX _decryptCtx;
EVP_CIPHER_CTX *decryptCtx;
decryptCtx = &_decryptCtx;
#endif // OPENSSL_VERSION_NUMBER >= 0x10100000L
EVP_CIPHER_CTX_init(decryptCtx);
int outPlainSize = cipherSize; int outPlainSize = cipherSize;
int success = EVP_DecryptInit(decryptCtx, EVP_aes_128_cbc(), key, iv); int success = EVP_DecryptInit(&decryptCtx, EVP_aes_128_cbc(), key, iv);
EVP_CIPHER_CTX_set_padding(decryptCtx, 0); EVP_CIPHER_CTX_set_padding(&decryptCtx, 0);
if (success) { if (success) {
success = EVP_DecryptUpdate(decryptCtx, (unsigned char *)&outPlain[0], &outPlainSize, cipher, cipherSize); success = EVP_DecryptUpdate(&decryptCtx, (unsigned char *)&outPlain[0], &outPlainSize, cipher, cipherSize);
if (success && outPlainSize) { if (success && outPlainSize) {
// Since padding is off, this will not modify the plain text. However, parameters need to be set. // Since padding is off, this will not modify the plain text. However, parameters need to be set.
EVP_DecryptFinal(decryptCtx, (unsigned char *)outPlain.c_str(), &outPlainSize); EVP_DecryptFinal(&decryptCtx, (unsigned char *)outPlain.c_str(), &outPlainSize);
retVal = true; retVal = true;
} }
} else } else
outPlain.clear(); outPlain.clear();
#if OPENSSL_VERSION_NUMBER >= 0x10100000L
EVP_CIPHER_CTX_free(decryptCtx);
#endif // OPENSSL_VERSION_NUMBER >= 0x10100000L
#else #else
gcry_cipher_hd_t hd; gcry_cipher_hd_t hd;
gcry_error_t err = gcry_cipher_open(&hd, GCRY_CIPHER_AES128, GCRY_CIPHER_MODE_CBC, 0); gcry_error_t err = gcry_cipher_open(&hd, GCRY_CIPHER_AES128, GCRY_CIPHER_MODE_CBC, 0);
+3 -3
View File
@@ -67,7 +67,7 @@ void
internal_log_err(const string &msg) internal_log_err(const string &msg)
{ {
if (!g_logFile.empty()) { if (!g_logFile.empty()) {
std::ofstream o(g_logFile.c_str(), ios_base::out | ios_base::app); ofstream o(g_logFile.c_str(), ios_base::out | ios_base::app);
if (!o.fail()) { if (!o.fail()) {
o << second_clock::local_time() << " ERR: " << msg; o << second_clock::local_time() << " ERR: " << msg;
o.flush(); o.flush();
@@ -80,7 +80,7 @@ internal_log_msg(const std::string &msg)
{ {
if (g_logLevel) { if (g_logLevel) {
if (!g_logFile.empty()) { if (!g_logFile.empty()) {
std::ofstream o(g_logFile.c_str(), ios_base::out | ios_base::app); ofstream o(g_logFile.c_str(), ios_base::out | ios_base::app);
if (!o.fail()) if (!o.fail())
o << second_clock::local_time() << " MSG: " << msg; o << second_clock::local_time() << " MSG: " << msg;
} }
@@ -92,7 +92,7 @@ internal_log_level(const std::string &msg, int logLevel)
{ {
if (g_logLevel >= logLevel) { if (g_logLevel >= logLevel) {
if (!g_logFile.empty()) { if (!g_logFile.empty()) {
std::ofstream o(g_logFile.c_str(), ios_base::out | ios_base::app); ofstream o(g_logFile.c_str(), ios_base::out | ios_base::app);
if (!o.fail()) if (!o.fail())
o << second_clock::local_time() << " OUT: " << msg; o << second_clock::local_time() << " OUT: " << msg;
} }
+1 -2
View File
@@ -38,8 +38,7 @@ class ThreadStarter
{ {
public: public:
ThreadStarter(Thread &thread) : m_thread(thread) {} ThreadStarter(Thread &thread) : m_thread(thread) {}
void operator()() void operator()() {
{
m_thread.MainWrapper(); m_thread.MainWrapper();
} }
+2 -4
View File
@@ -43,12 +43,10 @@ public:
PokerTHException(const char *sourcefile, int sourceline, int errorId, int osErrorCode); PokerTHException(const char *sourcefile, int sourceline, int errorId, int osErrorCode);
virtual ~PokerTHException() throw(); virtual ~PokerTHException() throw();
int GetErrorId() const int GetErrorId() const {
{
return m_errorId; return m_errorId;
} }
int GetOsErrorCode() const int GetOsErrorCode() const {
{
return m_osErrorCode; return m_osErrorCode;
} }
-5
View File
@@ -93,11 +93,6 @@ ServerDBGeneric::SetGamePlayerPlace(unsigned /*requestId*/, DB_id /*playerId*/,
{ {
} }
void
ServerDBGeneric::SetPlayerLastGames(unsigned /*requestId*/, DB_id /*playerId*/, std::vector<long> /*last_games*/, std::string /*playerIp*/)
{
}
void void
ServerDBGeneric::EndGame(unsigned /*requestId*/) ServerDBGeneric::EndGame(unsigned /*requestId*/)
{ {
-3
View File
@@ -35,7 +35,6 @@
#include <string> #include <string>
#include <ctime> #include <ctime>
#include <vector>
typedef unsigned DB_id; typedef unsigned DB_id;
#define DB_ID_INVALID 0 #define DB_ID_INVALID 0
@@ -46,8 +45,6 @@ struct DBPlayerData {
std::string secret; std::string secret;
std::string country; std::string country;
std::string last_login; std::string last_login;
std::string last_games;
std::string last_ip;
}; };
#endif #endif
-1
View File
@@ -57,7 +57,6 @@ public:
virtual void AsyncCreateGame(unsigned requestId, const std::string &gameName); virtual void AsyncCreateGame(unsigned requestId, const std::string &gameName);
virtual void SetGamePlayerPlace(unsigned requestId, DB_id playerId, unsigned place); virtual void SetGamePlayerPlace(unsigned requestId, DB_id playerId, unsigned place);
virtual void SetPlayerLastGames(unsigned requestId, DB_id playerId, std::vector<long> last_games, std::string playerIp);
virtual void EndGame(unsigned requestId); virtual void EndGame(unsigned requestId);
virtual void AsyncReportAvatar(unsigned requestId, unsigned replyId, DB_id reportedPlayerId, const std::string &avatarHash, const std::string &avatarType, DB_id *byPlayerId); virtual void AsyncReportAvatar(unsigned requestId, unsigned replyId, DB_id reportedPlayerId, const std::string &avatarHash, const std::string &avatarType, DB_id *byPlayerId);
-2
View File
@@ -36,7 +36,6 @@
#include <db/serverdbcallback.h> #include <db/serverdbcallback.h>
#include <string> #include <string>
#include <list> #include <list>
#include <vector>
typedef std::list<DB_id> db_list; typedef std::list<DB_id> db_list;
@@ -58,7 +57,6 @@ public:
virtual void AsyncCreateGame(unsigned requestId, const std::string &gameName) = 0; virtual void AsyncCreateGame(unsigned requestId, const std::string &gameName) = 0;
virtual void SetGamePlayerPlace(unsigned requestId, DB_id playerId, unsigned place) = 0; virtual void SetGamePlayerPlace(unsigned requestId, DB_id playerId, unsigned place) = 0;
virtual void SetPlayerLastGames(unsigned requestId, DB_id playerId, std::vector<long> last_games, std::string playerIp) = 0;
virtual void EndGame(unsigned requestId) = 0; virtual void EndGame(unsigned requestId) = 0;
virtual void AsyncReportAvatar(unsigned requestId, unsigned replyId, DB_id reportedPlayerId, const std::string &avatarHash, const std::string &avatarType, DB_id *byPlayerId) = 0; virtual void AsyncReportAvatar(unsigned requestId, unsigned replyId, DB_id reportedPlayerId, const std::string &avatarHash, const std::string &avatarType, DB_id *byPlayerId) = 0;
-1
View File
@@ -55,7 +55,6 @@ public:
virtual void AsyncCreateGame(unsigned /*requestId*/, const std::string &/*gameName*/) {} virtual void AsyncCreateGame(unsigned /*requestId*/, const std::string &/*gameName*/) {}
virtual void SetGamePlayerPlace(unsigned /*requestId*/, DB_id /*playerId*/, unsigned /*place*/) {} virtual void SetGamePlayerPlace(unsigned /*requestId*/, DB_id /*playerId*/, unsigned /*place*/) {}
virtual void SetPlayerLastGames(unsigned /*requestId*/, DB_id /*playerId*/, std::vector<long> /*last_games*/, std::string /*playerIp*/) {}
virtual void EndGame(unsigned /*requestId*/) {} virtual void EndGame(unsigned /*requestId*/) {}
virtual void AsyncReportAvatar(unsigned /*requestId*/, unsigned /*replyId*/, DB_id /*reportedPlayerId*/, const std::string &/*avatarHash*/, const std::string &/*avatarType*/, DB_id * /*byPlayerId*/) {} virtual void AsyncReportAvatar(unsigned /*requestId*/, unsigned /*replyId*/, DB_id /*reportedPlayerId*/, const std::string &/*avatarHash*/, const std::string &/*avatarType*/, DB_id * /*byPlayerId*/) {}
-76
View File
@@ -1,76 +0,0 @@
/*****************************************************************************
* PokerTH - The open source texas holdem engine *
* Copyright (C) 2006-2016 Felix Hammer, Florian Thauer, Lothar May *
* *
* This program is free software: you can redistribute it and/or modify *
* it under the terms of the GNU Affero General Public License as *
* published by the Free Software Foundation, either version 3 of the *
* License, or (at your option) any later version. *
* *
* This program is distributed in the hope that it will be useful, *
* but WITHOUT ANY WARRANTY; without even the implied warranty of *
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the *
* GNU Affero General Public License for more details. *
* *
* You should have received a copy of the GNU Affero General Public License *
* along with this program. If not, see <http://www.gnu.org/licenses/>. *
* *
* *
* Additional permission under GNU AGPL version 3 section 7 *
* *
* If you modify this program, or any covered work, by linking or *
* combining it with the OpenSSL project's OpenSSL library (or a *
* modified version of that library), containing parts covered by the *
* terms of the OpenSSL or SSLeay licenses, the authors of PokerTH *
* (Felix Hammer, Florian Thauer, Lothar May) grant you additional *
* permission to convey the resulting work. *
* Corresponding Source for a non-source form of such a combination *
* shall include the source code for the parts of OpenSSL used as well *
* as that of the covered work. *
*****************************************************************************/
#include <dbofficial/asyncdbadminplayers.h>
#include <dbofficial/dbidmanager.h>
using namespace std;
AsyncDBAdminPlayers::AsyncDBAdminPlayers(unsigned queryId, const string &preparedName)
: SingleAsyncDBQuery(queryId, preparedName, list<string>())
{
}
AsyncDBAdminPlayers::~AsyncDBAdminPlayers()
{
}
void
AsyncDBAdminPlayers::Init(DBIdManager& /*idManager*/)
{
}
void
AsyncDBAdminPlayers::HandleResult(mysqlpp::Query &/*query*/, DBIdManager& /*idManager*/, mysqlpp::StoreQueryResult& result, boost::asio::io_service &service, ServerDBCallback &cb)
{
list<DB_id> adminPlayers;
for (size_t i = 0; i < result.num_rows(); ++i) {
if (!result[i].empty()) {
adminPlayers.push_back(result[i][0]);
}
}
service.post(boost::bind(&ServerDBCallback::PlayerAdminList, &cb, GetId(), adminPlayers));
}
void
AsyncDBAdminPlayers::HandleNoResult(mysqlpp::Query &/*query*/, DBIdManager& /*idManager*/, boost::asio::io_service &service, ServerDBCallback &cb)
{
// This query should always produce a result.
HandleError(service, cb);
}
void
AsyncDBAdminPlayers::HandleError(boost::asio::io_service &service, ServerDBCallback &cb)
{
service.post(boost::bind(&ServerDBCallback::QueryError, &cb, "AsyncDBAdminPlayers: Failure."));
}
-57
View File
@@ -1,57 +0,0 @@
/*****************************************************************************
* PokerTH - The open source texas holdem engine *
* Copyright (C) 2006-2016 Felix Hammer, Florian Thauer, Lothar May *
* *
* This program is free software: you can redistribute it and/or modify *
* it under the terms of the GNU Affero General Public License as *
* published by the Free Software Foundation, either version 3 of the *
* License, or (at your option) any later version. *
* *
* This program is distributed in the hope that it will be useful, *
* but WITHOUT ANY WARRANTY; without even the implied warranty of *
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the *
* GNU Affero General Public License for more details. *
* *
* You should have received a copy of the GNU Affero General Public License *
* along with this program. If not, see <http://www.gnu.org/licenses/>. *
* *
* *
* Additional permission under GNU AGPL version 3 section 7 *
* *
* If you modify this program, or any covered work, by linking or *
* combining it with the OpenSSL project's OpenSSL library (or a *
* modified version of that library), containing parts covered by the *
* terms of the OpenSSL or SSLeay licenses, the authors of PokerTH *
* (Felix Hammer, Florian Thauer, Lothar May) grant you additional *
* permission to convey the resulting work. *
* Corresponding Source for a non-source form of such a combination *
* shall include the source code for the parts of OpenSSL used as well *
* as that of the covered work. *
*****************************************************************************/
/* Async database query for all admin players. */
#ifndef _ASYNCDBADMINPLAYERS_H_
#define _ASYNCDBADMINPLAYERS_H_
#include <dbofficial/singleasyncdbquery.h>
class AsyncDBAdminPlayers : public SingleAsyncDBQuery
{
public:
AsyncDBAdminPlayers(unsigned queryId, const std::string &preparedName);
virtual ~AsyncDBAdminPlayers();
virtual void Init(DBIdManager& idManager);
virtual void HandleResult(mysqlpp::Query &query, DBIdManager& idManager, mysqlpp::StoreQueryResult& result, boost::asio::io_service &service, ServerDBCallback &cb);
virtual void HandleNoResult(mysqlpp::Query &query, DBIdManager& idManager, boost::asio::io_service &service, ServerDBCallback &cb);
virtual void HandleError(boost::asio::io_service &service, ServerDBCallback &cb);
virtual bool RequiresResultSet() const
{
return true;
}
};
#endif
-90
View File
@@ -1,90 +0,0 @@
/*****************************************************************************
* PokerTH - The open source texas holdem engine *
* Copyright (C) 2006-2016 Felix Hammer, Florian Thauer, Lothar May *
* *
* This program is free software: you can redistribute it and/or modify *
* it under the terms of the GNU Affero General Public License as *
* published by the Free Software Foundation, either version 3 of the *
* License, or (at your option) any later version. *
* *
* This program is distributed in the hope that it will be useful, *
* but WITHOUT ANY WARRANTY; without even the implied warranty of *
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the *
* GNU Affero General Public License for more details. *
* *
* You should have received a copy of the GNU Affero General Public License *
* along with this program. If not, see <http://www.gnu.org/licenses/>. *
* *
* *
* Additional permission under GNU AGPL version 3 section 7 *
* *
* If you modify this program, or any covered work, by linking or *
* combining it with the OpenSSL project's OpenSSL library (or a *
* modified version of that library), containing parts covered by the *
* terms of the OpenSSL or SSLeay licenses, the authors of PokerTH *
* (Felix Hammer, Florian Thauer, Lothar May) grant you additional *
* permission to convey the resulting work. *
* Corresponding Source for a non-source form of such a combination *
* shall include the source code for the parts of OpenSSL used as well *
* as that of the covered work. *
*****************************************************************************/
#include <boost/bind.hpp>
#include <dbofficial/asyncdbauth.h>
using namespace std;
AsyncDBAuth::AsyncDBAuth(unsigned queryId, const string &preparedName, const list<string> &params)
: SingleAsyncDBQuery(queryId, preparedName, params)
{
}
AsyncDBAuth::~AsyncDBAuth()
{
}
void
AsyncDBAuth::HandleResult(mysqlpp::Query &/*query*/, DBIdManager& /*idManager*/, mysqlpp::StoreQueryResult& result, boost::asio::io_service &service, ServerDBCallback &cb)
{
if (result.num_rows() != 1) {
service.post(boost::bind(&ServerDBCallback::PlayerLoginFailed, &cb, GetId()));
} else {
int blocked = result[0][2];
int active = result[0][7];
if ((active != 1) || (blocked != 0)) {
service.post(boost::bind(&ServerDBCallback::PlayerLoginBlocked, &cb, GetId()));
} else {
mysqlpp::String secret(result[0][1]);
mysqlpp::String country(result[0][3]);
mysqlpp::String last_login(result[0][4]);
mysqlpp::String last_games(result[0][5]);
mysqlpp::String last_ip(result[0][6]);
boost::shared_ptr<DBPlayerData> tmpData(new DBPlayerData);
tmpData->id = result[0][0];
secret.to_string(tmpData->secret);
if (!country.is_null())
country.to_string(tmpData->country);
last_login.to_string(tmpData->last_login);
if (!last_games.is_null())
last_games.to_string(tmpData->last_games);
if (!last_ip.is_null())
last_ip.to_string(tmpData->last_ip);
service.post(boost::bind(&ServerDBCallback::PlayerLoginSuccess, &cb, GetId(), tmpData));
}
}
}
void
AsyncDBAuth::HandleNoResult(mysqlpp::Query &/*query*/, DBIdManager& /*idManager*/, boost::asio::io_service &service, ServerDBCallback &cb)
{
HandleError(service, cb);
}
void
AsyncDBAuth::HandleError(boost::asio::io_service &service, ServerDBCallback &cb)
{
service.post(boost::bind(&ServerDBCallback::PlayerLoginFailed, &cb, GetId()));
}
-57
View File
@@ -1,57 +0,0 @@
/*****************************************************************************
* PokerTH - The open source texas holdem engine *
* Copyright (C) 2006-2016 Felix Hammer, Florian Thauer, Lothar May *
* *
* This program is free software: you can redistribute it and/or modify *
* it under the terms of the GNU Affero General Public License as *
* published by the Free Software Foundation, either version 3 of the *
* License, or (at your option) any later version. *
* *
* This program is distributed in the hope that it will be useful, *
* but WITHOUT ANY WARRANTY; without even the implied warranty of *
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the *
* GNU Affero General Public License for more details. *
* *
* You should have received a copy of the GNU Affero General Public License *
* along with this program. If not, see <http://www.gnu.org/licenses/>. *
* *
* *
* Additional permission under GNU AGPL version 3 section 7 *
* *
* If you modify this program, or any covered work, by linking or *
* combining it with the OpenSSL project's OpenSSL library (or a *
* modified version of that library), containing parts covered by the *
* terms of the OpenSSL or SSLeay licenses, the authors of PokerTH *
* (Felix Hammer, Florian Thauer, Lothar May) grant you additional *
* permission to convey the resulting work. *
* Corresponding Source for a non-source form of such a combination *
* shall include the source code for the parts of OpenSSL used as well *
* as that of the covered work. *
*****************************************************************************/
/* Async database auth query. */
#ifndef _ASYNCDBAUTH_H_
#define _ASYNCDBAUTH_H_
#include <dbofficial/singleasyncdbquery.h>
class AsyncDBAuth : public SingleAsyncDBQuery
{
public:
AsyncDBAuth(unsigned queryId, const std::string &preparedName, const std::list<std::string> &params);
virtual ~AsyncDBAuth();
virtual void Init(DBIdManager& /*idManager*/) {}
virtual void HandleResult(mysqlpp::Query &query, DBIdManager& idManager, mysqlpp::StoreQueryResult& result, boost::asio::io_service &service, ServerDBCallback &cb);
virtual void HandleNoResult(mysqlpp::Query &query, DBIdManager& idManager, boost::asio::io_service &service, ServerDBCallback &cb);
virtual void HandleError(boost::asio::io_service &service, ServerDBCallback &cb);
virtual bool RequiresResultSet() const
{
return true;
}
};
#endif
-68
View File
@@ -1,68 +0,0 @@
/*****************************************************************************
* PokerTH - The open source texas holdem engine *
* Copyright (C) 2006-2016 Felix Hammer, Florian Thauer, Lothar May *
* *
* This program is free software: you can redistribute it and/or modify *
* it under the terms of the GNU Affero General Public License as *
* published by the Free Software Foundation, either version 3 of the *
* License, or (at your option) any later version. *
* *
* This program is distributed in the hope that it will be useful, *
* but WITHOUT ANY WARRANTY; without even the implied warranty of *
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the *
* GNU Affero General Public License for more details. *
* *
* You should have received a copy of the GNU Affero General Public License *
* along with this program. If not, see <http://www.gnu.org/licenses/>. *
* *
* *
* Additional permission under GNU AGPL version 3 section 7 *
* *
* If you modify this program, or any covered work, by linking or *
* combining it with the OpenSSL project's OpenSSL library (or a *
* modified version of that library), containing parts covered by the *
* terms of the OpenSSL or SSLeay licenses, the authors of PokerTH *
* (Felix Hammer, Florian Thauer, Lothar May) grant you additional *
* permission to convey the resulting work. *
* Corresponding Source for a non-source form of such a combination *
* shall include the source code for the parts of OpenSSL used as well *
* as that of the covered work. *
*****************************************************************************/
#include <boost/bind.hpp>
#include <dbofficial/asyncdbavatarblacklist.h>
using namespace std;
AsyncDBAvatarBlacklist::AsyncDBAvatarBlacklist(unsigned queryId, const string &preparedName, const list<string> &params)
: SingleAsyncDBQuery(queryId, preparedName, params)
{
}
AsyncDBAvatarBlacklist::~AsyncDBAvatarBlacklist()
{
}
void
AsyncDBAvatarBlacklist::HandleResult(mysqlpp::Query &/*query*/, DBIdManager& /*idManager*/, mysqlpp::StoreQueryResult& result, boost::asio::io_service &service, ServerDBCallback &cb)
{
if (result.num_rows() == 0)
service.post(boost::bind(&ServerDBCallback::AvatarIsOK, &cb, GetId()));
else
service.post(boost::bind(&ServerDBCallback::AvatarIsBlacklisted, &cb, GetId()));
}
void
AsyncDBAvatarBlacklist::HandleNoResult(mysqlpp::Query &/*query*/, DBIdManager& /*idManager*/, boost::asio::io_service &service, ServerDBCallback &cb)
{
HandleError(service, cb);
}
void
AsyncDBAvatarBlacklist::HandleError(boost::asio::io_service &service, ServerDBCallback &cb)
{
// If query failed: Avatar is blacklisted.
service.post(boost::bind(&ServerDBCallback::AvatarIsBlacklisted, &cb, GetId()));
}
-57
View File
@@ -1,57 +0,0 @@
/*****************************************************************************
* PokerTH - The open source texas holdem engine *
* Copyright (C) 2006-2016 Felix Hammer, Florian Thauer, Lothar May *
* *
* This program is free software: you can redistribute it and/or modify *
* it under the terms of the GNU Affero General Public License as *
* published by the Free Software Foundation, either version 3 of the *
* License, or (at your option) any later version. *
* *
* This program is distributed in the hope that it will be useful, *
* but WITHOUT ANY WARRANTY; without even the implied warranty of *
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the *
* GNU Affero General Public License for more details. *
* *
* You should have received a copy of the GNU Affero General Public License *
* along with this program. If not, see <http://www.gnu.org/licenses/>. *
* *
* *
* Additional permission under GNU AGPL version 3 section 7 *
* *
* If you modify this program, or any covered work, by linking or *
* combining it with the OpenSSL project's OpenSSL library (or a *
* modified version of that library), containing parts covered by the *
* terms of the OpenSSL or SSLeay licenses, the authors of PokerTH *
* (Felix Hammer, Florian Thauer, Lothar May) grant you additional *
* permission to convey the resulting work. *
* Corresponding Source for a non-source form of such a combination *
* shall include the source code for the parts of OpenSSL used as well *
* as that of the covered work. *
*****************************************************************************/
/* Async database avatar blacklist query. */
#ifndef _ASYNCDBAVATARBLACKLIST_H_
#define _ASYNCDBAVATARBLACKLIST_H_
#include <dbofficial/singleasyncdbquery.h>
class AsyncDBAvatarBlacklist : public SingleAsyncDBQuery
{
public:
AsyncDBAvatarBlacklist(unsigned queryId, const std::string &preparedName, const std::list<std::string> &params);
virtual ~AsyncDBAvatarBlacklist();
virtual void Init(DBIdManager& /*idManager*/) {}
virtual void HandleResult(mysqlpp::Query &query, DBIdManager& /*idManager*/, mysqlpp::StoreQueryResult& result, boost::asio::io_service &service, ServerDBCallback &cb);
virtual void HandleNoResult(mysqlpp::Query &query, DBIdManager& /*idManager*/, boost::asio::io_service &service, ServerDBCallback &cb);
virtual void HandleError(boost::asio::io_service &service, ServerDBCallback &cb);
virtual bool RequiresResultSet() const
{
return true;
}
};
#endif
-71
View File
@@ -1,71 +0,0 @@
/*****************************************************************************
* PokerTH - The open source texas holdem engine *
* Copyright (C) 2006-2016 Felix Hammer, Florian Thauer, Lothar May *
* *
* This program is free software: you can redistribute it and/or modify *
* it under the terms of the GNU Affero General Public License as *
* published by the Free Software Foundation, either version 3 of the *
* License, or (at your option) any later version. *
* *
* This program is distributed in the hope that it will be useful, *
* but WITHOUT ANY WARRANTY; without even the implied warranty of *
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the *
* GNU Affero General Public License for more details. *
* *
* You should have received a copy of the GNU Affero General Public License *
* along with this program. If not, see <http://www.gnu.org/licenses/>. *
* *
* *
* Additional permission under GNU AGPL version 3 section 7 *
* *
* If you modify this program, or any covered work, by linking or *
* combining it with the OpenSSL project's OpenSSL library (or a *
* modified version of that library), containing parts covered by the *
* terms of the OpenSSL or SSLeay licenses, the authors of PokerTH *
* (Felix Hammer, Florian Thauer, Lothar May) grant you additional *
* permission to convey the resulting work. *
* Corresponding Source for a non-source form of such a combination *
* shall include the source code for the parts of OpenSSL used as well *
* as that of the covered work. *
*****************************************************************************/
#include <boost/bind.hpp>
#include <dbofficial/asyncdbblockplayer.h>
#include <dbofficial/dbidmanager.h>
using namespace std;
AsyncDBBlockPlayer::AsyncDBBlockPlayer(unsigned queryId, unsigned replyId, const string &preparedName, const list<string> &params)
: SingleAsyncDBQuery(queryId, preparedName, params), m_replyId(replyId)
{
}
AsyncDBBlockPlayer::~AsyncDBBlockPlayer()
{
}
void
AsyncDBBlockPlayer::Init(DBIdManager &/*idManager*/)
{
}
void
AsyncDBBlockPlayer::HandleResult(mysqlpp::Query &/*query*/, DBIdManager &/*idManager*/, mysqlpp::StoreQueryResult &/*result*/, boost::asio::io_service &service, ServerDBCallback &cb)
{
// This query does not produce a result.
HandleError(service, cb);
}
void
AsyncDBBlockPlayer::HandleNoResult(mysqlpp::Query &/*query*/, DBIdManager &/*idManager*/, boost::asio::io_service &service, ServerDBCallback &cb)
{
service.post(boost::bind(&ServerDBCallback::BlockPlayerSuccess, &cb, GetId(), m_replyId));
}
void
AsyncDBBlockPlayer::HandleError(boost::asio::io_service &service, ServerDBCallback &cb)
{
service.post(boost::bind(&ServerDBCallback::BlockPlayerFailed, &cb, GetId(), m_replyId));
}
-60
View File
@@ -1,60 +0,0 @@
/*****************************************************************************
* PokerTH - The open source texas holdem engine *
* Copyright (C) 2006-2016 Felix Hammer, Florian Thauer, Lothar May *
* *
* This program is free software: you can redistribute it and/or modify *
* it under the terms of the GNU Affero General Public License as *
* published by the Free Software Foundation, either version 3 of the *
* License, or (at your option) any later version. *
* *
* This program is distributed in the hope that it will be useful, *
* but WITHOUT ANY WARRANTY; without even the implied warranty of *
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the *
* GNU Affero General Public License for more details. *
* *
* You should have received a copy of the GNU Affero General Public License *
* along with this program. If not, see <http://www.gnu.org/licenses/>. *
* *
* *
* Additional permission under GNU AGPL version 3 section 7 *
* *
* If you modify this program, or any covered work, by linking or *
* combining it with the OpenSSL project's OpenSSL library (or a *
* modified version of that library), containing parts covered by the *
* terms of the OpenSSL or SSLeay licenses, the authors of PokerTH *
* (Felix Hammer, Florian Thauer, Lothar May) grant you additional *
* permission to convey the resulting work. *
* Corresponding Source for a non-source form of such a combination *
* shall include the source code for the parts of OpenSSL used as well *
* as that of the covered work. *
*****************************************************************************/
/* Async database update to block a player. */
#ifndef _ASYNCDBBLOCKPLAYER_H_
#define _ASYNCDBBLOCKPLAYER_H_
#include <dbofficial/singleasyncdbquery.h>
class AsyncDBBlockPlayer : public SingleAsyncDBQuery
{
public:
AsyncDBBlockPlayer(unsigned queryId, unsigned replyId, const std::string &preparedName, const std::list<std::string> &params);
virtual ~AsyncDBBlockPlayer();
virtual void Init(DBIdManager& idManager);
virtual void HandleResult(mysqlpp::Query &query, DBIdManager& idManager, mysqlpp::StoreQueryResult& result, boost::asio::io_service &service, ServerDBCallback &cb);
virtual void HandleNoResult(mysqlpp::Query &query, DBIdManager& idManager, boost::asio::io_service &service, ServerDBCallback &cb);
virtual void HandleError(boost::asio::io_service &service, ServerDBCallback &cb);
virtual bool RequiresResultSet() const
{
return false;
}
private:
unsigned m_replyId;
};
#endif
-76
View File
@@ -1,76 +0,0 @@
/*****************************************************************************
* PokerTH - The open source texas holdem engine *
* Copyright (C) 2006-2016 Felix Hammer, Florian Thauer, Lothar May *
* *
* This program is free software: you can redistribute it and/or modify *
* it under the terms of the GNU Affero General Public License as *
* published by the Free Software Foundation, either version 3 of the *
* License, or (at your option) any later version. *
* *
* This program is distributed in the hope that it will be useful, *
* but WITHOUT ANY WARRANTY; without even the implied warranty of *
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the *
* GNU Affero General Public License for more details. *
* *
* You should have received a copy of the GNU Affero General Public License *
* along with this program. If not, see <http://www.gnu.org/licenses/>. *
* *
* *
* Additional permission under GNU AGPL version 3 section 7 *
* *
* If you modify this program, or any covered work, by linking or *
* combining it with the OpenSSL project's OpenSSL library (or a *
* modified version of that library), containing parts covered by the *
* terms of the OpenSSL or SSLeay licenses, the authors of PokerTH *
* (Felix Hammer, Florian Thauer, Lothar May) grant you additional *
* permission to convey the resulting work. *
* Corresponding Source for a non-source form of such a combination *
* shall include the source code for the parts of OpenSSL used as well *
* as that of the covered work. *
*****************************************************************************/
#include <boost/bind.hpp>
#include <dbofficial/asyncdbcreategame.h>
#include <dbofficial/dbidmanager.h>
using namespace std;
AsyncDBCreateGame::AsyncDBCreateGame(unsigned queryId, const string &preparedName, const list<string> &params)
: SingleAsyncDBQuery(queryId, preparedName, params)
{
}
AsyncDBCreateGame::~AsyncDBCreateGame()
{
}
void
AsyncDBCreateGame::HandleResult(mysqlpp::Query &/*query*/, DBIdManager& /*idManager*/, mysqlpp::StoreQueryResult& /*result*/, boost::asio::io_service &service, ServerDBCallback &cb)
{
// This query does not produce a result.
HandleError(service, cb);
}
void
AsyncDBCreateGame::HandleNoResult(mysqlpp::Query &query, DBIdManager& idManager, boost::asio::io_service &service, ServerDBCallback &cb)
{
query.reset();
query
<< "SELECT LAST_INSERT_ID()";
mysqlpp::StoreQueryResult tmpResult = query.store();
DB_id insertId = tmpResult[0][0];
if (!tmpResult || tmpResult.num_rows() != 1 || insertId == 0) {
service.post(boost::bind(&ServerDBCallback::CreateGameFailed, &cb, GetId()));
} else {
service.post(boost::bind(&ServerDBCallback::CreateGameSuccess, &cb, GetId()));
idManager.AddGameId(GetId(), insertId);
}
}
void
AsyncDBCreateGame::HandleError(boost::asio::io_service &service, ServerDBCallback &cb)
{
service.post(boost::bind(&ServerDBCallback::CreateGameFailed, &cb, GetId()));
}
-57
View File
@@ -1,57 +0,0 @@
/*****************************************************************************
* PokerTH - The open source texas holdem engine *
* Copyright (C) 2006-2016 Felix Hammer, Florian Thauer, Lothar May *
* *
* This program is free software: you can redistribute it and/or modify *
* it under the terms of the GNU Affero General Public License as *
* published by the Free Software Foundation, either version 3 of the *
* License, or (at your option) any later version. *
* *
* This program is distributed in the hope that it will be useful, *
* but WITHOUT ANY WARRANTY; without even the implied warranty of *
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the *
* GNU Affero General Public License for more details. *
* *
* You should have received a copy of the GNU Affero General Public License *
* along with this program. If not, see <http://www.gnu.org/licenses/>. *
* *
* *
* Additional permission under GNU AGPL version 3 section 7 *
* *
* If you modify this program, or any covered work, by linking or *
* combining it with the OpenSSL project's OpenSSL library (or a *
* modified version of that library), containing parts covered by the *
* terms of the OpenSSL or SSLeay licenses, the authors of PokerTH *
* (Felix Hammer, Florian Thauer, Lothar May) grant you additional *
* permission to convey the resulting work. *
* Corresponding Source for a non-source form of such a combination *
* shall include the source code for the parts of OpenSSL used as well *
* as that of the covered work. *
*****************************************************************************/
/* Async database create game query. */
#ifndef _ASYNCDBCREATEGAME_H_
#define _ASYNCDBCREATEGAME_H_
#include <dbofficial/singleasyncdbquery.h>
class AsyncDBCreateGame : public SingleAsyncDBQuery
{
public:
AsyncDBCreateGame(unsigned queryId, const std::string &preparedName, const std::list<std::string> &params);
virtual ~AsyncDBCreateGame();
virtual void Init(DBIdManager& /*idManager*/) {}
virtual void HandleResult(mysqlpp::Query &query, DBIdManager& idManager, mysqlpp::StoreQueryResult& result, boost::asio::io_service &service, ServerDBCallback &cb);
virtual void HandleNoResult(mysqlpp::Query &query, DBIdManager& idManager, boost::asio::io_service &service, ServerDBCallback &cb);
virtual void HandleError(boost::asio::io_service &service, ServerDBCallback &cb);
virtual bool RequiresResultSet() const
{
return false;
}
};
#endif
-77
View File
@@ -1,77 +0,0 @@
/*****************************************************************************
* PokerTH - The open source texas holdem engine *
* Copyright (C) 2006-2016 Felix Hammer, Florian Thauer, Lothar May *
* *
* This program is free software: you can redistribute it and/or modify *
* it under the terms of the GNU Affero General Public License as *
* published by the Free Software Foundation, either version 3 of the *
* License, or (at your option) any later version. *
* *
* This program is distributed in the hope that it will be useful, *
* but WITHOUT ANY WARRANTY; without even the implied warranty of *
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the *
* GNU Affero General Public License for more details. *
* *
* You should have received a copy of the GNU Affero General Public License *
* along with this program. If not, see <http://www.gnu.org/licenses/>. *
* *
* *
* Additional permission under GNU AGPL version 3 section 7 *
* *
* If you modify this program, or any covered work, by linking or *
* combining it with the OpenSSL project's OpenSSL library (or a *
* modified version of that library), containing parts covered by the *
* terms of the OpenSSL or SSLeay licenses, the authors of PokerTH *
* (Felix Hammer, Florian Thauer, Lothar May) grant you additional *
* permission to convey the resulting work. *
* Corresponding Source for a non-source form of such a combination *
* shall include the source code for the parts of OpenSSL used as well *
* as that of the covered work. *
*****************************************************************************/
#include <dbofficial/asyncdbendgame.h>
#include <dbofficial/dbidmanager.h>
using namespace std;
AsyncDBEndGame::AsyncDBEndGame(unsigned queryId, const string &preparedName, const std::list<std::string> &params)
: SingleAsyncDBQuery(queryId, preparedName, params)
{
}
AsyncDBEndGame::~AsyncDBEndGame()
{
}
void
AsyncDBEndGame::Init(DBIdManager& idManager)
{
std::list<std::string> params;
GetParams(params);
ostringstream paramStream;
paramStream << idManager.GetGameDBId(GetId());
// Add game id as last parameter (where-clause).
params.push_back(paramStream.str());
SetParams(params);
}
void
AsyncDBEndGame::HandleResult(mysqlpp::Query &/*query*/, DBIdManager& /*idManager*/, mysqlpp::StoreQueryResult& /*result*/, boost::asio::io_service &service, ServerDBCallback &cb)
{
// This query does not produce a result.
HandleError(service, cb);
}
void
AsyncDBEndGame::HandleNoResult(mysqlpp::Query &/*query*/, DBIdManager& /*idManager*/, boost::asio::io_service &/*service*/, ServerDBCallback &/*cb*/)
{
// Nothing to do.
}
void
AsyncDBEndGame::HandleError(boost::asio::io_service &/*service*/, ServerDBCallback &/*cb*/)
{
// Ignore errors for now (as nothing important is done).
}
-57
View File
@@ -1,57 +0,0 @@
/*****************************************************************************
* PokerTH - The open source texas holdem engine *
* Copyright (C) 2006-2016 Felix Hammer, Florian Thauer, Lothar May *
* *
* This program is free software: you can redistribute it and/or modify *
* it under the terms of the GNU Affero General Public License as *
* published by the Free Software Foundation, either version 3 of the *
* License, or (at your option) any later version. *
* *
* This program is distributed in the hope that it will be useful, *
* but WITHOUT ANY WARRANTY; without even the implied warranty of *
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the *
* GNU Affero General Public License for more details. *
* *
* You should have received a copy of the GNU Affero General Public License *
* along with this program. If not, see <http://www.gnu.org/licenses/>. *
* *
* *
* Additional permission under GNU AGPL version 3 section 7 *
* *
* If you modify this program, or any covered work, by linking or *
* combining it with the OpenSSL project's OpenSSL library (or a *
* modified version of that library), containing parts covered by the *
* terms of the OpenSSL or SSLeay licenses, the authors of PokerTH *
* (Felix Hammer, Florian Thauer, Lothar May) grant you additional *
* permission to convey the resulting work. *
* Corresponding Source for a non-source form of such a combination *
* shall include the source code for the parts of OpenSSL used as well *
* as that of the covered work. *
*****************************************************************************/
/* Async database end game query. */
#ifndef _ASYNCDBENDGAME_H_
#define _ASYNCDBENDGAME_H_
#include <dbofficial/singleasyncdbquery.h>
class AsyncDBEndGame : public SingleAsyncDBQuery
{
public:
AsyncDBEndGame(unsigned queryId, const std::string &preparedName, const std::list<std::string> &params);
virtual ~AsyncDBEndGame();
virtual void Init(DBIdManager& idManager);
virtual void HandleResult(mysqlpp::Query &query, DBIdManager& idManager, mysqlpp::StoreQueryResult& result, boost::asio::io_service &service, ServerDBCallback &cb);
virtual void HandleNoResult(mysqlpp::Query &query, DBIdManager& idManager, boost::asio::io_service &service, ServerDBCallback &cb);
virtual void HandleError(boost::asio::io_service &service, ServerDBCallback &cb);
virtual bool RequiresResultSet() const
{
return false;
}
};
#endif
-78
View File
@@ -1,78 +0,0 @@
/*****************************************************************************
* PokerTH - The open source texas holdem engine *
* Copyright (C) 2006-2016 Felix Hammer, Florian Thauer, Lothar May *
* *
* This program is free software: you can redistribute it and/or modify *
* it under the terms of the GNU Affero General Public License as *
* published by the Free Software Foundation, either version 3 of the *
* License, or (at your option) any later version. *
* *
* This program is distributed in the hope that it will be useful, *
* but WITHOUT ANY WARRANTY; without even the implied warranty of *
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the *
* GNU Affero General Public License for more details. *
* *
* You should have received a copy of the GNU Affero General Public License *
* along with this program. If not, see <http://www.gnu.org/licenses/>. *
* *
* *
* Additional permission under GNU AGPL version 3 section 7 *
* *
* If you modify this program, or any covered work, by linking or *
* combining it with the OpenSSL project's OpenSSL library (or a *
* modified version of that library), containing parts covered by the *
* terms of the OpenSSL or SSLeay licenses, the authors of PokerTH *
* (Felix Hammer, Florian Thauer, Lothar May) grant you additional *
* permission to convey the resulting work. *
* Corresponding Source for a non-source form of such a combination *
* shall include the source code for the parts of OpenSSL used as well *
* as that of the covered work. *
*****************************************************************************/
#include <boost/bind.hpp>
#include <dbofficial/asyncdbgameplace.h>
#include <dbofficial/dbidmanager.h>
using namespace std;
AsyncDBGamePlace::AsyncDBGamePlace(unsigned queryId, const string &preparedName, const list<string> &params)
: SingleAsyncDBQuery(queryId, preparedName, params)
{
}
AsyncDBGamePlace::~AsyncDBGamePlace()
{
}
void
AsyncDBGamePlace::Init(DBIdManager& idManager)
{
std::list<std::string> params;
GetParams(params);
ostringstream paramStream;
paramStream << idManager.GetGameDBId(GetId());
// Add game id as first parameter (according to the order in insert).
params.push_front(paramStream.str());
SetParams(params);
}
void
AsyncDBGamePlace::HandleResult(mysqlpp::Query &/*query*/, DBIdManager& /*idManager*/, mysqlpp::StoreQueryResult& /*result*/, boost::asio::io_service &service, ServerDBCallback &cb)
{
// This query does not produce a result.
HandleError(service, cb);
}
void
AsyncDBGamePlace::HandleNoResult(mysqlpp::Query &/*query*/, DBIdManager& /*idManager*/, boost::asio::io_service &/*service*/, ServerDBCallback &/*cb*/)
{
// No action required.
}
void
AsyncDBGamePlace::HandleError(boost::asio::io_service &service, ServerDBCallback &cb)
{
service.post(boost::bind(&ServerDBCallback::QueryError, &cb, "AsyncDBGamePlace: Failure."));
}
-57
View File
@@ -1,57 +0,0 @@
/*****************************************************************************
* PokerTH - The open source texas holdem engine *
* Copyright (C) 2006-2016 Felix Hammer, Florian Thauer, Lothar May *
* *
* This program is free software: you can redistribute it and/or modify *
* it under the terms of the GNU Affero General Public License as *
* published by the Free Software Foundation, either version 3 of the *
* License, or (at your option) any later version. *
* *
* This program is distributed in the hope that it will be useful, *
* but WITHOUT ANY WARRANTY; without even the implied warranty of *
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the *
* GNU Affero General Public License for more details. *
* *
* You should have received a copy of the GNU Affero General Public License *
* along with this program. If not, see <http://www.gnu.org/licenses/>. *
* *
* *
* Additional permission under GNU AGPL version 3 section 7 *
* *
* If you modify this program, or any covered work, by linking or *
* combining it with the OpenSSL project's OpenSSL library (or a *
* modified version of that library), containing parts covered by the *
* terms of the OpenSSL or SSLeay licenses, the authors of PokerTH *
* (Felix Hammer, Florian Thauer, Lothar May) grant you additional *
* permission to convey the resulting work. *
* Corresponding Source for a non-source form of such a combination *
* shall include the source code for the parts of OpenSSL used as well *
* as that of the covered work. *
*****************************************************************************/
/* Async database set place query. */
#ifndef _ASYNCDBGAMEPLACE_H_
#define _ASYNCDBGAMEPLACE_H_
#include <dbofficial/singleasyncdbquery.h>
class AsyncDBGamePlace : public SingleAsyncDBQuery
{
public:
AsyncDBGamePlace(unsigned queryId, const std::string &preparedName, const std::list<std::string> &params);
virtual ~AsyncDBGamePlace();
virtual void Init(DBIdManager& idManager);
virtual void HandleResult(mysqlpp::Query &query, DBIdManager& idManager, mysqlpp::StoreQueryResult& result, boost::asio::io_service &service, ServerDBCallback &cb);
virtual void HandleNoResult(mysqlpp::Query &query, DBIdManager& idManager, boost::asio::io_service &service, ServerDBCallback &cb);
virtual void HandleError(boost::asio::io_service &service, ServerDBCallback &cb);
virtual bool RequiresResultSet() const
{
return false;
}
};
#endif
-65
View File
@@ -1,65 +0,0 @@
/*****************************************************************************
* PokerTH - The open source texas holdem engine *
* Copyright (C) 2006-2016 Felix Hammer, Florian Thauer, Lothar May *
* *
* This program is free software: you can redistribute it and/or modify *
* it under the terms of the GNU Affero General Public License as *
* published by the Free Software Foundation, either version 3 of the *
* License, or (at your option) any later version. *
* *
* This program is distributed in the hope that it will be useful, *
* but WITHOUT ANY WARRANTY; without even the implied warranty of *
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the *
* GNU Affero General Public License for more details. *
* *
* You should have received a copy of the GNU Affero General Public License *
* along with this program. If not, see <http://www.gnu.org/licenses/>. *
* *
* *
* Additional permission under GNU AGPL version 3 section 7 *
* *
* If you modify this program, or any covered work, by linking or *
* combining it with the OpenSSL project's OpenSSL library (or a *
* modified version of that library), containing parts covered by the *
* terms of the OpenSSL or SSLeay licenses, the authors of PokerTH *
* (Felix Hammer, Florian Thauer, Lothar May) grant you additional *
* permission to convey the resulting work. *
* Corresponding Source for a non-source form of such a combination *
* shall include the source code for the parts of OpenSSL used as well *
* as that of the covered work. *
*****************************************************************************/
#include <boost/bind.hpp>
#include <dbofficial/asyncdblogin.h>
using namespace std;
AsyncDBLogin::AsyncDBLogin(unsigned queryId, const string &preparedName, const list<string> &params)
: SingleAsyncDBQuery(queryId, preparedName, params)
{
}
AsyncDBLogin::~AsyncDBLogin()
{
}
void
AsyncDBLogin::HandleResult(mysqlpp::Query &/*query*/, DBIdManager& /*idManager*/, mysqlpp::StoreQueryResult& /*result*/, boost::asio::io_service &service, ServerDBCallback &cb)
{
// This query does not produce a result.
HandleError(service, cb);
}
void
AsyncDBLogin::HandleNoResult(mysqlpp::Query &/*query*/, DBIdManager& /*idManager*/, boost::asio::io_service &/*service*/, ServerDBCallback &/*cb*/)
{
// No action required.
}
void
AsyncDBLogin::HandleError(boost::asio::io_service &service, ServerDBCallback &cb)
{
service.post(boost::bind(&ServerDBCallback::QueryError, &cb, "AsyncDBLogin: Failure."));
}
-57
View File
@@ -1,57 +0,0 @@
/*****************************************************************************
* PokerTH - The open source texas holdem engine *
* Copyright (C) 2006-2016 Felix Hammer, Florian Thauer, Lothar May *
* *
* This program is free software: you can redistribute it and/or modify *
* it under the terms of the GNU Affero General Public License as *
* published by the Free Software Foundation, either version 3 of the *
* License, or (at your option) any later version. *
* *
* This program is distributed in the hope that it will be useful, *
* but WITHOUT ANY WARRANTY; without even the implied warranty of *
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the *
* GNU Affero General Public License for more details. *
* *
* You should have received a copy of the GNU Affero General Public License *
* along with this program. If not, see <http://www.gnu.org/licenses/>. *
* *
* *
* Additional permission under GNU AGPL version 3 section 7 *
* *
* If you modify this program, or any covered work, by linking or *
* combining it with the OpenSSL project's OpenSSL library (or a *
* modified version of that library), containing parts covered by the *
* terms of the OpenSSL or SSLeay licenses, the authors of PokerTH *
* (Felix Hammer, Florian Thauer, Lothar May) grant you additional *
* permission to convey the resulting work. *
* Corresponding Source for a non-source form of such a combination *
* shall include the source code for the parts of OpenSSL used as well *
* as that of the covered work. *
*****************************************************************************/
/* Async database login query. */
#ifndef _ASYNCDBLOGIN_H_
#define _ASYNCDBLOGIN_H_
#include <dbofficial/singleasyncdbquery.h>
class AsyncDBLogin : public SingleAsyncDBQuery
{
public:
AsyncDBLogin(unsigned queryId, const std::string &preparedName, const std::list<std::string> &params);
virtual ~AsyncDBLogin();
virtual void Init(DBIdManager& /*idManager*/) {}
virtual void HandleResult(mysqlpp::Query &query, DBIdManager& idManager, mysqlpp::StoreQueryResult& result, boost::asio::io_service &service, ServerDBCallback &cb);
virtual void HandleNoResult(mysqlpp::Query &query, DBIdManager& idManager, boost::asio::io_service &service, ServerDBCallback &cb);
virtual void HandleError(boost::asio::io_service &service, ServerDBCallback &cb);
virtual bool RequiresResultSet() const
{
return false;
}
};
#endif
-62
View File
@@ -1,62 +0,0 @@
/*****************************************************************************
* PokerTH - The open source texas holdem engine *
* Copyright (C) 2006-2016 Felix Hammer, Florian Thauer, Lothar May *
* *
* This program is free software: you can redistribute it and/or modify *
* it under the terms of the GNU Affero General Public License as *
* published by the Free Software Foundation, either version 3 of the *
* License, or (at your option) any later version. *
* *
* This program is distributed in the hope that it will be useful, *
* but WITHOUT ANY WARRANTY; without even the implied warranty of *
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the *
* GNU Affero General Public License for more details. *
* *
* You should have received a copy of the GNU Affero General Public License *
* along with this program. If not, see <http://www.gnu.org/licenses/>. *
* *
* *
* Additional permission under GNU AGPL version 3 section 7 *
* *
* If you modify this program, or any covered work, by linking or *
* combining it with the OpenSSL project's OpenSSL library (or a *
* modified version of that library), containing parts covered by the *
* terms of the OpenSSL or SSLeay licenses, the authors of PokerTH *
* (Felix Hammer, Florian Thauer, Lothar May) grant you additional *
* permission to convey the resulting work. *
* Corresponding Source for a non-source form of such a combination *
* shall include the source code for the parts of OpenSSL used as well *
* as that of the covered work. *
*****************************************************************************/
#include <dbofficial/asyncdbplayerlastgames.h>
using namespace std;
AsyncDBPlayerLastGames::AsyncDBPlayerLastGames(unsigned queryId, const string &preparedName, const list<string> &params)
: SingleAsyncDBQuery(queryId, preparedName, params)
{
}
AsyncDBPlayerLastGames::~AsyncDBPlayerLastGames()
{
}
void
AsyncDBPlayerLastGames::HandleResult(mysqlpp::Query &/*query*/, DBIdManager &/*idManager*/, mysqlpp::StoreQueryResult &/*result*/, boost::asio::io_service &service, ServerDBCallback &cb)
{
// This query does not produce a result.
HandleError(service, cb);
}
void
AsyncDBPlayerLastGames::HandleNoResult(mysqlpp::Query &/*query*/, DBIdManager& /*idManager*/, boost::asio::io_service &/*service*/, ServerDBCallback &/*cb*/)
{
}
void
AsyncDBPlayerLastGames::HandleError(boost::asio::io_service &service, ServerDBCallback &cb)
{
}
-57
View File
@@ -1,57 +0,0 @@
/*****************************************************************************
* PokerTH - The open source texas holdem engine *
* Copyright (C) 2006-2016 Felix Hammer, Florian Thauer, Lothar May *
* *
* This program is free software: you can redistribute it and/or modify *
* it under the terms of the GNU Affero General Public License as *
* published by the Free Software Foundation, either version 3 of the *
* License, or (at your option) any later version. *
* *
* This program is distributed in the hope that it will be useful, *
* but WITHOUT ANY WARRANTY; without even the implied warranty of *
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the *
* GNU Affero General Public License for more details. *
* *
* You should have received a copy of the GNU Affero General Public License *
* along with this program. If not, see <http://www.gnu.org/licenses/>. *
* *
* *
* Additional permission under GNU AGPL version 3 section 7 *
* *
* If you modify this program, or any covered work, by linking or *
* combining it with the OpenSSL project's OpenSSL library (or a *
* modified version of that library), containing parts covered by the *
* terms of the OpenSSL or SSLeay licenses, the authors of PokerTH *
* (Felix Hammer, Florian Thauer, Lothar May) grant you additional *
* permission to convey the resulting work. *
* Corresponding Source for a non-source form of such a combination *
* shall include the source code for the parts of OpenSSL used as well *
* as that of the covered work. *
*****************************************************************************/
/* Async database update to block a player. */
#ifndef _ASYNCDBPLAYERLASTGAMES_H_
#define _ASYNCDBPLAYERLASTGAMES_H_
#include <dbofficial/singleasyncdbquery.h>
class AsyncDBPlayerLastGames : public SingleAsyncDBQuery
{
public:
AsyncDBPlayerLastGames(unsigned queryId, const std::string &preparedName, const std::list<std::string> &params);
virtual ~AsyncDBPlayerLastGames();
virtual void Init(DBIdManager& /*idManager*/) {}
virtual void HandleResult(mysqlpp::Query &query, DBIdManager& idManager, mysqlpp::StoreQueryResult& result, boost::asio::io_service &service, ServerDBCallback &cb);
virtual void HandleNoResult(mysqlpp::Query &query, DBIdManager& idManager, boost::asio::io_service &service, ServerDBCallback &cb);
virtual void HandleError(boost::asio::io_service &service, ServerDBCallback &cb);
virtual bool RequiresResultSet() const
{
return false;
}
};
#endif
-40
View File
@@ -1,40 +0,0 @@
/*****************************************************************************
* PokerTH - The open source texas holdem engine *
* Copyright (C) 2006-2016 Felix Hammer, Florian Thauer, Lothar May *
* *
* This program is free software: you can redistribute it and/or modify *
* it under the terms of the GNU Affero General Public License as *
* published by the Free Software Foundation, either version 3 of the *
* License, or (at your option) any later version. *
* *
* This program is distributed in the hope that it will be useful, *
* but WITHOUT ANY WARRANTY; without even the implied warranty of *
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the *
* GNU Affero General Public License for more details. *
* *
* You should have received a copy of the GNU Affero General Public License *
* along with this program. If not, see <http://www.gnu.org/licenses/>. *
* *
* *
* Additional permission under GNU AGPL version 3 section 7 *
* *
* If you modify this program, or any covered work, by linking or *
* combining it with the OpenSSL project's OpenSSL library (or a *
* modified version of that library), containing parts covered by the *
* terms of the OpenSSL or SSLeay licenses, the authors of PokerTH *
* (Felix Hammer, Florian Thauer, Lothar May) grant you additional *
* permission to convey the resulting work. *
* Corresponding Source for a non-source form of such a combination *
* shall include the source code for the parts of OpenSSL used as well *
* as that of the covered work. *
*****************************************************************************/
#include <dbofficial/asyncdbquery.h>
using namespace std;
AsyncDBQuery::~AsyncDBQuery()
{
}
-61
View File
@@ -1,61 +0,0 @@
/*****************************************************************************
* PokerTH - The open source texas holdem engine *
* Copyright (C) 2006-2016 Felix Hammer, Florian Thauer, Lothar May *
* *
* This program is free software: you can redistribute it and/or modify *
* it under the terms of the GNU Affero General Public License as *
* published by the Free Software Foundation, either version 3 of the *
* License, or (at your option) any later version. *
* *
* This program is distributed in the hope that it will be useful, *
* but WITHOUT ANY WARRANTY; without even the implied warranty of *
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the *
* GNU Affero General Public License for more details. *
* *
* You should have received a copy of the GNU Affero General Public License *
* along with this program. If not, see <http://www.gnu.org/licenses/>. *
* *
* *
* Additional permission under GNU AGPL version 3 section 7 *
* *
* If you modify this program, or any covered work, by linking or *
* combining it with the OpenSSL project's OpenSSL library (or a *
* modified version of that library), containing parts covered by the *
* terms of the OpenSSL or SSLeay licenses, the authors of PokerTH *
* (Felix Hammer, Florian Thauer, Lothar May) grant you additional *
* permission to convey the resulting work. *
* Corresponding Source for a non-source form of such a combination *
* shall include the source code for the parts of OpenSSL used as well *
* as that of the covered work. *
*****************************************************************************/
/* Async database query. */
#ifndef _ASYNCDBQUERY_H_
#define _ASYNCDBQUERY_H_
#include <boost/asio.hpp>
#include <list>
#include <mysql++.h>
#include <db/serverdbcallback.h>
class DBIdManager;
class AsyncDBQuery
{
public:
virtual ~AsyncDBQuery();
virtual void Init(DBIdManager& idManager) = 0;
virtual std::string GetPreparedName() const = 0;
virtual void GetParams(std::list<std::string> &params) const = 0;
virtual void SetParams(const std::list<std::string> &params) = 0;
virtual void HandleResult(mysqlpp::Query &query, DBIdManager& idManager, mysqlpp::StoreQueryResult& result, boost::asio::io_service &service, ServerDBCallback &cb) = 0;
virtual void HandleNoResult(mysqlpp::Query &query, DBIdManager& idManager, boost::asio::io_service &service, ServerDBCallback &cb) = 0;
virtual void HandleError(boost::asio::io_service &service, ServerDBCallback &cb) = 0;
virtual bool RequiresResultSet() const = 0;
virtual bool Next() = 0;
};
#endif
-65
View File
@@ -1,65 +0,0 @@
/*****************************************************************************
* PokerTH - The open source texas holdem engine *
* Copyright (C) 2006-2016 Felix Hammer, Florian Thauer, Lothar May *
* *
* This program is free software: you can redistribute it and/or modify *
* it under the terms of the GNU Affero General Public License as *
* published by the Free Software Foundation, either version 3 of the *
* License, or (at your option) any later version. *
* *
* This program is distributed in the hope that it will be useful, *
* but WITHOUT ANY WARRANTY; without even the implied warranty of *
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the *
* GNU Affero General Public License for more details. *
* *
* You should have received a copy of the GNU Affero General Public License *
* along with this program. If not, see <http://www.gnu.org/licenses/>. *
* *
* *
* Additional permission under GNU AGPL version 3 section 7 *
* *
* If you modify this program, or any covered work, by linking or *
* combining it with the OpenSSL project's OpenSSL library (or a *
* modified version of that library), containing parts covered by the *
* terms of the OpenSSL or SSLeay licenses, the authors of PokerTH *
* (Felix Hammer, Florian Thauer, Lothar May) grant you additional *
* permission to convey the resulting work. *
* Corresponding Source for a non-source form of such a combination *
* shall include the source code for the parts of OpenSSL used as well *
* as that of the covered work. *
*****************************************************************************/
#include <boost/bind.hpp>
#include <dbofficial/asyncdbreportavatar.h>
using namespace std;
AsyncDBReportAvatar::AsyncDBReportAvatar(unsigned queryId, unsigned replyId, const string &preparedName, const list<string> &params)
: SingleAsyncDBQuery(queryId, preparedName, params), m_replyId(replyId)
{
}
AsyncDBReportAvatar::~AsyncDBReportAvatar()
{
}
void
AsyncDBReportAvatar::HandleResult(mysqlpp::Query &/*query*/, DBIdManager& /*idManager*/, mysqlpp::StoreQueryResult& /*result*/, boost::asio::io_service &service, ServerDBCallback &cb)
{
// This query does not produce a result.
HandleError(service, cb);
}
void
AsyncDBReportAvatar::HandleNoResult(mysqlpp::Query &/*query*/, DBIdManager& /*idManager*/, boost::asio::io_service &service, ServerDBCallback &cb)
{
service.post(boost::bind(&ServerDBCallback::ReportAvatarSuccess, &cb, GetId(), m_replyId));
}
void
AsyncDBReportAvatar::HandleError(boost::asio::io_service &service, ServerDBCallback &cb)
{
service.post(boost::bind(&ServerDBCallback::ReportAvatarFailed, &cb, GetId(), m_replyId));
}
-60
View File
@@ -1,60 +0,0 @@
/*****************************************************************************
* PokerTH - The open source texas holdem engine *
* Copyright (C) 2006-2016 Felix Hammer, Florian Thauer, Lothar May *
* *
* This program is free software: you can redistribute it and/or modify *
* it under the terms of the GNU Affero General Public License as *
* published by the Free Software Foundation, either version 3 of the *
* License, or (at your option) any later version. *
* *
* This program is distributed in the hope that it will be useful, *
* but WITHOUT ANY WARRANTY; without even the implied warranty of *
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the *
* GNU Affero General Public License for more details. *
* *
* You should have received a copy of the GNU Affero General Public License *
* along with this program. If not, see <http://www.gnu.org/licenses/>. *
* *
* *
* Additional permission under GNU AGPL version 3 section 7 *
* *
* If you modify this program, or any covered work, by linking or *
* combining it with the OpenSSL project's OpenSSL library (or a *
* modified version of that library), containing parts covered by the *
* terms of the OpenSSL or SSLeay licenses, the authors of PokerTH *
* (Felix Hammer, Florian Thauer, Lothar May) grant you additional *
* permission to convey the resulting work. *
* Corresponding Source for a non-source form of such a combination *
* shall include the source code for the parts of OpenSSL used as well *
* as that of the covered work. *
*****************************************************************************/
/* Async database report inappropriate avatar query. */
#ifndef _ASYNCDBREPORTAVATAR_H_
#define _ASYNCDBREPORTAVATAR_H_
#include <dbofficial/singleasyncdbquery.h>
class AsyncDBReportAvatar : public SingleAsyncDBQuery
{
public:
AsyncDBReportAvatar(unsigned queryId, unsigned replyId, const std::string &preparedName, const std::list<std::string> &params);
virtual ~AsyncDBReportAvatar();
virtual void Init(DBIdManager& /*idManager*/) {}
virtual void HandleResult(mysqlpp::Query &query, DBIdManager& idManager, mysqlpp::StoreQueryResult& result, boost::asio::io_service &service, ServerDBCallback &cb);
virtual void HandleNoResult(mysqlpp::Query &query, DBIdManager& idManager, boost::asio::io_service &service, ServerDBCallback &cb);
virtual void HandleError(boost::asio::io_service &service, ServerDBCallback &cb);
virtual bool RequiresResultSet() const
{
return false;
}
private:
unsigned m_replyId;
};
#endif
-83
View File
@@ -1,83 +0,0 @@
/*****************************************************************************
* PokerTH - The open source texas holdem engine *
* Copyright (C) 2006-2016 Felix Hammer, Florian Thauer, Lothar May *
* *
* This program is free software: you can redistribute it and/or modify *
* it under the terms of the GNU Affero General Public License as *
* published by the Free Software Foundation, either version 3 of the *
* License, or (at your option) any later version. *
* *
* This program is distributed in the hope that it will be useful, *
* but WITHOUT ANY WARRANTY; without even the implied warranty of *
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the *
* GNU Affero General Public License for more details. *
* *
* You should have received a copy of the GNU Affero General Public License *
* along with this program. If not, see <http://www.gnu.org/licenses/>. *
* *
* *
* Additional permission under GNU AGPL version 3 section 7 *
* *
* If you modify this program, or any covered work, by linking or *
* combining it with the OpenSSL project's OpenSSL library (or a *
* modified version of that library), containing parts covered by the *
* terms of the OpenSSL or SSLeay licenses, the authors of PokerTH *
* (Felix Hammer, Florian Thauer, Lothar May) grant you additional *
* permission to convey the resulting work. *
* Corresponding Source for a non-source form of such a combination *
* shall include the source code for the parts of OpenSSL used as well *
* as that of the covered work. *
*****************************************************************************/
#include <boost/bind.hpp>
#include <dbofficial/asyncdbreportgame.h>
#include <dbofficial/dbidmanager.h>
using namespace std;
AsyncDBReportGame::AsyncDBReportGame(unsigned queryId, unsigned replyId, unsigned gameId, const string &preparedName, const list<string> &params)
: SingleAsyncDBQuery(queryId, preparedName, params), m_replyId(replyId), m_gameId(gameId)
{
}
AsyncDBReportGame::~AsyncDBReportGame()
{
}
void
AsyncDBReportGame::Init(DBIdManager& idManager)
{
std::list<std::string> params;
GetParams(params);
ostringstream paramStream;
unsigned tmpGameId = idManager.GetGameDBId(m_gameId);
if (tmpGameId) {
paramStream << idManager.GetGameDBId(m_gameId);
// Add game id as last parameter (where-clause).
params.push_back(paramStream.str());
} else {
params.push_back("NULL");
}
SetParams(params);
}
void
AsyncDBReportGame::HandleResult(mysqlpp::Query &/*query*/, DBIdManager& /*idManager*/, mysqlpp::StoreQueryResult& /*result*/, boost::asio::io_service &service, ServerDBCallback &cb)
{
// This query does not produce a result.
HandleError(service, cb);
}
void
AsyncDBReportGame::HandleNoResult(mysqlpp::Query &/*query*/, DBIdManager& /*idManager*/, boost::asio::io_service &service, ServerDBCallback &cb)
{
service.post(boost::bind(&ServerDBCallback::ReportGameSuccess, &cb, GetId(), m_replyId));
}
void
AsyncDBReportGame::HandleError(boost::asio::io_service &service, ServerDBCallback &cb)
{
service.post(boost::bind(&ServerDBCallback::ReportGameFailed, &cb, GetId(), m_replyId));
}
-61
View File
@@ -1,61 +0,0 @@
/*****************************************************************************
* PokerTH - The open source texas holdem engine *
* Copyright (C) 2006-2016 Felix Hammer, Florian Thauer, Lothar May *
* *
* This program is free software: you can redistribute it and/or modify *
* it under the terms of the GNU Affero General Public License as *
* published by the Free Software Foundation, either version 3 of the *
* License, or (at your option) any later version. *
* *
* This program is distributed in the hope that it will be useful, *
* but WITHOUT ANY WARRANTY; without even the implied warranty of *
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the *
* GNU Affero General Public License for more details. *
* *
* You should have received a copy of the GNU Affero General Public License *
* along with this program. If not, see <http://www.gnu.org/licenses/>. *
* *
* *
* Additional permission under GNU AGPL version 3 section 7 *
* *
* If you modify this program, or any covered work, by linking or *
* combining it with the OpenSSL project's OpenSSL library (or a *
* modified version of that library), containing parts covered by the *
* terms of the OpenSSL or SSLeay licenses, the authors of PokerTH *
* (Felix Hammer, Florian Thauer, Lothar May) grant you additional *
* permission to convey the resulting work. *
* Corresponding Source for a non-source form of such a combination *
* shall include the source code for the parts of OpenSSL used as well *
* as that of the covered work. *
*****************************************************************************/
/* Async database report inappropriate avatar query. */
#ifndef _ASYNCDBREPORTGAME_H_
#define _ASYNCDBREPORTGAME_H_
#include <dbofficial/singleasyncdbquery.h>
class AsyncDBReportGame : public SingleAsyncDBQuery
{
public:
AsyncDBReportGame(unsigned queryId, unsigned replyId, unsigned gameId, const std::string &preparedName, const std::list<std::string> &params);
virtual ~AsyncDBReportGame();
virtual void Init(DBIdManager& idManager);
virtual void HandleResult(mysqlpp::Query &query, DBIdManager& idManager, mysqlpp::StoreQueryResult& result, boost::asio::io_service &service, ServerDBCallback &cb);
virtual void HandleNoResult(mysqlpp::Query &query, DBIdManager& idManager, boost::asio::io_service &service, ServerDBCallback &cb);
virtual void HandleError(boost::asio::io_service &service, ServerDBCallback &cb);
virtual bool RequiresResultSet() const
{
return false;
}
private:
unsigned m_replyId;
unsigned m_gameId;
};
#endif
-80
View File
@@ -1,80 +0,0 @@
/*****************************************************************************
* PokerTH - The open source texas holdem engine *
* Copyright (C) 2006-2016 Felix Hammer, Florian Thauer, Lothar May *
* *
* This program is free software: you can redistribute it and/or modify *
* it under the terms of the GNU Affero General Public License as *
* published by the Free Software Foundation, either version 3 of the *
* License, or (at your option) any later version. *
* *
* This program is distributed in the hope that it will be useful, *
* but WITHOUT ANY WARRANTY; without even the implied warranty of *
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the *
* GNU Affero General Public License for more details. *
* *
* You should have received a copy of the GNU Affero General Public License *
* along with this program. If not, see <http://www.gnu.org/licenses/>. *
* *
* *
* Additional permission under GNU AGPL version 3 section 7 *
* *
* If you modify this program, or any covered work, by linking or *
* combining it with the OpenSSL project's OpenSSL library (or a *
* modified version of that library), containing parts covered by the *
* terms of the OpenSSL or SSLeay licenses, the authors of PokerTH *
* (Felix Hammer, Florian Thauer, Lothar May) grant you additional *
* permission to convey the resulting work. *
* Corresponding Source for a non-source form of such a combination *
* shall include the source code for the parts of OpenSSL used as well *
* as that of the covered work. *
*****************************************************************************/
#include <dbofficial/asyncdbupdatescore.h>
#include <dbofficial/dbidmanager.h>
using namespace std;
AsyncDBUpdateScore::AsyncDBUpdateScore(unsigned queryId, const string &preparedName, const std::list<std::string> &params)
: SingleAsyncDBQuery(queryId, preparedName, params)
{
}
AsyncDBUpdateScore::~AsyncDBUpdateScore()
{
}
void
AsyncDBUpdateScore::Init(DBIdManager& idManager)
{
std::list<std::string> params;
GetParams(params);
ostringstream paramStream;
paramStream << idManager.GetGameDBId(GetId());
// Add game id as first parameter (param for stored procedure).
params.push_front(paramStream.str());
SetParams(params);
// Ensure that "update score" is only called once for a game.
// This game id cannot be used any more, without re-init.
idManager.RemoveGameId(GetId());
}
void
AsyncDBUpdateScore::HandleResult(mysqlpp::Query &/*query*/, DBIdManager& /*idManager*/, mysqlpp::StoreQueryResult& /*result*/, boost::asio::io_service &service, ServerDBCallback &cb)
{
// This query does not produce a result.
HandleError(service, cb);
}
void
AsyncDBUpdateScore::HandleNoResult(mysqlpp::Query &/*query*/, DBIdManager& idManager, boost::asio::io_service &/*service*/, ServerDBCallback &/*cb*/)
{
idManager.RemoveGameId(GetId());
}
void
AsyncDBUpdateScore::HandleError(boost::asio::io_service &/*service*/, ServerDBCallback &/*cb*/)
{
// Ignore errors for now (as nothing important is done).
}
-57
View File
@@ -1,57 +0,0 @@
/*****************************************************************************
* PokerTH - The open source texas holdem engine *
* Copyright (C) 2006-2016 Felix Hammer, Florian Thauer, Lothar May *
* *
* This program is free software: you can redistribute it and/or modify *
* it under the terms of the GNU Affero General Public License as *
* published by the Free Software Foundation, either version 3 of the *
* License, or (at your option) any later version. *
* *
* This program is distributed in the hope that it will be useful, *
* but WITHOUT ANY WARRANTY; without even the implied warranty of *
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the *
* GNU Affero General Public License for more details. *
* *
* You should have received a copy of the GNU Affero General Public License *
* along with this program. If not, see <http://www.gnu.org/licenses/>. *
* *
* *
* Additional permission under GNU AGPL version 3 section 7 *
* *
* If you modify this program, or any covered work, by linking or *
* combining it with the OpenSSL project's OpenSSL library (or a *
* modified version of that library), containing parts covered by the *
* terms of the OpenSSL or SSLeay licenses, the authors of PokerTH *
* (Felix Hammer, Florian Thauer, Lothar May) grant you additional *
* permission to convey the resulting work. *
* Corresponding Source for a non-source form of such a combination *
* shall include the source code for the parts of OpenSSL used as well *
* as that of the covered work. *
*****************************************************************************/
/* Async database query to update the score. */
#ifndef _ASYNCDBUPDATESCORE_H_
#define _ASYNCDBUPDATESCORE_H_
#include <dbofficial/singleasyncdbquery.h>
class AsyncDBUpdateScore : public SingleAsyncDBQuery
{
public:
AsyncDBUpdateScore(unsigned queryId, const std::string &preparedName, const std::list<std::string> &params);
virtual ~AsyncDBUpdateScore();
virtual void Init(DBIdManager& idManager);
virtual void HandleResult(mysqlpp::Query &query, DBIdManager& idManager, mysqlpp::StoreQueryResult& result, boost::asio::io_service &service, ServerDBCallback &cb);
virtual void HandleNoResult(mysqlpp::Query &query, DBIdManager& idManager, boost::asio::io_service &service, ServerDBCallback &cb);
virtual void HandleError(boost::asio::io_service &service, ServerDBCallback &cb);
virtual bool RequiresResultSet() const
{
return false;
}
};
#endif
-120
View File
@@ -1,120 +0,0 @@
/*****************************************************************************
* PokerTH - The open source texas holdem engine *
* Copyright (C) 2006-2016 Felix Hammer, Florian Thauer, Lothar May *
* *
* This program is free software: you can redistribute it and/or modify *
* it under the terms of the GNU Affero General Public License as *
* published by the Free Software Foundation, either version 3 of the *
* License, or (at your option) any later version. *
* *
* This program is distributed in the hope that it will be useful, *
* but WITHOUT ANY WARRANTY; without even the implied warranty of *
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the *
* GNU Affero General Public License for more details. *
* *
* You should have received a copy of the GNU Affero General Public License *
* along with this program. If not, see <http://www.gnu.org/licenses/>. *
* *
* *
* Additional permission under GNU AGPL version 3 section 7 *
* *
* If you modify this program, or any covered work, by linking or *
* combining it with the OpenSSL project's OpenSSL library (or a *
* modified version of that library), containing parts covered by the *
* terms of the OpenSSL or SSLeay licenses, the authors of PokerTH *
* (Felix Hammer, Florian Thauer, Lothar May) grant you additional *
* permission to convey the resulting work. *
* Corresponding Source for a non-source form of such a combination *
* shall include the source code for the parts of OpenSSL used as well *
* as that of the covered work. *
*****************************************************************************/
#include <dbofficial/compositeasyncdbquery.h>
using namespace std;
CompositeAsyncDBQuery::CompositeAsyncDBQuery(const AsyncQueryList &queries)
: m_list(queries), m_errorFlag(false), m_lastGameDBId(0)
{
m_currentQuery = m_list.begin();
}
CompositeAsyncDBQuery::~CompositeAsyncDBQuery()
{
}
void
CompositeAsyncDBQuery::Init(DBIdManager& idManager)
{
(*m_currentQuery)->Init(idManager);
}
std::string
CompositeAsyncDBQuery::GetPreparedName() const
{
return (*m_currentQuery)->GetPreparedName();
}
void
CompositeAsyncDBQuery::GetParams(std::list<std::string> &params) const
{
(*m_currentQuery)->GetParams(params);
}
void
CompositeAsyncDBQuery::SetParams(const std::list<std::string> &params)
{
(*m_currentQuery)->SetParams(params);
}
void
CompositeAsyncDBQuery::HandleResult(mysqlpp::Query &query, DBIdManager& idManager, mysqlpp::StoreQueryResult& result, boost::asio::io_service &service, ServerDBCallback &cb)
{
(*m_currentQuery)->HandleResult(query, idManager, result, service, cb);
}
void
CompositeAsyncDBQuery::HandleNoResult(mysqlpp::Query &query, DBIdManager& idManager, boost::asio::io_service &service, ServerDBCallback &cb)
{
(*m_currentQuery)->HandleNoResult(query, idManager, service, cb);
}
void
CompositeAsyncDBQuery::HandleError(boost::asio::io_service &service, ServerDBCallback &cb)
{
(*m_currentQuery)->HandleError(service, cb);
m_errorFlag = true;
}
bool
CompositeAsyncDBQuery::RequiresResultSet() const
{
return (*m_currentQuery)->RequiresResultSet();
}
bool
CompositeAsyncDBQuery::Next()
{
bool retVal = false;
AsyncQueryList::iterator pos = m_currentQuery;
++pos;
if (!m_errorFlag && pos != m_list.end()) {
m_currentQuery = pos;
retVal = true;
}
return retVal;
}
unsigned
CompositeAsyncDBQuery::GetLastGameDBId() const
{
return m_lastGameDBId;
}
void
CompositeAsyncDBQuery::SetLastGameDBId(unsigned id)
{
m_lastGameDBId = id;
}
-72
View File
@@ -1,72 +0,0 @@
/*****************************************************************************
* PokerTH - The open source texas holdem engine *
* Copyright (C) 2006-2016 Felix Hammer, Florian Thauer, Lothar May *
* *
* This program is free software: you can redistribute it and/or modify *
* it under the terms of the GNU Affero General Public License as *
* published by the Free Software Foundation, either version 3 of the *
* License, or (at your option) any later version. *
* *
* This program is distributed in the hope that it will be useful, *
* but WITHOUT ANY WARRANTY; without even the implied warranty of *
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the *
* GNU Affero General Public License for more details. *
* *
* You should have received a copy of the GNU Affero General Public License *
* along with this program. If not, see <http://www.gnu.org/licenses/>. *
* *
* *
* Additional permission under GNU AGPL version 3 section 7 *
* *
* If you modify this program, or any covered work, by linking or *
* combining it with the OpenSSL project's OpenSSL library (or a *
* modified version of that library), containing parts covered by the *
* terms of the OpenSSL or SSLeay licenses, the authors of PokerTH *
* (Felix Hammer, Florian Thauer, Lothar May) grant you additional *
* permission to convey the resulting work. *
* Corresponding Source for a non-source form of such a combination *
* shall include the source code for the parts of OpenSSL used as well *
* as that of the covered work. *
*****************************************************************************/
/* Composite async database query. */
#ifndef _COMPOSITEASYNCDBQUERY_H_
#define _COMPOSITEASYNCDBQUERY_H_
#include <dbofficial/asyncdbquery.h>
#include <dbofficial/querycontext.h>
class CompositeAsyncDBQuery : public AsyncDBQuery, public QueryContext
{
public:
typedef std::list<boost::shared_ptr<AsyncDBQuery> > AsyncQueryList;
// Note: This list must contain at least one query.
CompositeAsyncDBQuery(const AsyncQueryList &queries);
virtual ~CompositeAsyncDBQuery();
virtual void Init(DBIdManager& idManager);
virtual std::string GetPreparedName() const;
virtual void GetParams(std::list<std::string> &params) const;
virtual void SetParams(const std::list<std::string> &params);
virtual void HandleResult(mysqlpp::Query &query, DBIdManager& idManager, mysqlpp::StoreQueryResult& result, boost::asio::io_service &service, ServerDBCallback &cb);
virtual void HandleNoResult(mysqlpp::Query &query, DBIdManager& idManager, boost::asio::io_service &service, ServerDBCallback &cb);
// One error will cancel the rest of the composite query.
virtual void HandleError(boost::asio::io_service &service, ServerDBCallback &cb);
virtual bool RequiresResultSet() const;
virtual bool Next();
virtual unsigned GetLastGameDBId() const;
virtual void SetLastGameDBId(unsigned id);
private:
AsyncQueryList m_list;
AsyncQueryList::iterator m_currentQuery;
bool m_errorFlag;
unsigned m_lastGameDBId;
};
#endif
-80
View File
@@ -1,80 +0,0 @@
/*****************************************************************************
* PokerTH - The open source texas holdem engine *
* Copyright (C) 2006-2016 Felix Hammer, Florian Thauer, Lothar May *
* *
* This program is free software: you can redistribute it and/or modify *
* it under the terms of the GNU Affero General Public License as *
* published by the Free Software Foundation, either version 3 of the *
* License, or (at your option) any later version. *
* *
* This program is distributed in the hope that it will be useful, *
* but WITHOUT ANY WARRANTY; without even the implied warranty of *
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the *
* GNU Affero General Public License for more details. *
* *
* You should have received a copy of the GNU Affero General Public License *
* along with this program. If not, see <http://www.gnu.org/licenses/>. *
* *
* *
* Additional permission under GNU AGPL version 3 section 7 *
* *
* If you modify this program, or any covered work, by linking or *
* combining it with the OpenSSL project's OpenSSL library (or a *
* modified version of that library), containing parts covered by the *
* terms of the OpenSSL or SSLeay licenses, the authors of PokerTH *
* (Felix Hammer, Florian Thauer, Lothar May) grant you additional *
* permission to convey the resulting work. *
* Corresponding Source for a non-source form of such a combination *
* shall include the source code for the parts of OpenSSL used as well *
* as that of the covered work. *
*****************************************************************************/
#ifndef _DB_TABLE_DEFS_H_
#define _DB_TABLE_DEFS_H_
#define DB_TABLE_PLAYER "player"
#define DB_TABLE_PLAYER_COL_ID "player_id"
#define DB_TABLE_PLAYER_COL_USERNAME "username"
#define DB_TABLE_PLAYER_COL_PASSWORD "password"
#define DB_TABLE_PLAYER_COL_VALID "blocked"
#define DB_TABLE_PLAYER_COL_COUNTRY "country_iso"
#define DB_TABLE_PLAYER_COL_LASTLOGIN "last_login"
#define DB_TABLE_PLAYER_COL_ACTIVE "active"
#define DB_TABLE_PLAYER_COL_AVATARHASH "avatar_hash"
#define DB_TABLE_PLAYER_COL_AVATARTYPE "avatar_mime"
#define DB_TABLE_PLAYER_COL_LASTGAMES "last_games"
#define DB_TABLE_PLAYER_COL_LASTIP "last_ip"
#define DB_TABLE_GAME "game"
#define DB_TABLE_GAME_COL_ID "idgame"
#define DB_TABLE_GAME_COL_NAME "name"
#define DB_TABLE_GAME_COL_STARTTIME "start_time"
#define DB_TABLE_GAME_COL_ENDTIME "end_time"
#define DB_TABLE_GAMEPLAYER "game_has_player"
#define DB_TABLE_GAMEPLAYER_COL_GAMEID "game_idgame"
#define DB_TABLE_GAMEPLAYER_COL_PLAYERID "player_idplayer"
#define DB_TABLE_GAMEPLAYER_COL_PLACE "place"
#define DB_TABLE_REP_AVATAR "reported_avatar"
#define DB_TABLE_REP_AVATAR_COL_PLAYERID "idplayer"
#define DB_TABLE_REP_AVATAR_COL_AVATARHASH "avatar_hash"
#define DB_TABLE_REP_AVATAR_COL_AVATARTYPE "avatar_type"
#define DB_TABLE_REP_AVATAR_COL_BY_PLAYERID "by_idplayer"
#define DB_TABLE_REP_AVATAR_COL_TIMESTAMP "timestamp"
#define DB_TABLE_REP_GAME "reported_gamename"
#define DB_TABLE_REP_GAME_COL_CREATOR "game_creator_idplayer"
#define DB_TABLE_REP_GAME_COL_GAMEID "game_idgame"
#define DB_TABLE_REP_GAME_COL_GAMENAME "game_name"
#define DB_TABLE_REP_GAME_COL_BY_PLAYERID "by_idplayer"
#define DB_TABLE_REP_GAME_COL_TIMESTAMP "timestamp"
#define DB_TABLE_AVATAR_BLACKLIST "avatar_blacklist"
#define DB_TABLE_AVATAR_BLACKLIST_COL_ID "id"
#define DB_TABLE_AVATAR_BLACKLIST_COL_AVATAR_HASH "avatar_hash"
#define DB_TABLE_ADMIN_PLAYER "admin_player"
#define DB_TABLE_ADMIN_PLAYER_COL_PLAYERID "admin_idplayer"
#endif // DB_TABLE_DEFS_H
-61
View File
@@ -1,61 +0,0 @@
/*****************************************************************************
* PokerTH - The open source texas holdem engine *
* Copyright (C) 2006-2016 Felix Hammer, Florian Thauer, Lothar May *
* *
* This program is free software: you can redistribute it and/or modify *
* it under the terms of the GNU Affero General Public License as *
* published by the Free Software Foundation, either version 3 of the *
* License, or (at your option) any later version. *
* *
* This program is distributed in the hope that it will be useful, *
* but WITHOUT ANY WARRANTY; without even the implied warranty of *
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the *
* GNU Affero General Public License for more details. *
* *
* You should have received a copy of the GNU Affero General Public License *
* along with this program. If not, see <http://www.gnu.org/licenses/>. *
* *
* *
* Additional permission under GNU AGPL version 3 section 7 *
* *
* If you modify this program, or any covered work, by linking or *
* combining it with the OpenSSL project's OpenSSL library (or a *
* modified version of that library), containing parts covered by the *
* terms of the OpenSSL or SSLeay licenses, the authors of PokerTH *
* (Felix Hammer, Florian Thauer, Lothar May) grant you additional *
* permission to convey the resulting work. *
* Corresponding Source for a non-source form of such a combination *
* shall include the source code for the parts of OpenSSL used as well *
* as that of the covered work. *
*****************************************************************************/
#include <dbofficial/dbidmanager.h>
void
DBIdManager::AddGameId(unsigned gameId, DB_id databaseId)
{
boost::mutex::scoped_lock lock(m_gameIdMapMutex);
m_gameIdMap[gameId] = databaseId;
}
void
DBIdManager::RemoveGameId(unsigned gameId)
{
boost::mutex::scoped_lock lock(m_gameIdMapMutex);
m_gameIdMap.erase(gameId);
}
DB_id
DBIdManager::GetGameDBId(unsigned gameId) const
{
DB_id retVal = DB_ID_INVALID;
boost::mutex::scoped_lock lock(m_gameIdMapMutex);
DBMap::const_iterator pos = m_gameIdMap.find(gameId);
if (pos != m_gameIdMap.end()) {
retVal = pos->second;
}
return retVal;
}
-56
View File
@@ -1,56 +0,0 @@
/*****************************************************************************
* PokerTH - The open source texas holdem engine *
* Copyright (C) 2006-2016 Felix Hammer, Florian Thauer, Lothar May *
* *
* This program is free software: you can redistribute it and/or modify *
* it under the terms of the GNU Affero General Public License as *
* published by the Free Software Foundation, either version 3 of the *
* License, or (at your option) any later version. *
* *
* This program is distributed in the hope that it will be useful, *
* but WITHOUT ANY WARRANTY; without even the implied warranty of *
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the *
* GNU Affero General Public License for more details. *
* *
* You should have received a copy of the GNU Affero General Public License *
* along with this program. If not, see <http://www.gnu.org/licenses/>. *
* *
* *
* Additional permission under GNU AGPL version 3 section 7 *
* *
* If you modify this program, or any covered work, by linking or *
* combining it with the OpenSSL project's OpenSSL library (or a *
* modified version of that library), containing parts covered by the *
* terms of the OpenSSL or SSLeay licenses, the authors of PokerTH *
* (Felix Hammer, Florian Thauer, Lothar May) grant you additional *
* permission to convey the resulting work. *
* Corresponding Source for a non-source form of such a combination *
* shall include the source code for the parts of OpenSSL used as well *
* as that of the covered work. *
*****************************************************************************/
/* Manager for database internal ids */
#ifndef _DBIDMANAGER_H_
#define _DBIDMANAGER_H_
#include <db/dbdefs.h>
#include <boost/thread.hpp>
#include <map>
class DBIdManager
{
public:
void AddGameId(unsigned gameId, DB_id databaseId);
void RemoveGameId(unsigned gameId);
DB_id GetGameDBId(unsigned gameId) const;
protected:
typedef std::map<unsigned, DB_id> DBMap;
private:
DBMap m_gameIdMap;
mutable boost::mutex m_gameIdMapMutex;
};
#endif // _DBIDMANAGER_H_
-36
View File
@@ -1,36 +0,0 @@
/*****************************************************************************
* PokerTH - The open source texas holdem engine *
* Copyright (C) 2006-2016 Felix Hammer, Florian Thauer, Lothar May *
* *
* This program is free software: you can redistribute it and/or modify *
* it under the terms of the GNU Affero General Public License as *
* published by the Free Software Foundation, either version 3 of the *
* License, or (at your option) any later version. *
* *
* This program is distributed in the hope that it will be useful, *
* but WITHOUT ANY WARRANTY; without even the implied warranty of *
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the *
* GNU Affero General Public License for more details. *
* *
* You should have received a copy of the GNU Affero General Public License *
* along with this program. If not, see <http://www.gnu.org/licenses/>. *
* *
* *
* Additional permission under GNU AGPL version 3 section 7 *
* *
* If you modify this program, or any covered work, by linking or *
* combining it with the OpenSSL project's OpenSSL library (or a *
* modified version of that library), containing parts covered by the *
* terms of the OpenSSL or SSLeay licenses, the authors of PokerTH *
* (Felix Hammer, Florian Thauer, Lothar May) grant you additional *
* permission to convey the resulting work. *
* Corresponding Source for a non-source form of such a combination *
* shall include the source code for the parts of OpenSSL used as well *
* as that of the covered work. *
*****************************************************************************/
#include <dbofficial/querycontext.h>
QueryContext::~QueryContext()
{
}
-45
View File
@@ -1,45 +0,0 @@
/*****************************************************************************
* PokerTH - The open source texas holdem engine *
* Copyright (C) 2006-2016 Felix Hammer, Florian Thauer, Lothar May *
* *
* This program is free software: you can redistribute it and/or modify *
* it under the terms of the GNU Affero General Public License as *
* published by the Free Software Foundation, either version 3 of the *
* License, or (at your option) any later version. *
* *
* This program is distributed in the hope that it will be useful, *
* but WITHOUT ANY WARRANTY; without even the implied warranty of *
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the *
* GNU Affero General Public License for more details. *
* *
* You should have received a copy of the GNU Affero General Public License *
* along with this program. If not, see <http://www.gnu.org/licenses/>. *
* *
* *
* Additional permission under GNU AGPL version 3 section 7 *
* *
* If you modify this program, or any covered work, by linking or *
* combining it with the OpenSSL project's OpenSSL library (or a *
* modified version of that library), containing parts covered by the *
* terms of the OpenSSL or SSLeay licenses, the authors of PokerTH *
* (Felix Hammer, Florian Thauer, Lothar May) grant you additional *
* permission to convey the resulting work. *
* Corresponding Source for a non-source form of such a combination *
* shall include the source code for the parts of OpenSSL used as well *
* as that of the covered work. *
*****************************************************************************/
/* Interface for a query context */
#ifndef _QUERYCONTEXT_H_
#define _QUERYCONTEXT_H_
class QueryContext
{
public:
virtual ~QueryContext();
virtual unsigned GetLastGameDBId() const = 0;
virtual void SetLastGameDBId(unsigned id) = 0;
};
#endif // QUERYCONTEXT_H
@@ -1,48 +0,0 @@
/*****************************************************************************
* PokerTH - The open source texas holdem engine *
* Copyright (C) 2006-2016 Felix Hammer, Florian Thauer, Lothar May *
* *
* This program is free software: you can redistribute it and/or modify *
* it under the terms of the GNU Affero General Public License as *
* published by the Free Software Foundation, either version 3 of the *
* License, or (at your option) any later version. *
* *
* This program is distributed in the hope that it will be useful, *
* but WITHOUT ANY WARRANTY; without even the implied warranty of *
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the *
* GNU Affero General Public License for more details. *
* *
* You should have received a copy of the GNU Affero General Public License *
* along with this program. If not, see <http://www.gnu.org/licenses/>. *
* *
* *
* Additional permission under GNU AGPL version 3 section 7 *
* *
* If you modify this program, or any covered work, by linking or *
* combining it with the OpenSSL project's OpenSSL library (or a *
* modified version of that library), containing parts covered by the *
* terms of the OpenSSL or SSLeay licenses, the authors of PokerTH *
* (Felix Hammer, Florian Thauer, Lothar May) grant you additional *
* permission to convey the resulting work. *
* Corresponding Source for a non-source form of such a combination *
* shall include the source code for the parts of OpenSSL used as well *
* as that of the covered work. *
*****************************************************************************/
#include <dbofficial/serverdbfactoryinternal.h>
#include <dbofficial/serverdbthread.h>
ServerDBFactoryInternal::ServerDBFactoryInternal()
{
}
ServerDBFactoryInternal::~ServerDBFactoryInternal()
{
}
boost::shared_ptr<ServerDBInterface>
ServerDBFactoryInternal::CreateServerDBObject(ServerDBCallback &cb, boost::shared_ptr<boost::asio::io_service> ioService)
{
return boost::shared_ptr<ServerDBInterface>(new ServerDBThread(cb, ioService));
}
-53
View File
@@ -1,53 +0,0 @@
/*****************************************************************************
* PokerTH - The open source texas holdem engine *
* Copyright (C) 2006-2016 Felix Hammer, Florian Thauer, Lothar May *
* *
* This program is free software: you can redistribute it and/or modify *
* it under the terms of the GNU Affero General Public License as *
* published by the Free Software Foundation, either version 3 of the *
* License, or (at your option) any later version. *
* *
* This program is distributed in the hope that it will be useful, *
* but WITHOUT ANY WARRANTY; without even the implied warranty of *
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the *
* GNU Affero General Public License for more details. *
* *
* You should have received a copy of the GNU Affero General Public License *
* along with this program. If not, see <http://www.gnu.org/licenses/>. *
* *
* *
* Additional permission under GNU AGPL version 3 section 7 *
* *
* If you modify this program, or any covered work, by linking or *
* combining it with the OpenSSL project's OpenSSL library (or a *
* modified version of that library), containing parts covered by the *
* terms of the OpenSSL or SSLeay licenses, the authors of PokerTH *
* (Felix Hammer, Florian Thauer, Lothar May) grant you additional *
* permission to convey the resulting work. *
* Corresponding Source for a non-source form of such a combination *
* shall include the source code for the parts of OpenSSL used as well *
* as that of the covered work. *
*****************************************************************************/
/* Server database factory for closed source db objects. */
#ifndef _SERVERDBFACTORYINTERNAL_H_
#define _SERVERDBFACTORYINTERNAL_H_
#include <boost/asio.hpp>
#include <boost/shared_ptr.hpp>
#include <db/serverdbinterface.h>
#include <db/serverdbcallback.h>
class ServerDBFactoryInternal
{
public:
ServerDBFactoryInternal();
virtual ~ServerDBFactoryInternal();
virtual boost::shared_ptr<ServerDBInterface> CreateServerDBObject(
ServerDBCallback &cb, boost::shared_ptr<boost::asio::io_service> ioService);
};
typedef ServerDBFactoryInternal DBFactory;
#endif
-603
View File
@@ -1,603 +0,0 @@
/*****************************************************************************
* PokerTH - The open source texas holdem engine *
* Copyright (C) 2006-2016 Felix Hammer, Florian Thauer, Lothar May *
* *
* This program is free software: you can redistribute it and/or modify *
* it under the terms of the GNU Affero General Public License as *
* published by the Free Software Foundation, either version 3 of the *
* License, or (at your option) any later version. *
* *
* This program is distributed in the hope that it will be useful, *
* but WITHOUT ANY WARRANTY; without even the implied warranty of *
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the *
* GNU Affero General Public License for more details. *
* *
* You should have received a copy of the GNU Affero General Public License *
* along with this program. If not, see <http://www.gnu.org/licenses/>. *
* *
* *
* Additional permission under GNU AGPL version 3 section 7 *
* *
* If you modify this program, or any covered work, by linking or *
* combining it with the OpenSSL project's OpenSSL library (or a *
* modified version of that library), containing parts covered by the *
* terms of the OpenSSL or SSLeay licenses, the authors of PokerTH *
* (Felix Hammer, Florian Thauer, Lothar May) grant you additional *
* permission to convey the resulting work. *
* Corresponding Source for a non-source form of such a combination *
* shall include the source code for the parts of OpenSSL used as well *
* as that of the covered work. *
*****************************************************************************/
#include <dbofficial/serverdbthread.h>
#include <dbofficial/asyncdbauth.h>
#include <dbofficial/asyncdblogin.h>
#include <dbofficial/asyncdbavatarblacklist.h>
#include <dbofficial/asyncdbcreategame.h>
#include <dbofficial/asyncdbendgame.h>
#include <dbofficial/asyncdbgameplace.h>
#include <dbofficial/asyncdbupdatescore.h>
#include <dbofficial/asyncdbreportavatar.h>
#include <dbofficial/asyncdbreportgame.h>
#include <dbofficial/asyncdbadminplayers.h>
#include <dbofficial/asyncdbblockplayer.h>
#include <dbofficial/asyncdbplayerlastgames.h>
#include <dbofficial/compositeasyncdbquery.h>
#include <dbofficial/db_table_defs.h>
#include <ctime>
#include <sstream>
#include <mysql++.h>
#include <core/loghelper.h> // @TODO: remove in productive
#define QUERY_NICK_PREPARE "nick_template"
#define QUERY_LOGIN_PREPARE "login_template"
#define QUERY_AVATAR_BLACKLIST_PREPARE "avatar_blacklist_template"
#define QUERY_CREATE_GAME_PREPARE "create_game_template"
#define QUERY_END_GAME_PREPARE "end_game_template"
#define QUERY_GAME_PLAYER_PREPARE "game_player_template"
#define QUERY_UPDATE_SCORE_PREPARE "update_score_template"
#define QUERY_REPORT_AVATAR_PREPARE "report_avatar_template"
#define QUERY_REPORT_GAME_PREPARE "report_game_template"
#define QUERY_ADMIN_PLAYER_PREPARE "admin_player_template"
#define QUERY_BLOCK_PLAYER_PREPARE "block_player_template"
#define QUERY_PLAYER_LASTGAMES_PREPARE "player_lastgames_template"
using namespace std;
struct DBConnectionData {
DBConnectionData() : conn(false) {}
string host;
string user;
string pwd;
string database;
string encryptionKey;
mysqlpp::Connection conn;
};
ServerDBThread::ServerDBThread(ServerDBCallback &cb, boost::shared_ptr<boost::asio::io_service> ioService)
: m_ioService(ioService), m_semaphore(0), m_callback(cb), m_isConnected(false), m_permanentError(false), m_previouslyConnected(false)
{
m_connData.reset(new DBConnectionData);
}
ServerDBThread::~ServerDBThread()
{
}
void
ServerDBThread::SignalTermination()
{
Thread::SignalTermination();
m_semaphore.post();
}
void
ServerDBThread::Init(const string &host, const string &user, const string &pwd,
const string &database, const string &encryptionKey)
{
m_connData->host = host;
m_connData->user = user;
m_connData->pwd = pwd;
m_connData->database = database;
m_connData->encryptionKey = encryptionKey;
}
void
ServerDBThread::Start()
{
Run();
}
void
ServerDBThread::Stop()
{
SignalTermination();
this->Join(THREAD_WAIT_INFINITE);
}
void
ServerDBThread::AsyncPlayerLogin(unsigned requestId, const string &playerName)
{
if (IsConnected()) {
list<string> params;
params.push_back(m_connData->encryptionKey);
params.push_back(playerName);
boost::shared_ptr<AsyncDBQuery> asyncQuery(
new AsyncDBAuth(
requestId,
QUERY_NICK_PREPARE,
params));
{
boost::mutex::scoped_lock lock(m_asyncQueueMutex);
m_asyncQueue.push(asyncQuery);
}
m_semaphore.post();
} else {
// If not connected to database, login fails.
m_ioService->post(boost::bind(&ServerDBCallback::PlayerLoginFailed, &m_callback, requestId));
}
}
void
ServerDBThread::AsyncCheckAvatarBlacklist(unsigned requestId, const std::string &avatarHash)
{
if (IsConnected()) {
list<string> params;
params.push_back(avatarHash);
boost::shared_ptr<AsyncDBQuery> asyncQuery(
new AsyncDBAvatarBlacklist(
requestId,
QUERY_AVATAR_BLACKLIST_PREPARE,
params));
{
boost::mutex::scoped_lock lock(m_asyncQueueMutex);
m_asyncQueue.push(asyncQuery);
}
m_semaphore.post();
} else {
// If not connected to database, all avatars are blacklisted.
m_ioService->post(boost::bind(&ServerDBCallback::AvatarIsBlacklisted, &m_callback, requestId));
}
}
void
ServerDBThread::PlayerPostLogin(DB_id playerId, const std::string &avatarHash, const std::string &avatarType)
{
list<string> params;
params.push_back(mysqlpp::DateTime(time(NULL)));
params.push_back(avatarHash);
params.push_back(avatarType);
ostringstream paramStream;
paramStream << playerId;
params.push_back(paramStream.str());
boost::shared_ptr<AsyncDBQuery> asyncQuery(
new AsyncDBLogin(
playerId,
QUERY_LOGIN_PREPARE,
params));
{
boost::mutex::scoped_lock lock(m_asyncQueueMutex);
m_asyncQueue.push(asyncQuery);
}
m_semaphore.post();
}
void
ServerDBThread::PlayerLogout(DB_id /*playerId*/)
{
}
void
ServerDBThread::AsyncCreateGame(unsigned requestId, const string &gameName)
{
list<string> params;
params.push_back(gameName);
params.push_back(mysqlpp::DateTime(time(NULL)));
boost::shared_ptr<AsyncDBQuery> asyncQuery(
new AsyncDBCreateGame(
requestId,
QUERY_CREATE_GAME_PREPARE,
params));
{
boost::mutex::scoped_lock lock(m_asyncQueueMutex);
m_asyncQueue.push(asyncQuery);
}
m_semaphore.post();
}
void
ServerDBThread::SetGamePlayerPlace(unsigned requestId, DB_id playerId, unsigned place)
{
// The game id param is added later (during init of the async op), because it may be unknown.
list<string> params;
ostringstream paramStream;
paramStream << playerId;
params.push_back(paramStream.str());
paramStream.str("");
paramStream << place;
params.push_back(paramStream.str());
boost::shared_ptr<AsyncDBQuery> asyncQuery(
new AsyncDBGamePlace(
requestId,
QUERY_GAME_PLAYER_PREPARE,
params));
{
boost::mutex::scoped_lock lock(m_asyncQueueMutex);
m_asyncQueue.push(asyncQuery);
}
m_semaphore.post();
}
void
ServerDBThread::SetPlayerLastGames(unsigned requestId, DB_id playerId, std::vector<long> last_games, std::string playerIp)
{
LOG_ERROR("ServerDBThread::SetPlayerLastGames() entered.");
std::ostringstream oss;
std::copy(last_games.begin(), last_games.end(), std::ostream_iterator<int>(oss, ","));
std::string last_gamesFieldValue( oss.str() );
list<string> params;
ostringstream paramStream;
params.push_back(last_gamesFieldValue);
params.push_back(playerIp);
paramStream << playerId;
params.push_back(paramStream.str());
boost::shared_ptr<AsyncDBQuery> asyncQuery(
new AsyncDBPlayerLastGames(
requestId,
QUERY_PLAYER_LASTGAMES_PREPARE,
params));
{
boost::mutex::scoped_lock lock(m_asyncQueueMutex);
m_asyncQueue.push(asyncQuery);
}
LOG_ERROR("Query posted.");
m_semaphore.post();
}
void
ServerDBThread::EndGame(unsigned requestId)
{
// Set the end time of the game.
{
list<string> params;
params.push_back(mysqlpp::DateTime(time(NULL)));
boost::shared_ptr<AsyncDBQuery> asyncQuery(
new AsyncDBEndGame(
requestId,
QUERY_END_GAME_PREPARE,
params));
{
boost::mutex::scoped_lock lock(m_asyncQueueMutex);
m_asyncQueue.push(asyncQuery);
}
m_semaphore.post();
}
// Update the player scores.
{
list<string> params;
boost::shared_ptr<AsyncDBQuery> asyncQuery(
new AsyncDBUpdateScore(
requestId,
QUERY_UPDATE_SCORE_PREPARE,
params));
{
boost::mutex::scoped_lock lock(m_asyncQueueMutex);
m_asyncQueue.push(asyncQuery);
}
m_semaphore.post();
}
}
void
ServerDBThread::AsyncReportAvatar(unsigned requestId, unsigned replyId, DB_id reportedPlayerId, const std::string &avatarHash, const std::string &avatarType, DB_id *byPlayerId)
{
list<string> params;
ostringstream paramStream;
paramStream << reportedPlayerId;
params.push_back(paramStream.str());
params.push_back(avatarHash);
params.push_back(avatarType);
if (byPlayerId) {
paramStream.str("");
paramStream << *byPlayerId;
params.push_back(paramStream.str());
} else {
params.push_back("NULL");
}
params.push_back(mysqlpp::DateTime(time(NULL)));
boost::shared_ptr<AsyncDBQuery> asyncQuery(
new AsyncDBReportAvatar(
requestId,
replyId,
QUERY_REPORT_AVATAR_PREPARE,
params));
{
boost::mutex::scoped_lock lock(m_asyncQueueMutex);
m_asyncQueue.push(asyncQuery);
}
m_semaphore.post();
}
void
ServerDBThread::AsyncReportGame(unsigned requestId, unsigned replyId, DB_id *creatorPlayerId, unsigned gameId, const std::string &gameName, DB_id *byPlayerId)
{
list<string> params;
ostringstream paramStream;
if (creatorPlayerId) {
paramStream << *creatorPlayerId;
params.push_back(paramStream.str());
} else {
params.push_back("NULL");
}
params.push_back(gameName);
if (byPlayerId) {
paramStream.str("");
paramStream << *byPlayerId;
params.push_back(paramStream.str());
} else {
params.push_back("NULL");
}
params.push_back(mysqlpp::DateTime(time(NULL)));
boost::shared_ptr<AsyncDBQuery> asyncQuery(
new AsyncDBReportGame(
requestId,
replyId,
gameId,
QUERY_REPORT_GAME_PREPARE,
params));
{
boost::mutex::scoped_lock lock(m_asyncQueueMutex);
m_asyncQueue.push(asyncQuery);
}
m_semaphore.post();
}
void
ServerDBThread::AsyncQueryAdminPlayers(unsigned requestId)
{
boost::shared_ptr<AsyncDBQuery> asyncQuery(
new AsyncDBAdminPlayers(
requestId,
QUERY_ADMIN_PLAYER_PREPARE));
{
boost::mutex::scoped_lock lock(m_asyncQueueMutex);
m_asyncQueue.push(asyncQuery);
}
m_semaphore.post();
}
void
ServerDBThread::AsyncBlockPlayer(unsigned requestId, unsigned replyId, DB_id playerId, int valid, int active)
{
list<string> params;
ostringstream paramStream;
paramStream << valid;
params.push_back(paramStream.str());
paramStream.str("");
paramStream << active;
params.push_back(paramStream.str());
paramStream.str("");
paramStream << playerId;
params.push_back(paramStream.str());
boost::shared_ptr<AsyncDBQuery> asyncQuery(
new AsyncDBBlockPlayer(
requestId,
replyId,
QUERY_BLOCK_PLAYER_PREPARE,
params));
{
boost::mutex::scoped_lock lock(m_asyncQueueMutex);
m_asyncQueue.push(asyncQuery);
}
m_semaphore.post();
}
bool
ServerDBThread::IsConnected() const
{
boost::mutex::scoped_lock lock(m_isConnectedMutex);
return m_isConnected;
}
void
ServerDBThread::Main()
{
while (!ShouldTerminate() && !HasPermanentError()) {
if (HasDBConnection()) {
SetConnected(true);
m_semaphore.wait();
HandleNextQuery();
} else {
SetConnected(false);
EstablishDBConnection();
}
}
m_connData->conn.disconnect();
}
bool
ServerDBThread::HasPermanentError() const
{
return m_permanentError;
}
bool
ServerDBThread::HasDBConnection() const
{
return m_connData->conn.connected();
}
void
ServerDBThread::EstablishDBConnection()
{
m_connData->conn.set_option(new mysqlpp::SetCharsetNameOption("utf8"));
if (!m_connData->conn.connect(
m_connData->database.c_str(), m_connData->host.c_str(), m_connData->user.c_str(), m_connData->pwd.c_str())) {
m_ioService->post(boost::bind(&ServerDBCallback::ConnectFailed, &m_callback, m_connData->conn.error()));
if (!m_previouslyConnected)
m_permanentError = true;
else
Msleep(250);
} else {
mysqlpp::Query prepareNick = m_connData->conn.query();
/*
prepareNick
<< "PREPARE " QUERY_NICK_PREPARE " FROM " << mysqlpp::quote
<< "SELECT " DB_TABLE_PLAYER_COL_ID ", AES_DECRYPT(" DB_TABLE_PLAYER_COL_PASSWORD ", ?), " DB_TABLE_PLAYER_COL_VALID ", TRIM(" DB_TABLE_PLAYER_COL_COUNTRY "), " DB_TABLE_PLAYER_COL_LASTLOGIN ", " DB_TABLE_PLAYER_COL_ACTIVE " FROM " DB_TABLE_PLAYER " WHERE BINARY " DB_TABLE_PLAYER_COL_USERNAME " = ?";
*/
prepareNick
<< "PREPARE " QUERY_NICK_PREPARE " FROM " << mysqlpp::quote
<< "SELECT " DB_TABLE_PLAYER_COL_ID ", AES_DECRYPT(" DB_TABLE_PLAYER_COL_PASSWORD ", ?), " DB_TABLE_PLAYER_COL_VALID ", TRIM(" DB_TABLE_PLAYER_COL_COUNTRY "), " DB_TABLE_PLAYER_COL_LASTLOGIN ", " DB_TABLE_PLAYER_COL_LASTGAMES ", " DB_TABLE_PLAYER_COL_LASTIP ", " DB_TABLE_PLAYER_COL_ACTIVE " FROM " DB_TABLE_PLAYER " WHERE " DB_TABLE_PLAYER_COL_USERNAME " = ?";
mysqlpp::Query prepareAvatarBlacklist = m_connData->conn.query();
prepareAvatarBlacklist
<< "PREPARE " QUERY_AVATAR_BLACKLIST_PREPARE " FROM " << mysqlpp::quote
<< "SELECT " DB_TABLE_AVATAR_BLACKLIST_COL_ID " FROM " DB_TABLE_AVATAR_BLACKLIST " WHERE BINARY " DB_TABLE_AVATAR_BLACKLIST_COL_AVATAR_HASH " = ?";
mysqlpp::Query prepareLogin = m_connData->conn.query();
prepareLogin
<< "PREPARE " QUERY_LOGIN_PREPARE " FROM " << mysqlpp::quote
<< "UPDATE " DB_TABLE_PLAYER " SET " DB_TABLE_PLAYER_COL_LASTLOGIN " = ?, " DB_TABLE_PLAYER_COL_AVATARHASH " = ?, " DB_TABLE_PLAYER_COL_AVATARTYPE " = ? WHERE " DB_TABLE_PLAYER_COL_ID " = ?";
mysqlpp::Query prepareCreateGame = m_connData->conn.query();
prepareCreateGame
<< "PREPARE " QUERY_CREATE_GAME_PREPARE " FROM " << mysqlpp::quote
<< "INSERT INTO " DB_TABLE_GAME " (" DB_TABLE_GAME_COL_NAME ", " DB_TABLE_GAME_COL_STARTTIME ") VALUES (?, ?)";
mysqlpp::Query prepareEndGame = m_connData->conn.query();
prepareEndGame
<< "PREPARE " QUERY_END_GAME_PREPARE " FROM " << mysqlpp::quote
<< "UPDATE " DB_TABLE_GAME " SET "DB_TABLE_GAME_COL_ENDTIME " = ? WHERE " DB_TABLE_GAME_COL_ID " = ?";
mysqlpp::Query prepareRelation = m_connData->conn.query();
prepareRelation
<< "PREPARE " QUERY_GAME_PLAYER_PREPARE " FROM " << mysqlpp::quote
<< "INSERT INTO " DB_TABLE_GAMEPLAYER " (" DB_TABLE_GAMEPLAYER_COL_GAMEID ", " DB_TABLE_GAMEPLAYER_COL_PLAYERID ", " DB_TABLE_GAMEPLAYER_COL_PLACE ") VALUES (?, ?, ?)";
mysqlpp::Query prepareScore = m_connData->conn.query();
prepareScore
<< "PREPARE " QUERY_UPDATE_SCORE_PREPARE " FROM " << mysqlpp::quote
<< "CALL updatePointsForGame(?)";
mysqlpp::Query prepareReportAvatar = m_connData->conn.query();
prepareReportAvatar
<< "PREPARE " QUERY_REPORT_AVATAR_PREPARE " FROM " << mysqlpp::quote
<< "INSERT INTO " DB_TABLE_REP_AVATAR " (" DB_TABLE_REP_AVATAR_COL_PLAYERID ", " DB_TABLE_REP_AVATAR_COL_AVATARHASH ", " DB_TABLE_REP_AVATAR_COL_AVATARTYPE ", " DB_TABLE_REP_AVATAR_COL_BY_PLAYERID ", " DB_TABLE_REP_AVATAR_COL_TIMESTAMP ") VALUES (?, ?, ?, ?, ?)";
mysqlpp::Query prepareReportGame = m_connData->conn.query();
prepareReportGame
<< "PREPARE " QUERY_REPORT_GAME_PREPARE " FROM " << mysqlpp::quote
<< "INSERT INTO " DB_TABLE_REP_GAME " (" DB_TABLE_REP_GAME_COL_CREATOR ", " DB_TABLE_REP_GAME_COL_GAMENAME ", " DB_TABLE_REP_GAME_COL_BY_PLAYERID ", " DB_TABLE_REP_GAME_COL_TIMESTAMP ", " DB_TABLE_REP_GAME_COL_GAMEID ") VALUES (?, ?, ?, ?, ?)";
mysqlpp::Query prepareAdminPlayer = m_connData->conn.query();
prepareAdminPlayer
<< "PREPARE " QUERY_ADMIN_PLAYER_PREPARE " FROM " << mysqlpp::quote
<< "SELECT " DB_TABLE_ADMIN_PLAYER_COL_PLAYERID " FROM " DB_TABLE_ADMIN_PLAYER;
mysqlpp::Query prepareBlockPlayer = m_connData->conn.query();
prepareBlockPlayer
<< "PREPARE " QUERY_BLOCK_PLAYER_PREPARE " FROM " << mysqlpp::quote
<< "UPDATE " DB_TABLE_PLAYER " SET " DB_TABLE_PLAYER_COL_VALID " = ?, " DB_TABLE_PLAYER_COL_ACTIVE " = ? WHERE " DB_TABLE_PLAYER_COL_ID " = ?";
mysqlpp::Query preparePlayerLastGames = m_connData->conn.query();
preparePlayerLastGames
<< "PREPARE " QUERY_PLAYER_LASTGAMES_PREPARE " FROM " << mysqlpp::quote
<< "UPDATE " DB_TABLE_PLAYER " SET " DB_TABLE_PLAYER_COL_LASTGAMES " = ?, " DB_TABLE_PLAYER_COL_LASTIP " = ? WHERE " DB_TABLE_PLAYER_COL_ID " = ?";
if (!prepareNick.exec() || !prepareAvatarBlacklist.exec() || !prepareLogin.exec() || !prepareCreateGame.exec()
|| !prepareEndGame.exec() || !prepareRelation.exec() || !prepareScore.exec() || !prepareReportAvatar.exec()
|| !prepareReportGame.exec() || !prepareAdminPlayer.exec() || !prepareBlockPlayer.exec() || !preparePlayerLastGames.exec()) {
string tmpError = string(prepareNick.error()) + prepareAvatarBlacklist.error() + prepareLogin.error() + prepareCreateGame.error() +
prepareEndGame.error() + prepareRelation.error() + prepareScore.error() + prepareReportAvatar.error() +
prepareReportGame.error() + prepareAdminPlayer.error() + prepareBlockPlayer.error() + preparePlayerLastGames.error();
m_connData->conn.disconnect();
m_ioService->post(boost::bind(&ServerDBCallback::ConnectFailed, &m_callback, tmpError));
m_permanentError = true;
} else {
m_ioService->post(boost::bind(&ServerDBCallback::ConnectSuccess, &m_callback));
m_previouslyConnected = true;
}
}
}
void
ServerDBThread::HandleNextQuery()
{
boost::shared_ptr<AsyncDBQuery> nextQuery;
{
boost::mutex::scoped_lock lock(m_asyncQueueMutex);
if (!m_asyncQueue.empty()) {
nextQuery = m_asyncQueue.front();
m_asyncQueue.pop();
}
}
if (nextQuery) {
do {
nextQuery->Init(m_dbIdManager);
mysqlpp::Query executeQuery = m_connData->conn.query();
executeQuery << "EXECUTE " << nextQuery->GetPreparedName();
list<string> paramList;
nextQuery->GetParams(paramList);
if (!paramList.empty()) {
executeQuery << " using ";
mysqlpp::Query paramQuery = m_connData->conn.query();
paramQuery << "SET ";
unsigned counter = 1;
list<string>::iterator i = paramList.begin();
list<string>::iterator end = paramList.end();
while (i != end) {
if (counter > 1) {
paramQuery << ", ";
executeQuery << ", ";
}
paramQuery << "@param" << counter << " = ";
if (*i == "NULL") {
paramQuery << "NULL";
} else {
paramQuery << "_utf8" << mysqlpp::quote << *i;
}
executeQuery << "@param" << counter;
++counter;
++i;
}
if (!paramQuery.exec()) {
string tmpError = paramQuery.error();
m_connData->conn.disconnect();
m_ioService->post(boost::bind(&ServerDBCallback::QueryError, &m_callback, tmpError));
break;
}
}
if (nextQuery->RequiresResultSet()) {
mysqlpp::StoreQueryResult res = executeQuery.store();
if (res)
nextQuery->HandleResult(executeQuery, m_dbIdManager, res, *m_ioService, m_callback);
else
nextQuery->HandleError(*m_ioService, m_callback);
} else {
if (executeQuery.exec())
nextQuery->HandleNoResult(executeQuery, m_dbIdManager, *m_ioService, m_callback);
else
nextQuery->HandleError(*m_ioService, m_callback);
}
} while (nextQuery->Next()); // Consider composite queries.
}
}
void
ServerDBThread::SetConnected(bool isConnected)
{
boost::mutex::scoped_lock lock(m_isConnectedMutex);
m_isConnected = isConnected;
}
-109
View File
@@ -1,109 +0,0 @@
/*****************************************************************************
* PokerTH - The open source texas holdem engine *
* Copyright (C) 2006-2016 Felix Hammer, Florian Thauer, Lothar May *
* *
* This program is free software: you can redistribute it and/or modify *
* it under the terms of the GNU Affero General Public License as *
* published by the Free Software Foundation, either version 3 of the *
* License, or (at your option) any later version. *
* *
* This program is distributed in the hope that it will be useful, *
* but WITHOUT ANY WARRANTY; without even the implied warranty of *
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the *
* GNU Affero General Public License for more details. *
* *
* You should have received a copy of the GNU Affero General Public License *
* along with this program. If not, see <http://www.gnu.org/licenses/>. *
* *
* *
* Additional permission under GNU AGPL version 3 section 7 *
* *
* If you modify this program, or any covered work, by linking or *
* combining it with the OpenSSL project's OpenSSL library (or a *
* modified version of that library), containing parts covered by the *
* terms of the OpenSSL or SSLeay licenses, the authors of PokerTH *
* (Felix Hammer, Florian Thauer, Lothar May) grant you additional *
* permission to convey the resulting work. *
* Corresponding Source for a non-source form of such a combination *
* shall include the source code for the parts of OpenSSL used as well *
* as that of the covered work. *
*****************************************************************************/
/* Server database thread. */
#ifndef _SERVERDBTHREAD_H_
#define _SERVERDBTHREAD_H_
#include <boost/asio.hpp>
#include <boost/interprocess/sync/interprocess_semaphore.hpp>
#include <boost/enable_shared_from_this.hpp>
#include <queue>
#include <db/serverdbinterface.h>
#include <db/serverdbcallback.h>
#include <dbofficial/dbidmanager.h>
#include <core/thread.h>
struct DBConnectionData;
class AsyncDBQuery;
class ServerDBThread : public ServerDBInterface, public Thread, public boost::enable_shared_from_this<ServerDBThread>
{
public:
ServerDBThread(ServerDBCallback &cb, boost::shared_ptr<boost::asio::io_service> ioService);
virtual ~ServerDBThread();
virtual void SignalTermination();
virtual void Init(const std::string &host, const std::string &user, const std::string &pwd,
const std::string &database, const std::string &encryptionKey);
virtual void Start();
virtual void Stop();
virtual void AsyncPlayerLogin(unsigned requestId, const std::string &playerName);
virtual void AsyncCheckAvatarBlacklist(unsigned requestId, const std::string &avatarHash);
virtual void PlayerPostLogin(DB_id playerId, const std::string &avatarHash, const std::string &avatarType);
virtual void PlayerLogout(DB_id playerId);
virtual void AsyncCreateGame(unsigned requestId, const std::string &gameName);
virtual void SetGamePlayerPlace(unsigned requestId, DB_id playerId, unsigned place);
virtual void SetPlayerLastGames(unsigned requestId, DB_id playerId, std::vector<long> last_games, std::string playerIp);
virtual void EndGame(unsigned requestId);
virtual void AsyncReportAvatar(unsigned requestId, unsigned replyId, DB_id reportedPlayerId, const std::string &avatarHash, const std::string &avatarType, DB_id *byPlayerId);
virtual void AsyncReportGame(unsigned requestId, unsigned replyId, DB_id *creatorPlayerId, unsigned gameId, const std::string &gameName, DB_id *byPlayerId);
virtual void AsyncQueryAdminPlayers(unsigned requestId);
virtual void AsyncBlockPlayer(unsigned requestId, unsigned replyId, DB_id playerId, int valid, int active);
bool IsConnected() const;
protected:
typedef std::queue<boost::shared_ptr<AsyncDBQuery> > AsyncDBQueryQueue;
// Main function of the thread.
virtual void Main();
bool HasPermanentError() const;
bool HasDBConnection() const;
void EstablishDBConnection();
void HandleNextQuery();
void SetConnected(bool isConnected);
private:
boost::shared_ptr<boost::asio::io_service> m_ioService;
boost::interprocess::interprocess_semaphore m_semaphore;
ServerDBCallback &m_callback;
boost::shared_ptr<DBConnectionData> m_connData;
mutable boost::mutex m_asyncQueueMutex;
AsyncDBQueryQueue m_asyncQueue;
DBIdManager m_dbIdManager;
mutable boost::mutex m_isConnectedMutex;
bool m_isConnected;
bool m_permanentError;
bool m_previouslyConnected;
};
#endif
-69
View File
@@ -1,69 +0,0 @@
/*****************************************************************************
* PokerTH - The open source texas holdem engine *
* Copyright (C) 2006-2016 Felix Hammer, Florian Thauer, Lothar May *
* *
* This program is free software: you can redistribute it and/or modify *
* it under the terms of the GNU Affero General Public License as *
* published by the Free Software Foundation, either version 3 of the *
* License, or (at your option) any later version. *
* *
* This program is distributed in the hope that it will be useful, *
* but WITHOUT ANY WARRANTY; without even the implied warranty of *
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the *
* GNU Affero General Public License for more details. *
* *
* You should have received a copy of the GNU Affero General Public License *
* along with this program. If not, see <http://www.gnu.org/licenses/>. *
* *
* *
* Additional permission under GNU AGPL version 3 section 7 *
* *
* If you modify this program, or any covered work, by linking or *
* combining it with the OpenSSL project's OpenSSL library (or a *
* modified version of that library), containing parts covered by the *
* terms of the OpenSSL or SSLeay licenses, the authors of PokerTH *
* (Felix Hammer, Florian Thauer, Lothar May) grant you additional *
* permission to convey the resulting work. *
* Corresponding Source for a non-source form of such a combination *
* shall include the source code for the parts of OpenSSL used as well *
* as that of the covered work. *
*****************************************************************************/
#include <dbofficial/singleasyncdbquery.h>
using namespace std;
SingleAsyncDBQuery::SingleAsyncDBQuery(unsigned queryId, const string &preparedName, const list<string> &params)
: m_id(queryId), m_preparedName(preparedName), m_params(params)
{
}
SingleAsyncDBQuery::~SingleAsyncDBQuery()
{
}
unsigned
SingleAsyncDBQuery::GetId() const
{
return m_id;
}
std::string
SingleAsyncDBQuery::GetPreparedName() const
{
return m_preparedName;
}
void
SingleAsyncDBQuery::GetParams(std::list<std::string> &params) const
{
params = m_params;
}
void
SingleAsyncDBQuery::SetParams(const std::list<std::string> &params)
{
m_params = params;
}
-61
View File
@@ -1,61 +0,0 @@
/*****************************************************************************
* PokerTH - The open source texas holdem engine *
* Copyright (C) 2006-2016 Felix Hammer, Florian Thauer, Lothar May *
* *
* This program is free software: you can redistribute it and/or modify *
* it under the terms of the GNU Affero General Public License as *
* published by the Free Software Foundation, either version 3 of the *
* License, or (at your option) any later version. *
* *
* This program is distributed in the hope that it will be useful, *
* but WITHOUT ANY WARRANTY; without even the implied warranty of *
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the *
* GNU Affero General Public License for more details. *
* *
* You should have received a copy of the GNU Affero General Public License *
* along with this program. If not, see <http://www.gnu.org/licenses/>. *
* *
* *
* Additional permission under GNU AGPL version 3 section 7 *
* *
* If you modify this program, or any covered work, by linking or *
* combining it with the OpenSSL project's OpenSSL library (or a *
* modified version of that library), containing parts covered by the *
* terms of the OpenSSL or SSLeay licenses, the authors of PokerTH *
* (Felix Hammer, Florian Thauer, Lothar May) grant you additional *
* permission to convey the resulting work. *
* Corresponding Source for a non-source form of such a combination *
* shall include the source code for the parts of OpenSSL used as well *
* as that of the covered work. *
*****************************************************************************/
/* Single (non-composite) async database query. */
#ifndef _SINGLEASYNCDBQUERY_H_
#define _SINGLEASYNCDBQUERY_H_
#include <dbofficial/asyncdbquery.h>
class SingleAsyncDBQuery : public AsyncDBQuery
{
public:
SingleAsyncDBQuery(unsigned queryId, const std::string &preparedName, const std::list<std::string> &params);
virtual ~SingleAsyncDBQuery();
unsigned GetId() const;
virtual std::string GetPreparedName() const;
virtual void GetParams(std::list<std::string> &params) const;
virtual void SetParams(const std::list<std::string> &params);
virtual bool Next()
{
return false;
}
private:
const unsigned m_id;
std::string m_preparedName;
std::list<std::string> m_params;
};
#endif
+7 -5
View File
@@ -56,10 +56,10 @@ Game::Game(GuiInterface* gui, boost::shared_ptr<EngineFactory> factory,
dealerPosition = startData.startDealerPlayerId; dealerPosition = startData.startDealerPlayerId;
if(DEBUG_MODE) { // debug mode
startSmallBlind = 10; if(myLog) {
currentSmallBlind = startSmallBlind; myLog->debugMode_getStartSmallBlind(&startSmallBlind,&currentSmallBlind);
dealerPosition = 4; myLog->debugMode_getStartDealerPosition(&dealerPosition);
} }
int i; int i;
@@ -109,6 +109,9 @@ Game::Game(GuiInterface* gui, boost::shared_ptr<EngineFactory> factory,
++player_i; ++player_i;
} }
// debug mode
if(myLog) myLog->debugMode_getPlayerStartCash(&myStartCash, i);
// create player objects // create player objects
boost::shared_ptr<PlayerInterface> tmpPlayer = myFactory->createPlayer(i, uniqueId, type, myName, myAvatarFile, myStartCash, startQuantityPlayers > i, myStayOnTableStatus, 0); boost::shared_ptr<PlayerInterface> tmpPlayer = myFactory->createPlayer(i, uniqueId, type, myName, myAvatarFile, myStartCash, startQuantityPlayers > i, myStayOnTableStatus, 0);
tmpPlayer->setIsSessionActive(true); tmpPlayer->setIsSessionActive(true);
@@ -212,7 +215,6 @@ void Game::startHand()
// log new hand // log new hand
myGui->logNewGameHandMsg(myGameID, currentHandID); myGui->logNewGameHandMsg(myGameID, currentHandID);
myGui->flushLogAtGame(myGameID);
currentHand->start(); currentHand->start();
} }
+16 -32
View File
@@ -63,76 +63,60 @@ public:
boost::shared_ptr<HandInterface> getCurrentHand(); boost::shared_ptr<HandInterface> getCurrentHand();
const boost::shared_ptr<HandInterface> getCurrentHand() const; const boost::shared_ptr<HandInterface> getCurrentHand() const;
PlayerList getSeatsList() const PlayerList getSeatsList() const {
{
return seatsList; return seatsList;
} }
PlayerList getActivePlayerList() const PlayerList getActivePlayerList() const {
{
return activePlayerList; return activePlayerList;
} }
PlayerList getRunningPlayerList() const PlayerList getRunningPlayerList() const {
{
return runningPlayerList; return runningPlayerList;
} }
void setStartQuantityPlayers(int theValue) void setStartQuantityPlayers(int theValue) {
{
startQuantityPlayers = theValue; startQuantityPlayers = theValue;
} }
int getStartQuantityPlayers() const int getStartQuantityPlayers() const {
{
return startQuantityPlayers; return startQuantityPlayers;
} }
void setStartSmallBlind(int theValue) void setStartSmallBlind(int theValue) {
{
startSmallBlind = theValue; startSmallBlind = theValue;
} }
int getStartSmallBlind() const int getStartSmallBlind() const {
{
return startSmallBlind; return startSmallBlind;
} }
void setStartCash(int theValue) void setStartCash(int theValue) {
{
startCash = theValue; startCash = theValue;
} }
int getStartCash() const int getStartCash() const {
{
return startCash; return startCash;
} }
int getMyGameID() const int getMyGameID() const {
{
return myGameID; return myGameID;
} }
void setCurrentSmallBlind(int theValue) void setCurrentSmallBlind(int theValue) {
{
currentSmallBlind = theValue; currentSmallBlind = theValue;
} }
int getCurrentSmallBlind() const int getCurrentSmallBlind() const {
{
return currentSmallBlind; return currentSmallBlind;
} }
void setCurrentHandID(int theValue) void setCurrentHandID(int theValue) {
{
currentHandID = theValue; currentHandID = theValue;
} }
int getCurrentHandID() const int getCurrentHandID() const {
{
return currentHandID; return currentHandID;
} }
unsigned getDealerPosition() const unsigned getDealerPosition() const {
{
return dealerPosition; return dealerPosition;
} }
void replaceDealer(unsigned oldDealer, unsigned newDealer) void replaceDealer(unsigned oldDealer, unsigned newDealer) {
{
if (dealerPosition == oldDealer) if (dealerPosition == oldDealer)
dealerPosition = newDealer; dealerPosition = newDealer;
} }
+2 -10
View File
@@ -1054,17 +1054,9 @@ vector< vector<int> > ArrayData::getHandChancePreflop(int handCode)
int check = -1; int check = -1;
int i;
vector< vector<int> > chance(2); vector< vector<int> > chance(2);
chance[0].assign(10,0);
chance[0].resize(10); chance[1].assign(10,0);
chance[1].resize(10);
for(i=0; i<10; i++) {
chance[0][i] = 0;
chance[1][i] = 0;
}
for (unsigned val = 0; val < NUM_HAND_CHANCE_PREFLOP; val++) { for (unsigned val = 0; val < NUM_HAND_CHANCE_PREFLOP; val++) {
if(handCode == handChancePreflop[val].hand) { if(handCode == handChancePreflop[val].hand) {
+333 -422
View File
@@ -65,7 +65,7 @@ int CardsValue::holeCardsClass(int one, int two)
} }
} }
switch((one-1)%13+2) { switch((one-1)%13+2) {
//Ass //Ass
case 14: { case 14: {
if((one-1)/13 == (two-1)/13) { if((one-1)/13 == (two-1)/13) {
switch((one-1)%13-(two-1)%13) { switch((one-1)%13-(two-1)%13) {
@@ -221,450 +221,313 @@ int CardsValue::holeCardsClass(int one, int two)
} }
int CardsValue::holeCardsToIntCode(int* cards) int CardsValue::holeCardsToIntCode(int holeCards[2])
{ {
// Code der HoleCards ermitteln // Code der HoleCards ermitteln
if(cards[0]%13 == cards[1]%13) { if(holeCards[0]%13 == holeCards[1]%13) {
return ((cards[0]%13)*1000 + (cards[0]%13)*10); return ((holeCards[0]%13)*1000 + (holeCards[0]%13)*10);
} else { } else {
if(cards[0]%13 < cards[1]%13) { if(holeCards[0]%13 < holeCards[1]%13) {
if(cards[0]/13 == cards[1]/13) { if(holeCards[0]/13 == holeCards[1]/13) {
return ((cards[0]%13)*1000 + (cards[1]%13)*10 + 1); return ((holeCards[0]%13)*1000 + (holeCards[1]%13)*10 + 1);
} else { } else {
return ((cards[0]%13)*1000 + (cards[1]%13)*10); return ((holeCards[0]%13)*1000 + (holeCards[1]%13)*10);
} }
} else { } else {
if(cards[0]/13 == cards[1]/13) { if(holeCards[0]/13 == holeCards[1]/13) {
return ((cards[1]%13)*1000 + (cards[0]%13)*10 + 1); return ((holeCards[1]%13)*1000 + (holeCards[0]%13)*10 + 1);
} else { } else {
return ((cards[1]%13)*1000 + (cards[0]%13)*10); return ((holeCards[1]%13)*1000 + (holeCards[0]%13)*10);
} }
} }
} }
} }
/* DO NOT USE, THIS MAY LEAK MEMORY static const int straight[10] = { 7936, 3968, 1984, 992, 496, 248, 124, 62, 31, 4111 };
int* CardsValue::intCodeToHoleCards(int code)
int CardsValue::cardsValueShort(int cards[4])
{ {
// one possibility !!! int color_idx;
int card_idx;
int* cards = new int[2]; // Royal Flush, Straight Flush, Flush
for(color_idx=0; color_idx<4; color_idx++) { // check all colors
cards[0] = code/1000; if(bitcount(cards[color_idx])>=5) { // check if at least 5 cards of one color
cards[1] = (code-cards[0]*1000)/10; if((cards[color_idx] & straight[0]) == straight[0]) // check for Royal Flush
return 9;
if(cards[0]==cards[1]) { else { // check for Straight Flush
cards[1] +=13; for(card_idx=1; card_idx<10; card_idx++) {
} else { if((cards[color_idx] & straight[card_idx]) == straight[card_idx]) {
if(code%10 == 0) cards[1] +=13; return 8; // Straight Flush
}
return cards;
}*/
int CardsValue::cardsValue(int* cards, int* position)
{
int array[7][3];
int j1, j2, j3, j4, j5, k1, k2, ktemp[3];
// Kartenwerte umwandeln (z.B. [ 11 (Karo Kig) -> 0 11 ] oder [ 31 (Pik 7) -> 2 5 ] )
for(j1=0; j1<7; j1++) {
array[j1][0] = cards[j1]/13;
array[j1][1] = cards[j1]%13;
array[j1][2] = j1;
}
// Karten nach Farben sortieren: Kreuz - Pik - Herz - Karo
for(k1=0; k1<7; k1++) {
for(k2=k1+1; k2<7; k2++) {
if(array[k1][0]<array[k2][0]) {
ktemp[0] = array[k1][0];
ktemp[1] = array[k1][1];
ktemp[2] = array[k1][2];
array[k1][0] = array[k2][0];
array[k1][1] = array[k2][1];
array[k1][2] = array[k2][2];
array[k2][0] = ktemp[0];
array[k2][1] = ktemp[1];
array[k2][2] = ktemp[2];
}
}
}
// Karten innerhalb der Farben nach der Gre sortieren: Ass - Kig - Dame - ... - 4 - 3 - 2
for(k1=0; k1<7; k1++) {
for(k2=k1+1; k2<7; k2++) {
if(array[k1][0]==array[k2][0] && array[k1][1]<array[k2][1]) {
ktemp[0] = array[k1][0];
ktemp[1] = array[k1][1];
ktemp[2] = array[k1][2];
array[k1][0] = array[k2][0];
array[k1][1] = array[k2][1];
array[k1][2] = array[k2][2];
array[k2][0] = ktemp[0];
array[k2][1] = ktemp[1];
array[k2][2] = ktemp[2];
}
}
}
// Karten auf Blter testen. Klasseneinteilung absteigend: 9 - Royal Flush, 8 - Straight Flush, ... 2 - Zwei Paare, 1 - Ein Paar, 0 - Nischt
// auf Royal Flush (Klasse 9) und Straight Flush (Klasse 8) testen
for(j1=0; j1<3; j1++) {
// 5 Karten gleiche Farbe ?
if(array[j1][0] == array[j1+1][0] && array[j1][0] == array[j1+2][0] && array[j1][0] == array[j1+3][0] && array[j1][0] == array[j1+4][0]) {
// zuszlich in Stranform ?
if(array[j1][1]-1 == array[j1+1][1] && array[j1+1][1]-1 == array[j1+2][1] && array[j1+2][1]-1 == array[j1+3][1] && array[j1+3][1]-1 == array[j1+4][1]) {
// mit Ass an der Spitze ?
if(array[j1][1] == 12) {
// Royal Flush (9*100000000)
if(position) {
// Position-Array fuellen
for(j2=0; j2<5; j2++) {
position[j2] = array[j1+j2][2];
}
}
return 900000000;
}
// sonst nur Straight Flush (8*100000000 + (hhste Straight-Karte)*1000000)
else {
if(position) {
// Position-Array fuellen
for(j2=0; j2<5; j2++) {
position[j2] = array[j1+j2][2];
}
}
return 800000000+array[j1][1]*1000000;
}
}
}
}
// Straight Flush Ausnahme: 5-4-3-2-A
for(j1=0; j1<3; j1++) {
// 5 Karten gleiche Farbe ?
if(array[j1][0] == array[j1+1][0] && array[j1][0] == array[j1+2][0] && array[j1][0] == array[j1+3][0] && array[j1][0] == array[j1+4][0]) {
for(j2=j1+1; j2<4; j2++) {
if(array[j1][1]-9==array[j2][1] && array[j2][1]-1==array[j2+1][1] && array[j2+1][1]-1==array[j2+2][1] && array[j2+2][1]-1==array[j2+3][1] && array[j1][0]==array[j2+2][0] && array[j1][0]==array[j2+3][0]) {
// Straight Flush mit 5 als höchste Karte -> 8*100000000+3*1000000
if(position) {
// Position-Array fuellen
position[0] = array[j1][2];
for(j3=0; j3<4; j3++) {
position[j3+1] = array[j2+j3][2];
}
}
return 800000000+3*1000000;
}
}
}
}
// auf Flush (Klasse 5) testen
for(j1=0; j1<3; j1++) {
if(array[j1][0] == array[j1+1][0] && array[j1][0] == array[j1+2][0] && array[j1][0] == array[j1+3][0] && array[j1][0] == array[j1+4][0]) {
// Flush -> 5*10000000 + hste Flush Karten mit absteigender Wertung
if(position) {
// Position-Array fuellen
for(j2=0; j2<5; j2++) {
position[j2] = array[j1+j2][2];
}
}
return 500000000+array[j1][1]*1000000+array[j1+1][1]*10000+array[j1+2][1]*100+array[j1+3][1]*10+array[j1+4][1];
}
}
// Karten fr den Vierling-, Full-House-, Drilling- und Paartest umsortieren
for(k1=0; k1<7; k1++) {
for(k2=k1+1; k2<7; k2++) {
if(array[k1][1]<array[k2][1]) {
ktemp[0] = array[k1][0];
ktemp[1] = array[k1][1];
ktemp[2] = array[k1][2];
array[k1][0] = array[k2][0];
array[k1][1] = array[k2][1];
array[k1][2] = array[k2][2];
array[k2][0] = ktemp[0];
array[k2][1] = ktemp[1];
array[k2][2] = ktemp[2];
}
}
}
// nach Position sortieren: erst board, dann hole cards
for(k1=0; k1<7; k1++) {
for(k2=k1+1; k2<7; k2++) {
if(array[k1][1]==array[k2][1] && array[k1][2]<array[k2][2]) {
ktemp[0] = array[k1][0];
ktemp[1] = array[k1][1];
ktemp[2] = array[k1][2];
array[k1][0] = array[k2][0];
array[k1][1] = array[k2][1];
array[k1][2] = array[k2][2];
array[k2][0] = ktemp[0];
array[k2][1] = ktemp[1];
array[k2][2] = ktemp[2];
}
}
}
// auf Vierling (Klasse 7) testen
for(j1=0; j1<4; j1++) {
if(array[j1][1] == array[j1+1][1] && array[j1][1] == array[j1+2][1] && array[j1][1] == array[j1+3][1]) {
// Position des Kickers ermitteln und der Blattwertung als dritte Gewichtung hinzuaddieren
if(j1==0) {
if(position) {
// Position-Array fuellen
for(j2=0; j2<5; j2++) {
position[j2] = array[j2][2];
}
}
return 700000000+array[j1][1]*1000000+array[j1+4][1]*10000;
} else {
if(position) {
// Position-Array fuellen
for(j2=0; j2<4; j2++) {
position[j2] = array[j1+j2][2];
}
position[4] = array[0][2];
}
return 700000000+array[j1][1]*1000000+array[0][1]*10000;
}
}
}
// Hilfsvariablen fr die Full-House-Paar- und -Drilling-Zuordnung
int drei, zwei;
// auf Straight (Klasse 4) und Full House (Klasse 6) testen
for(j1=0; j1<7; j1++) {
for(j2=j1+1; j2<7; j2++) {
for(j3=j2+1; j3<7; j3++) {
for(j4=j3+1; j4<7; j4++) {
for(j5=j4+1; j5<7; j5++) {
// Straight
if(array[j1][1]-1 == array[j2][1] && array[j2][1]-1 == array[j3][1] && array[j3][1]-1 == array[j4][1] && array[j4][1]-1 == array[j5][1]) {
if(position) {
// Position-Array fuellen
position[0] = array[j1][2];
position[1] = array[j2][2];
position[2] = array[j3][2];
position[3] = array[j4][2];
position[4] = array[j5][2];
}
return 400000000+array[j1][1]*1000000;
}
// Full House
if((array[j1][1] == array[j2][1] && array[j1][1] == array[j3][1] && array[j4][1] == array[j5][1]) || (array[j3][1] == array[j4][1] && array[j3][1] == array[j5][1] && array[j1][1] == array[j2][1])) {
if(position) {
// Position-Array fuellen
position[0] = array[j1][2];
position[1] = array[j2][2];
position[2] = array[j3][2];
position[3] = array[j4][2];
position[4] = array[j5][2];
}
// Paar und Drilling des Full House ermitteln ermitteln
if(array[j3][1]==array[j1][1]) {
drei = array[j1][1];
zwei = array[j4][1];
} else {
drei = array[j4][1];
zwei = array[j1][1];
}
return 600000000+drei*1000000+zwei*10000;
}
} }
} }
} }
return 5; // Flush
} }
} }
// auf Straight-Spezialfall ( 5 4 3 2 A ) testen int AND = cards[0] & cards[1] & cards[2] & cards[3];
for(j1=0; j1<7; j1++) {
for(j2=j1+1; j2<7; j2++) { // Four of a Kind
for(j3=j2+1; j3<7; j3++) { if(AND) {
for(j4=j3+1; j4<7; j4++) { return 7;
for(j5=j4+1; j5<7; j5++) { }
if(array[j1][1]-9 == array[j2][1] && array[j2][1]-1 == array[j3][1] && array[j3][1]-1 == array[j4][1] && array[j4][1]-1 == array[j5][1]) {
if(position) { int OR = cards[0] | cards[1] | cards[2] | cards[3];
// Position-Array fuellen
position[0] = array[j1][2]; // Straight
position[1] = array[j2][2]; for(card_idx=0; card_idx<10; card_idx++) {
position[2] = array[j3][2]; if((OR & straight[card_idx]) == straight[card_idx]) {
position[3] = array[j4][2]; return 4;
position[4] = array[j5][2];
}
return 400000000+array[j2][1]*1000000;
}
}
}
}
} }
} }
// auf Drilling (Klasse 3) testen int color_1_idx, color_2_idx, color_3_idx, color_4_idx, color_5_idx;
for(j1=0; j1<5; j1++) { int temp;
if(array[j1][1] == array[j1+1][1] && array[j1][1] == array[j1+2][1]) {
// Kicker ermitteln // Full House, Three of a Kind
if(j1==0) { for(color_1_idx=0; color_1_idx<2; color_1_idx++) {
if(position) { for(color_2_idx=color_1_idx+1; color_2_idx<3; color_2_idx++) {
// Position-Array fuellen for(color_3_idx=color_2_idx+1; color_3_idx<4; color_3_idx++) {
for(j2=0; j2<5; j2++) { temp = cards[color_1_idx] & cards[color_2_idx] & cards[color_3_idx];
position[j2] = array[j2][2]; if(bitcount(temp) == 2) { // two times Three of a Kind
} return 6; // Full House
}
return 300000000+array[j1][1]*1000000+array[j1+3][1]*10000+array[j1+4][1]*100;
} else {
if(j1==1) {
if(position) {
// Position-Array fuellen
for(j2=0; j2<5; j2++) {
position[j2] = array[j2][2];
}
}
return 300000000+array[j1][1]*1000000+array[j1-1][1]*10000+array[j1+3][1]*100;
} else { } else {
if(position) { if(temp) {
// Position-Array fuellen for(color_4_idx=0; color_4_idx<3; color_4_idx++) {
for(j2=0; j2<3; j2++) { for(color_5_idx=color_4_idx+1; color_5_idx<4; color_5_idx++) {
position[j2] = array[j1+j2][2]; if(~temp & cards[color_4_idx] & cards[color_5_idx]) { // search for additional pair
return 6; // Full House
}
}
} }
position[3] = array[0][2]; return 3; // Three of a Kind
position[4] = array[1][2];
} }
return 300000000+array[j1][1]*1000000+array[0][1]*10000+array[1][1]*100;
} }
} }
} }
} }
// auf Zwei Paare (Klasse 2) testen // Two Pairs, Two of a Kind
for(j1=0; j1<4; j1++) { for(color_1_idx=0; color_1_idx<3; color_1_idx++) {
for(j2=j1+2; j2<6; j2++) { for(color_2_idx=color_1_idx+1; color_2_idx<4; color_2_idx++) {
if(array[j1][1] == array[j1+1][1] && array[j2][1] == array[j2+1][1]) { temp = cards[color_1_idx] & cards[color_2_idx];
// Kicker ermitteln if(bitcount(temp) >= 2) { // at least two times Two of a Kind
if(j1==0) { return 2; // Two Pairs
if(j2==2) {
if(position) {
// Position-Array fuellen
position[0] = array[j1][2];
position[1] = array[j1+1][2];
position[2] = array[j2][2];
position[3] = array[j2+1][2];
position[4] = array[j2+2][2];
}
return 200000000+array[j1][1]*1000000+array[j2][1]*10000+array[j2+2][1]*100;
} else {
if(position) {
// Position-Array fuellen
position[0] = array[j1][2];
position[1] = array[j1+1][2];
position[2] = array[j2][2];
position[3] = array[j2+1][2];
position[4] = array[j1+2][2];
}
return 200000000+array[j1][1]*1000000+array[j2][1]*10000+array[j1+2][1]*100;
}
} else {
if(position) {
// Position-Array fuellen
position[0] = array[j1][2];
position[1] = array[j1+1][2];
position[2] = array[j2][2];
position[3] = array[j2+1][2];
position[4] = array[0][2];
}
return 200000000+array[j1][1]*1000000+array[j2][1]*10000+array[0][1]*100;
}
}
}
}
// auf Paar (Klasse 1) testen
for(j1=0; j1<6; j1++) {
if(array[j1][1] == array[j1+1][1]) {
// Kicker ermitteln
if(j1==0) {
if(position) {
// Position-Array fuellen
for(j2=0; j2<5; j2++) {
position[j2] = array[j2][2];
}
}
return 100000000+array[j1][1]*1000000+array[j1+2][1]*10000+array[j1+3][1]*100+array[j1+4][1];
}
if(j1==1) {
if(position) {
// Position-Array fuellen
for(j2=0; j2<5; j2++) {
position[j2] = array[j2][2];
}
}
return 100000000+array[j1][1]*1000000+array[j1-1][1]*10000+array[j1+2][1]*100+array[j1+3][1];
}
if(j1==2) {
if(position) {
// Position-Array fuellen
for(j2=0; j2<5; j2++) {
position[j2] = array[j2][2];
}
}
return 100000000+array[j1][1]*1000000+array[j1-2][1]*10000+array[j1-1][1]*100+array[j1+2][1];
} else { } else {
if(position) { if(temp) { // search for second pair
// Position-Array fuellen for(color_3_idx=0; color_3_idx<3; color_3_idx++) {
for(j2=0; j2<2; j2++) { for(color_4_idx=color_3_idx+1; color_4_idx<4; color_4_idx++) {
position[j2] = array[j1+j2][2]; if(~temp & cards[color_3_idx] & cards[color_4_idx]) {
return 2; // Two Pairs
}
}
} }
position[2] = array[0][2]; return 1; // Two of a Kind
position[3] = array[1][2];
position[4] = array[2][2];
} }
return 100000000+array[j1][1]*1000000+array[0][1]*10000+array[1][1]*100+array[2][1];
} }
} }
} }
// Highest Card (Klasse 0) + Kicker return 0; // High Card
if(position) {
// Position-Array fuellen
for(j2=0; j2<5; j2++) {
position[j2] = array[j2][2];
}
}
return array[0][1]*1000000+array[1][1]*10000+array[2][1]*100+array[3][1]*10+array[4][1];
} }
int CardsValue::cardsValue(int cards[4], int bestHand[4])
std::vector< std::vector<int> > CardsValue::calcCardsChance(GameState beRoID, int* playerCards, int* boardCards)
{ {
int i,j; int color_1_idx;
int card_idx;
KickerValue kickerValue1;
// Royal Flush, Straight Flush, Flush
for(color_1_idx=0; color_1_idx<4; color_1_idx++) { // check all colors
if(bitcount(cards[color_1_idx])>=5) { // check if at least 5 cards of one color
if((cards[color_1_idx] & straight[0]) == straight[0]) { // check for Royal Flush
if(bestHand) bestHand[color_1_idx] = straight[0];
return 900000000; // Royal Flush
} else {
for(card_idx=1; card_idx<10; card_idx++) {
if((cards[color_1_idx] & straight[card_idx]) == straight[card_idx]) { // check for Straight Flush
if(bestHand) bestHand[color_1_idx] = straight[card_idx];
return (800000000+(12-card_idx)*1000000); // Straight Flush
}
}
}
// Flush
kickerValue1 = determineKickerValue(cards[color_1_idx],0,4);
if(bestHand) bestHand[color_1_idx] = kickerValue1.select;
return 500000000 + kickerValue1.factorValue;
}
}
int AND = cards[0] & cards[1] & cards[2] & cards[3];
int OR = cards[0] | cards[1] | cards[2] | cards[3];
int temp1;
KickerValue kickerValue2;
// Four of a Kind
if(AND) {
kickerValue1 = determineKickerValue(AND,0,0);
kickerValue2 = determineKickerValue(OR & ~AND,1,1);
if(bestHand) {
temp1 = kickerValue2.select;
for(color_1_idx=3; color_1_idx>=0; color_1_idx--) {
bestHand[color_1_idx] = (cards[color_1_idx] & (kickerValue1.select | temp1));
if(bestHand[color_1_idx] & temp1) temp1 = 0;
}
}
return 700000000 + kickerValue1.factorValue + kickerValue2.factorValue;
}
// Straight
for(card_idx=0; card_idx<10; card_idx++) {
if((OR & straight[card_idx]) == straight[card_idx]) {
if(bestHand) {
temp1 = straight[card_idx];
for(color_1_idx=3; color_1_idx>=0; color_1_idx--) {
bestHand[color_1_idx] += (temp1 & cards[color_1_idx]);
temp1 &= ~bestHand[color_1_idx];
}
}
return 400000000 + (12-card_idx)*1000000;
}
}
int color_2_idx, color_3_idx;
// Full House, Three of a Kind
temp1 = 0;
for(color_1_idx=0; color_1_idx<2; color_1_idx++) {
for(color_2_idx=color_1_idx+1; color_2_idx<3; color_2_idx++) {
for(color_3_idx=color_2_idx+1; color_3_idx<4; color_3_idx++) {
temp1 |= cards[color_1_idx] & cards[color_2_idx] & cards[color_3_idx];
}
}
}
if(temp1) {
if(bitcount(temp1) == 2) {
// two times Three of a Kind
if(bestHand) {
kickerValue1 = determineKickerValue(temp1,0,0);
kickerValue2 = determineKickerValue(kickerValue1.remain,1,1);
int temp2 = 0;
for(color_1_idx=3; color_1_idx>=0; color_1_idx--) {
if(temp2<2) bestHand[color_1_idx] += (cards[color_1_idx] & (kickerValue1.select | kickerValue2.select));
else bestHand[color_1_idx] += (cards[color_1_idx] & kickerValue1.select);
if(cards[color_1_idx] & kickerValue2.select) temp2++;
}
}
return 600000000 + determineKickerValue(temp1,0,1).factorValue;
} else {
// one times Three of a Kind
int temp2 = temp1;
temp1 = 0;
// check for additional pair
for(color_1_idx=0; color_1_idx<3; color_1_idx++) {
for(color_2_idx=color_1_idx+1; color_2_idx<4; color_2_idx++) {
temp1 |= cards[color_1_idx] & cards[color_2_idx];
}
}
temp1 &= ~temp2; // remove Three of a Kind from found pairs
if(temp1) {
// with additional pair
kickerValue1 = determineKickerValue(temp2,0,0);
kickerValue2 = determineKickerValue(temp1,1,1);
if(bestHand) {
for(color_1_idx=3; color_1_idx>=0; color_1_idx--) bestHand[color_1_idx] = (cards[color_1_idx] & (kickerValue1.select | kickerValue2.select));
}
return 600000000 + kickerValue1.factorValue + kickerValue2.factorValue; // Full House
} else {
// without addition pair
kickerValue1 = determineKickerValue(temp2,0,0);
kickerValue2 = determineKickerValue(OR & ~temp2,1,2);
if(bestHand) {
for(color_1_idx=3; color_1_idx>=0; color_1_idx--) bestHand[color_1_idx] = (cards[color_1_idx] & (kickerValue1.select | kickerValue2.select));
}
return 300000000 + kickerValue1.factorValue + kickerValue2.factorValue; // Three of a Kind
}
}
}
// Two Pairs, Two of a Kind
temp1 = 0;
for(color_1_idx=0; color_1_idx<3; color_1_idx++) {
for(color_2_idx=color_1_idx+1; color_2_idx<4; color_2_idx++) {
temp1 |= (cards[color_1_idx] & cards[color_2_idx]);
}
}
if(temp1) {
if(bitcount(temp1) >= 2) { // at least two times Two of a Kind
kickerValue1 = determineKickerValue(temp1,0,1);
kickerValue2 = determineKickerValue(OR & ~kickerValue1.select,2,2);
if(bestHand) {
temp1 = (kickerValue1.select | kickerValue2.select);
for(color_1_idx=3; color_1_idx>=0; color_1_idx--) {
bestHand[color_1_idx] += (cards[color_1_idx] & temp1);
if(bestHand[color_1_idx] & kickerValue2.select) temp1 &= ~kickerValue2.select;
}
}
return 200000000 + kickerValue1.factorValue + kickerValue2.factorValue; // Two Pairs
} else {
kickerValue1 = determineKickerValue(temp1,0,0);
kickerValue2 = determineKickerValue(OR & ~temp1,1,3);
if(bestHand) {
for(color_1_idx=3; color_1_idx>=0; color_1_idx--) {
bestHand[color_1_idx] += (cards[color_1_idx] & (kickerValue1.select | kickerValue2.select));
}
}
return 100000000 + kickerValue1.factorValue + kickerValue2.factorValue; // Two of a Kind
}
}
// High Card
kickerValue1 = determineKickerValue(OR,0,4);
if(bestHand) {
for(color_1_idx=3; color_1_idx>=0; color_1_idx--) {
bestHand[color_1_idx] += (cards[color_1_idx] & kickerValue1.select);
}
}
return kickerValue1.factorValue;
}
static const int factor_kicker_short[4] = {1000000,10000,100,1};
static const int factor_kicker_long[5] = {1000000,10000,100,10,1};
KickerValue CardsValue::determineKickerValue(int testValue, int factorPointerStart, int factorPointerEnd)
{
KickerValue kickerValue;
kickerValue.factorValue = 0;
kickerValue.remain = testValue;
kickerValue.select = 0;
int compareValue = 4096;
int factorPointer = factorPointerStart;
for(int card_idx=0; (factorPointer<=factorPointerEnd) & (card_idx<13); card_idx++) {
if(kickerValue.remain >= compareValue) {
if(factorPointerEnd - factorPointerStart==4) kickerValue.factorValue += (12-card_idx)*factor_kicker_long[factorPointer];
else kickerValue.factorValue += (12-card_idx)*factor_kicker_short[factorPointer];
kickerValue.remain &= ~compareValue;
factorPointer++;
}
compareValue >>= 1;
}
kickerValue.select = testValue & ~kickerValue.remain;
return kickerValue;
}
std::vector< std::vector<int> > CardsValue::calcCardsChance(GameState beRoID, int playerCards[2], int boardCards[5])
{
std::vector< std::vector<int> > chance(2); std::vector< std::vector<int> > chance(2);
chance[0].assign(10,0);
chance[1].assign(10,0);
chance[0].resize(10); int cards[4] = { 0,0,0,0 };
chance[1].resize(10);
for(i=0; i<10; i++) {
chance[0][i] = 0;
chance[1][i] = 0;
}
int cards[7];
int sum = 0; int sum = 0;
cards[0] = playerCards[0]; int card_idx_1;
cards[1] = playerCards[1]; for(card_idx_1=0; card_idx_1<2; card_idx_1++) cards[playerCards[card_idx_1]/13] |= (1 << (playerCards[card_idx_1]%13));
for(i=0; i<5; i++) cards[i+2] = boardCards[i];
switch(beRoID) { switch(beRoID) {
case GAME_STATE_PREFLOP: { case GAME_STATE_PREFLOP: {
@@ -675,50 +538,60 @@ std::vector< std::vector<int> > CardsValue::calcCardsChance(GameState beRoID, in
break; break;
case GAME_STATE_FLOP: { case GAME_STATE_FLOP: {
for(i=0; i<51; i++) { for(card_idx_1=0; card_idx_1<3; card_idx_1++) cards[boardCards[card_idx_1]/13] |= (1 << (boardCards[card_idx_1]%13));
if(i!=cards[0] && i!=cards[1] && i!=cards[2] && i!=cards[3] && i!=cards[4]) {
for(j=i+1; j<52; j++) { for(card_idx_1=0; card_idx_1<51; card_idx_1++) {
if(j!=cards[0] && j!=cards[1] && j!=cards[2] && j!=cards[3] && j!=cards[4]) { if((cards[card_idx_1/13] & (1 << (card_idx_1%13))) == 0) {
cards[5] = i; cards[card_idx_1/13] |= (1 << (card_idx_1%13));
cards[6] = j; for(int card_idx_2=card_idx_1+1; card_idx_2<52; card_idx_2++) {
(chance[0][cardsValue(cards,0)/100000000])++; if((cards[card_idx_2/13] & (1 << (card_idx_2%13))) == 0) {
cards[card_idx_2/13] |= (1 << (card_idx_2%13));
(chance[0][cardsValueShort(cards)])++;
sum++; sum++;
cards[card_idx_2/13] &= ~(1 << (card_idx_2%13));
} }
} }
cards[card_idx_1/13] &= ~(1 << (card_idx_1%13));
} }
} }
for(i=0; i<10; i++) {
if(chance[0][i] > 0) chance[1][i] = 1;
chance[0][i] = (int)(((double)chance[0][i]/(double)sum)*100.0+0.5);
}
} }
break; break;
case GAME_STATE_TURN: { case GAME_STATE_TURN: {
for(i=0; i<52; i++) { for(card_idx_1=0; card_idx_1<4; card_idx_1++) cards[boardCards[card_idx_1]/13] |= (1 << (boardCards[card_idx_1]%13));
if(i!=cards[0] && i!=cards[1] && i!=cards[2] && i!=cards[3] && i!=cards[4] && i!=cards[5]) {
cards[6] = i; for(card_idx_1=0; card_idx_1<52; card_idx_1++) {
(chance[0][cardsValue(cards,0)/100000000])++; if((cards[card_idx_1/13] & (1 << (card_idx_1%13))) == 0) {
cards[card_idx_1/13] |= (1 << (card_idx_1%13));
(chance[0][cardsValueShort(cards)])++;
sum++; sum++;
cards[card_idx_1/13] &= ~(1 << (card_idx_1%13));
} }
} }
for(i=0; i<10; i++) {
if(chance[0][i] > 0) chance[1][i] = 1;
chance[0][i] = (int)(((double)chance[0][i]/(double)sum)*100.0+0.5);
}
} }
break; break;
case GAME_STATE_RIVER: { case GAME_STATE_RIVER: {
chance[0][cardsValue(cards,0)/100000000] = 100;
chance[1][cardsValue(cards,0)/100000000] = 1; for(card_idx_1=0; card_idx_1<5; card_idx_1++) cards[boardCards[card_idx_1]/13] |= (1 << (boardCards[card_idx_1]%13));
chance[0][cardsValueShort(cards)] = 1;
sum = 1;
} }
break; break;
default: { default: {
} }
} }
if(beRoID>GAME_STATE_PREFLOP) {
for(int hand_idx=0; hand_idx<10; hand_idx++) {
if(chance[0][hand_idx] > 0) chance[1][hand_idx] = 1;
chance[0][hand_idx] = (int)(((double)chance[0][hand_idx]/(double)sum)*100.0+0.5);
}
}
return chance; return chance;
} }
@@ -756,7 +629,7 @@ std::string CardsValue::determineHandName(int myCardsValueInt, PlayerList active
std::string handName; std::string handName;
switch(myCardsValueInt/100000000) { switch(myCardsValueInt/100000000) {
// Royal Flush // Royal Flush
case 9: { case 9: {
handName = *cardStringIt_c; handName = *cardStringIt_c;
@@ -1161,8 +1034,8 @@ std::string CardsValue::determineHandName(int myCardsValueInt, PlayerList active
} }
} }
break; break;
default: { default:
} {}
} }
return handName; return handName;
@@ -1191,11 +1064,11 @@ std::list<std::string> CardsValue::translateCardsValueCode(int cardsValueCode)
switch (firstPart) { switch (firstPart) {
// Royal Flush // Royal Flush
case 9: case 9:
cardString.push_back("Royal Flush"); cardString.push_back("Royal Flush");
break; break;
// Straight Flush // Straight Flush
case 8: { case 8: {
cardString.push_back("Straight Flush, "); cardString.push_back("Straight Flush, ");
switch(secondPart) { switch(secondPart) {
@@ -2320,6 +2193,44 @@ std::list<std::string> CardsValue::translateCardsValueCode(int cardsValueCode)
} }
int CardsValue::bitcount(int in)
{
int count=0 ;
while (in) {
count++ ;
in &= (in - 1) ;
}
return count ;
}
int
CardsValue::bestHandToPosition(int bestHand[4], int cardArray[7], int position[5])
{
for(int card_idx=0; card_idx<5; card_idx++) position[card_idx] = -1;
int position_ctr = 0;
for(int color_idx=0; color_idx<4; color_idx++) {
for(int card_idx_1=0; card_idx_1<13; card_idx_1++) {
if(bestHand[color_idx] & (1<<card_idx_1)) {
for(int card_idx_2=0; card_idx_2<7; card_idx_2++) {
if(cardArray[card_idx_2] == color_idx*13+card_idx_1) {
if(position_ctr<5) {
position[position_ctr] = card_idx_2;
position_ctr++;
} else {
return 0;
}
}
}
}
}
}
if(position_ctr!=5) return 0;
else return 1;
}
//int** CardsValue::showdown(GameState beRoID, int** playerCards, int playerCount) { //int** CardsValue::showdown(GameState beRoID, int** playerCards, int playerCount) {
// //
+14 -4
View File
@@ -38,18 +38,28 @@
#include <iostream> #include <iostream>
#include <vector> #include <vector>
struct KickerValue {
int factorValue;
int select;
int remain;
};
class CardsValue class CardsValue
{ {
public: public:
static int holeCardsClass(int, int); static int holeCardsClass(int, int);
static int cardsValue(int*, int*); static int cardsValueShort(int[4]);
static int cardsValue(int[4], int[4] = 0);
static KickerValue determineKickerValue(int, int, int);
static std::string determineHandName(int myCardsValueInt, PlayerList activePlayerList); static std::string determineHandName(int myCardsValueInt, PlayerList activePlayerList);
static std::list<std::string> translateCardsValueCode(int cardsValueCode); static std::list<std::string> translateCardsValueCode(int cardsValueCode);
static int holeCardsToIntCode(int*); static int holeCardsToIntCode(int[2]);
static int* intCodeToHoleCards(int);
static std::vector< std::vector<int> > calcCardsChance(GameState, int*, int*); static std::vector< std::vector<int> > calcCardsChance(GameState, int[2], int[5]);
static int bitcount(int in);
static int bestHandToPosition(int bestHand[4], int cardArray[7], int position[5]);
//static int** showdown(GameState, int**, int); //static int** showdown(GameState, int**, int);
}; };
+6 -6
View File
@@ -147,26 +147,26 @@ void LocalBeRo::run()
//log the turned cards //log the turned cards
if(!logBoardCardsDone) { if(!logBoardCardsDone) {
int tempBoardCardsArray[5]; int boardCards[5];
myHand->getBoard()->getMyCards(tempBoardCardsArray); myHand->getBoard()->getMyCards(boardCards);
switch(myBeRoID) { switch(myBeRoID) {
case GAME_STATE_FLOP: case GAME_STATE_FLOP:
myHand->getGuiInterface()->logDealBoardCardsMsg(myBeRoID, tempBoardCardsArray[0], tempBoardCardsArray[1], tempBoardCardsArray[2]); myHand->getGuiInterface()->logDealBoardCardsMsg(myBeRoID, boardCards[0], boardCards[1], boardCards[2]);
break; break;
case GAME_STATE_TURN: case GAME_STATE_TURN:
myHand->getGuiInterface()->logDealBoardCardsMsg(myBeRoID, tempBoardCardsArray[0], tempBoardCardsArray[1], tempBoardCardsArray[2], tempBoardCardsArray[3]); myHand->getGuiInterface()->logDealBoardCardsMsg(myBeRoID, boardCards[0], boardCards[1], boardCards[2], boardCards[3]);
break; break;
case GAME_STATE_RIVER: case GAME_STATE_RIVER:
myHand->getGuiInterface()->logDealBoardCardsMsg(myBeRoID, tempBoardCardsArray[0], tempBoardCardsArray[1], tempBoardCardsArray[2], tempBoardCardsArray[3], tempBoardCardsArray[4]); myHand->getGuiInterface()->logDealBoardCardsMsg(myBeRoID, boardCards[0], boardCards[1], boardCards[2], boardCards[3], boardCards[4]);
break; break;
default: { default: {
LOG_ERROR(__FILE__ << " (" << __LINE__ << "): ERROR - wrong myBeRoID"); LOG_ERROR(__FILE__ << " (" << __LINE__ << "): ERROR - wrong myBeRoID");
} }
} }
if(myHand->getLog()) myHand->getLog()->logBoardCards(tempBoardCardsArray); if(myHand->getLog()) myHand->getLog()->logBoardCards(boardCards);
logBoardCardsDone = true; logBoardCardsDone = true;
} }
+30 -60
View File
@@ -44,34 +44,28 @@ public:
LocalBeRo(HandInterface* hi, unsigned dP, int sB, GameState gS); LocalBeRo(HandInterface* hi, unsigned dP, int sB, GameState gS);
~LocalBeRo(); ~LocalBeRo();
GameState getMyBeRoID() const GameState getMyBeRoID() const {
{
return myBeRoID; return myBeRoID;
} }
int getHighestCardsValue() const; int getHighestCardsValue() const;
void setHighestCardsValue(int /*theValue*/) { } void setHighestCardsValue(int /*theValue*/) { }
void setMinimumRaise ( int theValue ) void setMinimumRaise ( int theValue ) {
{
minimumRaise = theValue; minimumRaise = theValue;
} }
int getMinimumRaise() const int getMinimumRaise() const {
{
return minimumRaise; return minimumRaise;
} }
void setFullBetRule ( bool theValue ) void setFullBetRule ( bool theValue ) {
{
fullBetRule = theValue; fullBetRule = theValue;
} }
bool getFullBetRule() const bool getFullBetRule() const {
{
return fullBetRule; return fullBetRule;
} }
void skipFirstRunGui() void skipFirstRunGui() {
{
firstRunGui = false; firstRunGui = false;
} }
@@ -83,113 +77,89 @@ public:
protected: protected:
HandInterface* getMyHand() const HandInterface* getMyHand() const {
{
return myHand; return myHand;
} }
unsigned getDealerPosition() const unsigned getDealerPosition() const {
{
return dealerPosition; return dealerPosition;
} }
void setCurrentPlayersTurnId(unsigned theValue) void setCurrentPlayersTurnId(unsigned theValue) {
{
currentPlayersTurnId = theValue; currentPlayersTurnId = theValue;
} }
unsigned getCurrentPlayersTurnId() const unsigned getCurrentPlayersTurnId() const {
{
return currentPlayersTurnId; return currentPlayersTurnId;
} }
void setFirstRoundLastPlayersTurnId(unsigned theValue) void setFirstRoundLastPlayersTurnId(unsigned theValue) {
{
firstRoundLastPlayersTurnId = theValue; firstRoundLastPlayersTurnId = theValue;
} }
unsigned getFirstRoundLastPlayersTurnId() const unsigned getFirstRoundLastPlayersTurnId() const {
{
return firstRoundLastPlayersTurnId; return firstRoundLastPlayersTurnId;
} }
void setCurrentPlayersTurnIt(PlayerListIterator theValue) void setCurrentPlayersTurnIt(PlayerListIterator theValue) {
{
currentPlayersTurnIt = theValue; currentPlayersTurnIt = theValue;
} }
PlayerListIterator getCurrentPlayersTurnIt() const PlayerListIterator getCurrentPlayersTurnIt() const {
{
return currentPlayersTurnIt; return currentPlayersTurnIt;
} }
void setLastPlayersTurnIt(PlayerListIterator theValue) void setLastPlayersTurnIt(PlayerListIterator theValue) {
{
lastPlayersTurnIt = theValue; lastPlayersTurnIt = theValue;
} }
PlayerListIterator getLastPlayersTurnIt() const PlayerListIterator getLastPlayersTurnIt() const {
{
return lastPlayersTurnIt; return lastPlayersTurnIt;
} }
void setHighestSet(int theValue) void setHighestSet(int theValue) {
{
highestSet = theValue; highestSet = theValue;
} }
int getHighestSet() const int getHighestSet() const {
{
return highestSet; return highestSet;
} }
void setFirstRun(bool theValue) void setFirstRun(bool theValue) {
{
firstRun = theValue; firstRun = theValue;
} }
bool getFirstRun() const bool getFirstRun() const {
{
return firstRun; return firstRun;
} }
void setFirstRound(bool theValue) void setFirstRound(bool theValue) {
{
firstRound = theValue; firstRound = theValue;
} }
bool getFirstRound() const bool getFirstRound() const {
{
return firstRound; return firstRound;
} }
void setSmallBlindPositionId(unsigned theValue) void setSmallBlindPositionId(unsigned theValue) {
{
smallBlindPositionId = theValue; smallBlindPositionId = theValue;
} }
unsigned getSmallBlindPositionId() const unsigned getSmallBlindPositionId() const {
{
return smallBlindPositionId; return smallBlindPositionId;
} }
void setBigBlindPositionId(unsigned theValue) void setBigBlindPositionId(unsigned theValue) {
{
bigBlindPositionId = theValue; bigBlindPositionId = theValue;
} }
unsigned getBigBlindPositionId() const unsigned getBigBlindPositionId() const {
{
return bigBlindPositionId; return bigBlindPositionId;
} }
void setSmallBlindPosition(int theValue) void setSmallBlindPosition(int theValue) {
{
smallBlindPosition = theValue; smallBlindPosition = theValue;
} }
int getSmallBlindPosition() const int getSmallBlindPosition() const {
{
return smallBlindPosition; return smallBlindPosition;
} }
void setSmallBlind(int theValue) void setSmallBlind(int theValue) {
{
smallBlind = theValue; smallBlind = theValue;
} }
int getSmallBlind() const int getSmallBlind() const {
{
return smallBlind; return smallBlind;
} }
+2 -4
View File
@@ -44,12 +44,10 @@ public:
LocalBeRoPostRiver(HandInterface*, int, int); LocalBeRoPostRiver(HandInterface*, int, int);
~LocalBeRoPostRiver(); ~LocalBeRoPostRiver();
void setHighestCardsValue(int theValue) void setHighestCardsValue(int theValue) {
{
highestCardsValue = theValue; highestCardsValue = theValue;
} }
int getHighestCardsValue() const int getHighestCardsValue() const {
{
return highestCardsValue; return highestCardsValue;
} }
+22 -19
View File
@@ -145,7 +145,7 @@ void LocalBoard::distributePot(unsigned dealerPosition)
// determine the number of level winners // determine the number of level winners
winnerCount = potLevel.size()-2; winnerCount = potLevel.size()-2;
if (!winnerCount) { if (!winnerCount) {
throw LocalException(__FILE__, __LINE__, ERR_NO_WINNER); LOG_ERROR(__FILE__ << " (" << __LINE__ << "): distributePot-ERROR: no winner found");
} }
// check if this is the final pot level for at least one winner // check if this is the final pot level for at least one winner
@@ -161,7 +161,7 @@ void LocalBoard::distributePot(unsigned dealerPosition)
if(finalPot) break; if(finalPot) break;
} }
if(finalPot) { if(finalPot && winnerCount>0) {
// distribute the pot level sum to level winners // distribute the pot level sum to level winners
mod = (potLevel[1])%winnerCount; mod = (potLevel[1])%winnerCount;
// pot level sum divisible by winnerCount // pot level sum divisible by winnerCount
@@ -175,13 +175,13 @@ void LocalBoard::distributePot(unsigned dealerPosition)
} }
} }
if(it == seatsList->end()) { if(it == seatsList->end()) {
throw LocalException(__FILE__, __LINE__, ERR_SEAT_NOT_FOUND); LOG_ERROR(__FILE__ << " (" << __LINE__ << "): distributePot-ERROR: seat not found");
} else {
(*it)->setMyCash( (*it)->getMyCash() + ((potLevel[1])/winnerCount));
// filling winners vector
winners.push_back((*it)->getMyUniqueID());
(*it)->setLastMoneyWon( (*it)->getLastMoneyWon() + (potLevel[1])/winnerCount );
} }
(*it)->setMyCash( (*it)->getMyCash() + ((potLevel[1])/winnerCount));
// filling winners vector
winners.push_back((*it)->getMyUniqueID());
(*it)->setLastMoneyWon( (*it)->getLastMoneyWon() + (potLevel[1])/winnerCount );
} }
} }
@@ -196,7 +196,8 @@ void LocalBoard::distributePot(unsigned dealerPosition)
} }
} }
if(it == seatsList->end()) { if(it == seatsList->end()) {
throw LocalException(__FILE__, __LINE__, ERR_SEAT_NOT_FOUND); it = seatsList->begin();
LOG_ERROR(__FILE__ << " (" << __LINE__ << "): distributePot-ERROR: dealer position not found");
} }
for(j=0; j<winnerCount; j++) { for(j=0; j<winnerCount; j++) {
@@ -216,16 +217,18 @@ void LocalBoard::distributePot(unsigned dealerPosition)
} }
if(j<mod) { if(winnerHit) {
(*it)->setMyCash( (*it)->getMyCash() + (int)((potLevel[1])/winnerCount) + 1); if(j<mod) {
// filling winners vector (*it)->setMyCash( (*it)->getMyCash() + (int)((potLevel[1])/winnerCount) + 1);
winners.push_back((*it)->getMyUniqueID()); // filling winners vector
(*it)->setLastMoneyWon( (*it)->getLastMoneyWon() + ((potLevel[1])/winnerCount) + 1 ); winners.push_back((*it)->getMyUniqueID());
} else { (*it)->setLastMoneyWon( (*it)->getLastMoneyWon() + ((potLevel[1])/winnerCount) + 1 );
(*it)->setMyCash( (*it)->getMyCash() + (int)((potLevel[1])/winnerCount)); } else {
// filling winners vector (*it)->setMyCash( (*it)->getMyCash() + (int)((potLevel[1])/winnerCount));
winners.push_back((*it)->getMyUniqueID()); // filling winners vector
(*it)->setLastMoneyWon( (*it)->getLastMoneyWon() + (potLevel[1])/winnerCount ); winners.push_back((*it)->getMyUniqueID());
(*it)->setLastMoneyWon( (*it)->getLastMoneyWon() + (potLevel[1])/winnerCount );
}
} }
} }
} }
+12 -24
View File
@@ -50,40 +50,32 @@ public:
void setPlayerLists(PlayerList, PlayerList, PlayerList); void setPlayerLists(PlayerList, PlayerList, PlayerList);
void setMyCards(int* theValue) void setMyCards(int* theValue) {
{
int i; int i;
for(i=0; i<5; i++) myCards[i] = theValue[i]; for(i=0; i<5; i++) myCards[i] = theValue[i];
} }
void getMyCards(int* theValue) void getMyCards(int* theValue) {
{
int i; int i;
for(i=0; i<5; i++) theValue[i] = myCards[i]; for(i=0; i<5; i++) theValue[i] = myCards[i];
} }
void setAllInCondition(bool theValue) void setAllInCondition(bool theValue) {
{
allInCondition = theValue; allInCondition = theValue;
} }
void setLastActionPlayerID(unsigned theValue) void setLastActionPlayerID(unsigned theValue) {
{
lastActionPlayerID = theValue; lastActionPlayerID = theValue;
} }
int getPot() const int getPot() const {
{
return pot; return pot;
} }
void setPot(int theValue) void setPot(int theValue) {
{
pot = theValue; pot = theValue;
} }
int getSets() const int getSets() const {
{
return sets; return sets;
} }
void setSets(int theValue) void setSets(int theValue) {
{
sets = theValue; sets = theValue;
} }
@@ -93,21 +85,17 @@ public:
void distributePot(unsigned dealerPosition); void distributePot(unsigned dealerPosition);
void determinePlayerNeedToShowCards(); void determinePlayerNeedToShowCards();
std::list<unsigned> getWinners() const std::list<unsigned> getWinners() const {
{
return winners; return winners;
} }
void setWinners(const std::list<unsigned> &w) void setWinners(const std::list<unsigned> &w) {
{
winners = w; winners = w;
} }
std::list<unsigned> getPlayerNeedToShowCards() const std::list<unsigned> getPlayerNeedToShowCards() const {
{
return playerNeedToShowCards; return playerNeedToShowCards;
} }
void setPlayerNeedToShowCards(const std::list<unsigned> &p) void setPlayerNeedToShowCards(const std::list<unsigned> &p) {
{
playerNeedToShowCards = p; playerNeedToShowCards = p;
} }
+63 -321
View File
@@ -53,12 +53,12 @@ LocalHand::LocalHand(boost::shared_ptr<EngineFactory> f, GuiInterface *g, boost:
for(it=seatsList->begin(); it!=seatsList->end(); ++it) { for(it=seatsList->begin(); it!=seatsList->end(); ++it) {
(*it)->setHand(this); (*it)->setHand(this);
// set myFlipCards 0 // set myFlipCards 0
(*it)->setMyCardsFlip(0, 0); (*it)->setMyHoleCardsFlip(0, 0);
} }
// generate cards and assign to board and player // generate cards and assign to board and player
const int NumCards = 52; const int NumCards = 52;
int cardsArray[NumCards] = { int cards[NumCards] = {
0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 0, 1, 2, 3, 4, 5, 6, 7, 8, 9,
10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19,
20, 21, 22, 23, 24, 25, 26, 27, 28, 29, 20, 21, 22, 23, 24, 25, 26, 27, 28, 29,
@@ -66,40 +66,50 @@ LocalHand::LocalHand(boost::shared_ptr<EngineFactory> f, GuiInterface *g, boost:
40, 41, 42, 43, 44, 45, 46, 47, 48, 49, 40, 41, 42, 43, 44, 45, 46, 47, 48, 49,
50, 51 50, 51
}; };
Tools::ShuffleArrayNonDeterministic(cardsArray, NumCards); Tools::ShuffleArrayNonDeterministic(cards, NumCards);
int tempBoardArray[5]; int boardCards[5];
int tempPlayerArray[2]; int playerHoleCards[2];
int tempPlayerAndBoardArray[7]; int playerCards[7];
int bestHandPos[5];
int sBluff; int sBluff;
for(i=0; i<5; i++) {
tempBoardArray[i] = cardsArray[i]; // board cards
tempPlayerAndBoardArray[i+2] = cardsArray[i]; for(i=0; i<5; i++) boardCards[i] = cards[i];
}
// debug mode
if(myLog) myLog->debugMode_getBoardCards(boardCards,myID);
// prepare whole player hand
for(i=0; i<5; i++) playerCards[i+2] = boardCards[i];
k = 0; k = 0;
myBoard->setMyCards(tempBoardArray); myBoard->setMyCards(boardCards);
for(it=activePlayerList->begin(); it!=activePlayerList->end(); ++it, k++) { for(it=activePlayerList->begin(); it!=activePlayerList->end(); ++it, k++) {
(*it)->getMyBestHandPosition(bestHandPos); // hole cards
for(j=0; j<2; j++) playerHoleCards[j] = cards[2*k+j+5];
(*it)->setMyHoleCards(playerHoleCards);
if(myLog) myLog->debugMode_getPlayerCards(playerHoleCards,myID,k); // debug mode
for(j=0; j<2; j++) { // complete whole player hand
tempPlayerArray[j] = cardsArray[2*k+j+5]; for(j=0; j<2; j++) playerCards[j] = playerHoleCards[j];
tempPlayerAndBoardArray[j] = cardsArray[2*k+j+5];
// determine cards value
int bestHand[4] = { 0,0,0,0 };
int playerCardsColor[4] = { 0,0,0,0 };
for(j=0; j<7; j++) playerCardsColor[playerCards[j]/13] |= (1 << playerCards[j]%13);
(*it)->setMyCardsValueInt(CardsValue::cardsValue(playerCardsColor,bestHand));
// determine position of best 5 cards
int bestHandPos[5];
if(CardsValue::bestHandToPosition(bestHand,playerCards,bestHandPos)) {
(*it)->setMyBestHandPosition(bestHandPos);
} else {
LOG_ERROR(__FILE__ << " (" << __LINE__ << "): ERROR getMyBestHandPosition");
} }
(*it)->setMyCards(tempPlayerArray); // set round start cash
(*it)->setMyCardsValueInt(CardsValue::cardsValue(tempPlayerAndBoardArray, bestHandPos));
(*it)->setMyBestHandPosition(bestHandPos);
(*it)->setMyRoundStartCash((*it)->getMyCash()); (*it)->setMyRoundStartCash((*it)->getMyCash());
// error-check
for(j=0; j<5; j++) {
if (bestHandPos[j] == -1) {
LOG_ERROR(__FILE__ << " (" << __LINE__ << "): ERROR getMyBestHandPosition");
}
}
// set sBluff for all players --> TODO for ai-player in internet // set sBluff for all players --> TODO for ai-player in internet
if((*it)->getMyID() != 0) { if((*it)->getMyID() != 0) {
Tools::GetRand(1, 100, 1, &sBluff); Tools::GetRand(1, 100, 1, &sBluff);
@@ -108,274 +118,8 @@ LocalHand::LocalHand(boost::shared_ptr<EngineFactory> f, GuiInterface *g, boost:
} }
} }
// !!!!!!!!!!!!!!!!!!!!!!!!!!!!! DEBUGGER !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! // // determine dealer, small blind, big blind
if(DEBUG_MODE) {
//QSqlDatabase *mySqliteLogDb;
// myGui->getMyW()->getSession();
//QSqlDatabase * test = myGui->getMyLog()->getMySqliteLogDb();
// if(!mySqliteLogDb->open()) {
// MyMessageBox::critical(0, tr("ERROR"),mySqliteLogDb->lastError().text().toUtf8().c_str(), QMessageBox::Cancel);
// }
int temp5Array[5];
switch(myID) {
case 1: {
tempBoardArray[0] = 4;
tempBoardArray[1] = 19;
tempBoardArray[2] = 20;
tempBoardArray[3] = 43;
tempBoardArray[4] = 49;
myBoard->setMyCards(tempBoardArray);
tempPlayerAndBoardArray[2] = tempBoardArray[0];
tempPlayerAndBoardArray[3] = tempBoardArray[1];
tempPlayerAndBoardArray[4] = tempBoardArray[2];
tempPlayerAndBoardArray[5] = tempBoardArray[3];
tempPlayerAndBoardArray[6] = tempBoardArray[4];
// player0
it = seatsList->begin();
tempPlayerArray[0] = 18;
tempPlayerArray[1] = 17;
tempPlayerAndBoardArray[0] = tempPlayerArray[0];
tempPlayerAndBoardArray[1] = tempPlayerArray[1];
(*it)->setMyCards(tempPlayerArray);
(*it)->setMyCardsValueInt(CardsValue::cardsValue(tempPlayerAndBoardArray,temp5Array));
(*it)->setMyBestHandPosition(temp5Array);
// player1
++it;
tempPlayerArray[0] = 31;
tempPlayerArray[1] = 8;
tempPlayerAndBoardArray[0] = tempPlayerArray[0];
tempPlayerAndBoardArray[1] = tempPlayerArray[1];
(*it)->setMyCards(tempPlayerArray);
(*it)->setMyCardsValueInt(CardsValue::cardsValue(tempPlayerAndBoardArray,temp5Array));
(*it)->setMyBestHandPosition(temp5Array);
// player2
++it;
tempPlayerArray[0] = 26;
tempPlayerArray[1] = 27;
tempPlayerAndBoardArray[0] = tempPlayerArray[0];
tempPlayerAndBoardArray[1] = tempPlayerArray[1];
(*it)->setMyCards(tempPlayerArray);
(*it)->setMyCardsValueInt(CardsValue::cardsValue(tempPlayerAndBoardArray,temp5Array));
(*it)->setMyBestHandPosition(temp5Array);
// player3
++it;
tempPlayerArray[0] = 31;
tempPlayerArray[1] = 30;
tempPlayerAndBoardArray[0] = tempPlayerArray[0];
tempPlayerAndBoardArray[1] = tempPlayerArray[1];
(*it)->setMyCards(tempPlayerArray);
(*it)->setMyCardsValueInt(CardsValue::cardsValue(tempPlayerAndBoardArray,temp5Array));
(*it)->setMyBestHandPosition(temp5Array);
// player4
++it;
tempPlayerArray[0] = 50;
tempPlayerArray[1] = 51;
tempPlayerAndBoardArray[0] = tempPlayerArray[0];
tempPlayerAndBoardArray[1] = tempPlayerArray[1];
(*it)->setMyCards(tempPlayerArray);
(*it)->setMyCardsValueInt(CardsValue::cardsValue(tempPlayerAndBoardArray,temp5Array));
(*it)->setMyBestHandPosition(temp5Array);
// player5
++it;
tempPlayerArray[0] = 25;
tempPlayerArray[1] = 24;
tempPlayerAndBoardArray[0] = tempPlayerArray[0];
tempPlayerAndBoardArray[1] = tempPlayerArray[1];
(*it)->setMyCards(tempPlayerArray);
(*it)->setMyCardsValueInt(CardsValue::cardsValue(tempPlayerAndBoardArray,temp5Array));
(*it)->setMyBestHandPosition(temp5Array);
// player6
++it;
tempPlayerArray[0] = 38;
tempPlayerArray[1] = 37;
tempPlayerAndBoardArray[0] = tempPlayerArray[0];
tempPlayerAndBoardArray[1] = tempPlayerArray[1];
(*it)->setMyCards(tempPlayerArray);
(*it)->setMyCardsValueInt(CardsValue::cardsValue(tempPlayerAndBoardArray,temp5Array));
(*it)->setMyBestHandPosition(temp5Array);
// player7
++it;
tempPlayerArray[0] = 32;
tempPlayerArray[1] = 33;
tempPlayerAndBoardArray[0] = tempPlayerArray[0];
tempPlayerAndBoardArray[1] = tempPlayerArray[1];
(*it)->setMyCards(tempPlayerArray);
(*it)->setMyCardsValueInt(CardsValue::cardsValue(tempPlayerAndBoardArray,temp5Array));
(*it)->setMyBestHandPosition(temp5Array);
// player8
++it;
tempPlayerArray[0] = 19;
tempPlayerArray[1] = 20;
tempPlayerAndBoardArray[0] = tempPlayerArray[0];
tempPlayerAndBoardArray[1] = tempPlayerArray[1];
(*it)->setMyCards(tempPlayerArray);
(*it)->setMyCardsValueInt(CardsValue::cardsValue(tempPlayerAndBoardArray,temp5Array));
(*it)->setMyBestHandPosition(temp5Array);
}
break;
case 2: {
/* tempBoardArray[0] = 48;
tempBoardArray[1] = 21;
tempBoardArray[2] = 4;
tempBoardArray[3] = 9;
tempBoardArray[4] = 0;
myBoard->setMyCards(tempBoardArray);
tempPlayerAndBoardArray[2] = tempBoardArray[0];
tempPlayerAndBoardArray[3] = tempBoardArray[1];
tempPlayerAndBoardArray[4] = tempBoardArray[2];
tempPlayerAndBoardArray[5] = tempBoardArray[3];
tempPlayerAndBoardArray[6] = tempBoardArray[4];*/
// player0
it = seatsList->begin();
// tempPlayerArray[0] = 9;
// tempPlayerArray[1] = 5;
// tempPlayerAndBoardArray[0] = tempPlayerArray[0];
// tempPlayerAndBoardArray[1] = tempPlayerArray[1];
//
// (*it)->setMyCards(tempPlayerArray);
// (*it)->setMyCardsValueInt(CardsValue::cardsValue(tempPlayerAndBoardArray,temp5Array));
//
// (*it)->setMyBestHandPosition(temp5Array);
// player1
++it;
// tempPlayerArray[0] = 47;
// tempPlayerArray[1] = 22;
// tempPlayerAndBoardArray[0] = tempPlayerArray[0];
// tempPlayerAndBoardArray[1] = tempPlayerArray[1];
//
// (*it)->setMyCards(tempPlayerArray);
// (*it)->setMyCardsValueInt(CardsValue::cardsValue(tempPlayerAndBoardArray,temp5Array));
//
// (*it)->setMyBestHandPosition(temp5Array);
// player2
++it;
// tempPlayerArray[0] = 33;
// tempPlayerArray[1] = 27;
// tempPlayerAndBoardArray[0] = tempPlayerArray[0];
// tempPlayerAndBoardArray[1] = tempPlayerArray[1];
//
// (*it)->setMyCards(tempPlayerArray);
// (*it)->setMyCardsValueInt(CardsValue::cardsValue(tempPlayerAndBoardArray,temp5Array));
//
// (*it)->setMyBestHandPosition(temp5Array);
// player3
++it;
// tempPlayerArray[0] = 38;
// tempPlayerArray[1] = 22;
// tempPlayerAndBoardArray[0] = tempPlayerArray[0];
// tempPlayerAndBoardArray[1] = tempPlayerArray[1];
//
// (*it)->setMyCards(tempPlayerArray);
// (*it)->setMyCardsValueInt(CardsValue::cardsValue(tempPlayerAndBoardArray,temp5Array));
//
// (*it)->setMyBestHandPosition(temp5Array);
// player4
++it;
// tempPlayerArray[0] = 25;
// tempPlayerArray[1] = 16;
// tempPlayerAndBoardArray[0] = tempPlayerArray[0];
// tempPlayerAndBoardArray[1] = tempPlayerArray[1];
//
// (*it)->setMyCards(tempPlayerArray);
// (*it)->setMyCardsValueInt(CardsValue::cardsValue(tempPlayerAndBoardArray,temp5Array));
//
// (*it)->setMyBestHandPosition(temp5Array);
// player5
++it;
// tempPlayerArray[0] = 27;
// tempPlayerArray[1] = 10;
// tempPlayerAndBoardArray[0] = tempPlayerArray[0];
// tempPlayerAndBoardArray[1] = tempPlayerArray[1];
//
// (*it)->setMyCards(tempPlayerArray);
// (*it)->setMyCardsValueInt(CardsValue::cardsValue(tempPlayerAndBoardArray,temp5Array));
//
// (*it)->setMyBestHandPosition(temp5Array);
}
break;
default: {
}
}
}
// ----------------------------------------
// determine dealer, SB, BB
assignButtons(); assignButtons();
setBlinds(); setBlinds();
if(myLog) myLog->logNewHandMsg(myID, dealerPosition+1, smallBlind, smallBlindPosition+1, 2*smallBlind, bigBlindPosition+1, seatsList); if(myLog) myLog->logNewHandMsg(myID, dealerPosition+1, smallBlind, smallBlindPosition+1, 2*smallBlind, bigBlindPosition+1, seatsList);
@@ -401,7 +145,6 @@ void LocalHand::start()
} else { } else {
LOG_ERROR(__FILE__ << " (" << __LINE__ << "): Log Error: cannot find sBID or bBID"); LOG_ERROR(__FILE__ << " (" << __LINE__ << "): Log Error: cannot find sBID or bBID");
} }
myGui->flushLogAtHand();
// deal cards // deal cards
myGui->dealHoleCards(); myGui->dealHoleCards();
@@ -416,20 +159,19 @@ void LocalHand::start()
void LocalHand::assignButtons() void LocalHand::assignButtons()
{ {
size_t i; PlayerListIterator seatIt;
PlayerListIterator it;
// delete all buttons // delete all buttons
for (it=seatsList->begin(); it!=seatsList->end(); ++it) { for (seatIt=seatsList->begin(); seatIt!=seatsList->end(); ++seatIt) {
(*it)->setMyButton(BUTTON_NONE); (*seatIt)->setMyButton(BUTTON_NONE);
} }
// assign dealer button // assign dealer button
it = getSeatIt(dealerPosition); seatIt = getSeatIt(dealerPosition);
if(it == seatsList->end()) { if(seatIt == seatsList->end()) {
throw LocalException(__FILE__, __LINE__, ERR_SEAT_NOT_FOUND); throw LocalException(__FILE__, __LINE__, ERR_SEAT_NOT_FOUND);
} }
(*it)->setMyButton(BUTTON_DEALER); (*seatIt)->setMyButton(BUTTON_DEALER);
// assign Small Blind next to dealer. ATTENTION: in heads up it is big blind // assign Small Blind next to dealer. ATTENTION: in heads up it is big blind
@@ -440,40 +182,40 @@ void LocalHand::assignButtons()
throw LocalException(__FILE__, __LINE__, ERR_SEAT_NOT_FOUND); throw LocalException(__FILE__, __LINE__, ERR_SEAT_NOT_FOUND);
} }
for(i=0; i<seatsList->size(); i++) { for(size_t i=0; i<seatsList->size(); i++) {
++dealerPositionIt; ++dealerPositionIt;
if(dealerPositionIt == seatsList->end()) dealerPositionIt = seatsList->begin(); if(dealerPositionIt == seatsList->end()) dealerPositionIt = seatsList->begin();
it = getActivePlayerIt( (*dealerPositionIt)->getMyUniqueID() ); PlayerListIterator activePlayerIt = getActivePlayerIt( (*dealerPositionIt)->getMyUniqueID() );
if(it != activePlayerList->end() ) { if(activePlayerIt != activePlayerList->end() ) {
nextActivePlayerFound = true; nextActivePlayerFound = true;
if(activePlayerList->size() > 2) { if(activePlayerList->size() > 2) {
//small blind normal //small blind normal
(*it)->setMyButton(2); (*activePlayerIt)->setMyButton(2);
smallBlindPosition = (*it)->getMyUniqueID(); smallBlindPosition = (*activePlayerIt)->getMyUniqueID();
} else { } else {
//big blind in heads up //big blind in heads up
(*it)->setMyButton(3); (*activePlayerIt)->setMyButton(3);
bigBlindPosition = (*it)->getMyUniqueID(); bigBlindPosition = (*activePlayerIt)->getMyUniqueID();
// lastPlayerAction for showing cards // lastPlayerAction for showing cards
} }
// first player after dealer have to show his cards first (in showdown) // first player after dealer have to show his cards first (in showdown)
lastActionPlayerID = (*it)->getMyUniqueID(); lastActionPlayerID = (*activePlayerIt)->getMyUniqueID();
myBoard->setLastActionPlayerID(lastActionPlayerID); myBoard->setLastActionPlayerID(lastActionPlayerID);
++it; ++activePlayerIt;
if(it == activePlayerList->end()) it = activePlayerList->begin(); if(activePlayerIt == activePlayerList->end()) activePlayerIt = activePlayerList->begin();
if(activePlayerList->size() > 2) { if(activePlayerList->size() > 2) {
//big blind normal //big blind normal
(*it)->setMyButton(3); (*activePlayerIt)->setMyButton(3);
bigBlindPosition = (*it)->getMyUniqueID(); bigBlindPosition = (*activePlayerIt)->getMyUniqueID();
} else { } else {
//small blind in heads up //small blind in heads up
(*it)->setMyButton(2); (*activePlayerIt)->setMyButton(2);
smallBlindPosition = (*it)->getMyUniqueID(); smallBlindPosition = (*activePlayerIt)->getMyUniqueID();
} }
break; break;
@@ -653,11 +395,11 @@ void LocalHand::switchRounds()
//log board cards for allin //log board cards for allin
if(currentRound >= GAME_STATE_FLOP) { if(currentRound >= GAME_STATE_FLOP) {
int tempBoardCardsArray[5]; int boardCards[5];
myBoard->getMyCards(tempBoardCardsArray); myBoard->getMyCards(boardCards);
myGui->logDealBoardCardsMsg(currentRound, tempBoardCardsArray[0], tempBoardCardsArray[1], tempBoardCardsArray[2], tempBoardCardsArray[3], tempBoardCardsArray[4]); myGui->logDealBoardCardsMsg(currentRound, boardCards[0], boardCards[1], boardCards[2], boardCards[3], boardCards[4]);
if(myLog) myLog->logBoardCards(tempBoardCardsArray); if(myLog) myLog->logBoardCards(boardCards);
} }
} }
@@ -696,8 +438,8 @@ void LocalHand::switchRounds()
myGui->postRiverAnimation1(); myGui->postRiverAnimation1();
} }
break; break;
default: { default:
} {}
} }
+31 -62
View File
@@ -51,142 +51,111 @@ public:
void start(); void start();
PlayerList getSeatsList() const PlayerList getSeatsList() const {
{
return seatsList; return seatsList;
} }
PlayerList getActivePlayerList() const PlayerList getActivePlayerList() const {
{
return activePlayerList; return activePlayerList;
} }
PlayerList getRunningPlayerList() const PlayerList getRunningPlayerList() const {
{
return runningPlayerList; return runningPlayerList;
} }
boost::shared_ptr<BoardInterface> getBoard() const boost::shared_ptr<BoardInterface> getBoard() const {
{
return myBoard; return myBoard;
} }
boost::shared_ptr<BeRoInterface> getPreflop() const boost::shared_ptr<BeRoInterface> getPreflop() const {
{
return myBeRo[GAME_STATE_PREFLOP]; return myBeRo[GAME_STATE_PREFLOP];
} }
boost::shared_ptr<BeRoInterface> getFlop() const boost::shared_ptr<BeRoInterface> getFlop() const {
{
return myBeRo[GAME_STATE_FLOP]; return myBeRo[GAME_STATE_FLOP];
} }
boost::shared_ptr<BeRoInterface> getTurn() const boost::shared_ptr<BeRoInterface> getTurn() const {
{
return myBeRo[GAME_STATE_TURN]; return myBeRo[GAME_STATE_TURN];
} }
boost::shared_ptr<BeRoInterface> getRiver() const boost::shared_ptr<BeRoInterface> getRiver() const {
{
return myBeRo[GAME_STATE_RIVER]; return myBeRo[GAME_STATE_RIVER];
} }
GuiInterface* getGuiInterface() const GuiInterface* getGuiInterface() const {
{
return myGui; return myGui;
} }
boost::shared_ptr<BeRoInterface> getCurrentBeRo() const boost::shared_ptr<BeRoInterface> getCurrentBeRo() const {
{
return myBeRo[currentRound]; return myBeRo[currentRound];
} }
Log* getLog() const Log* getLog() const {
{
return myLog; return myLog;
} }
void setMyID(int theValue) void setMyID(int theValue) {
{
myID = theValue; myID = theValue;
} }
int getMyID() const int getMyID() const {
{
return myID; return myID;
} }
void setStartQuantityPlayers(int theValue) void setStartQuantityPlayers(int theValue) {
{
startQuantityPlayers = theValue; startQuantityPlayers = theValue;
} }
int getStartQuantityPlayers() const int getStartQuantityPlayers() const {
{
return startQuantityPlayers; return startQuantityPlayers;
} }
void setCurrentRound(GameState theValue) void setCurrentRound(GameState theValue) {
{
currentRound = theValue; currentRound = theValue;
if(myLog) myLog->setCurrentRound(currentRound); if(myLog) myLog->setCurrentRound(currentRound);
} }
GameState getCurrentRound() const GameState getCurrentRound() const {
{
return currentRound; return currentRound;
} }
GameState getRoundBeforePostRiver() const GameState getRoundBeforePostRiver() const {
{
return roundBeforePostRiver; return roundBeforePostRiver;
} }
void setDealerPosition(int theValue) void setDealerPosition(int theValue) {
{
dealerPosition = theValue; dealerPosition = theValue;
} }
int getDealerPosition() const int getDealerPosition() const {
{
return dealerPosition; return dealerPosition;
} }
void setSmallBlind(int theValue) void setSmallBlind(int theValue) {
{
smallBlind = theValue; smallBlind = theValue;
} }
int getSmallBlind() const int getSmallBlind() const {
{
return smallBlind; return smallBlind;
} }
void setAllInCondition(bool theValue) void setAllInCondition(bool theValue) {
{
allInCondition = theValue; allInCondition = theValue;
} }
bool getAllInCondition() const bool getAllInCondition() const {
{
return allInCondition; return allInCondition;
} }
void setStartCash(int theValue) void setStartCash(int theValue) {
{
startCash = theValue; startCash = theValue;
} }
int getStartCash() const int getStartCash() const {
{
return startCash; return startCash;
} }
void setPreviousPlayerID(int theValue) void setPreviousPlayerID(int theValue) {
{
previousPlayerID = theValue; previousPlayerID = theValue;
} }
int getPreviousPlayerID() const int getPreviousPlayerID() const {
{
return previousPlayerID; return previousPlayerID;
} }
void setLastActionPlayerID ( unsigned theValue ); void setLastActionPlayerID ( unsigned theValue );
unsigned getLastActionPlayerID() const unsigned getLastActionPlayerID() const {
{
return lastActionPlayerID; return lastActionPlayerID;
} }
void setCardsShown(bool theValue) void setCardsShown(bool theValue) {
{
cardsShown = theValue; cardsShown = theValue;
} }
bool getCardsShown() const bool getCardsShown() const {
{
return cardsShown; return cardsShown;
} }
File diff suppressed because it is too large Load Diff
+70 -122
View File
@@ -48,258 +48,210 @@ public:
~LocalPlayer(); ~LocalPlayer();
void setHand(HandInterface *); void setHand(HandInterface *theValue) {
currentHand = theValue;
int getMyID() const }
{ int getMyID() const {
return myID; return myID;
} }
unsigned getMyUniqueID() const unsigned getMyUniqueID() const {
{
return myUniqueID; return myUniqueID;
} }
void setMyUniqueID(unsigned newId) void setMyUniqueID(unsigned newId) {
{
myUniqueID = newId; myUniqueID = newId;
} }
void setMyGuid(const std::string &theValue) void setMyGuid(const std::string &theValue) {
{
myGuid = theValue; myGuid = theValue;
} }
std::string getMyGuid() const std::string getMyGuid() const {
{
return myGuid; return myGuid;
} }
PlayerType getMyType() const PlayerType getMyType() const {
{
return myType; return myType;
} }
void setMyDude(int theValue) void setMyDude(int theValue) {
{
myDude = theValue; myDude = theValue;
} }
int getMyDude() const int getMyDude() const {
{
return myDude; return myDude;
} }
void setMyDude4(int theValue) void setMyDude4(int theValue) {
{
myDude4 = theValue; myDude4 = theValue;
} }
int getMyDude4() const int getMyDude4() const {
{
return myDude4; return myDude4;
} }
void setMyName(const std::string& theValue) void setMyName(const std::string& theValue) {
{
myName = theValue; myName = theValue;
} }
std::string getMyName() const std::string getMyName() const {
{
return myName; return myName;
} }
void setMyAvatar(const std::string& theValue) void setMyAvatar(const std::string& theValue) {
{
myAvatar = theValue; myAvatar = theValue;
} }
std::string getMyAvatar() const std::string getMyAvatar() const {
{
return myAvatar; return myAvatar;
} }
void setMyCash(int theValue) void setMyCash(int theValue) {
{
myCash = theValue; myCash = theValue;
} }
int getMyCash() const int getMyCash() const {
{
return myCash; return myCash;
} }
void setMySet(int theValue) void setMySet(int theValue) {
{
myLastRelativeSet = theValue; myLastRelativeSet = theValue;
mySet += theValue; mySet += theValue;
myCash -= theValue; myCash -= theValue;
} }
void setMySetAbsolute(int theValue) void setMySetAbsolute(int theValue) {
{
mySet = theValue; mySet = theValue;
} }
void setMySetNull() void setMySetNull() {
{
mySet = 0; mySet = 0;
myLastRelativeSet = 0; myLastRelativeSet = 0;
} }
int getMySet() const int getMySet() const {
{
return mySet; return mySet;
} }
int getMyLastRelativeSet() const int getMyLastRelativeSet() const {
{
return myLastRelativeSet; return myLastRelativeSet;
} }
void setMyAction(PlayerAction theValue, bool human = 0) void setMyAction(PlayerAction theValue, bool human = 0) {
{
myAction = theValue; myAction = theValue;
// logging for seat 0 // logging for seat 0
if(myAction && human) currentHand->getGuiInterface()->logPlayerActionMsg(myName, myAction, myLastRelativeSet); if(myAction && human) currentHand->getGuiInterface()->logPlayerActionMsg(myName, myAction, myLastRelativeSet);
} }
PlayerAction getMyAction() const PlayerAction getMyAction() const {
{
return myAction; return myAction;
} }
void setMyButton(int theValue) void setMyButton(int theValue) {
{
myButton = theValue; myButton = theValue;
} }
int getMyButton() const int getMyButton() const {
{
return myButton; return myButton;
} }
void setMyActiveStatus(bool theValue) void setMyActiveStatus(bool theValue) {
{
myActiveStatus = theValue; myActiveStatus = theValue;
} }
bool getMyActiveStatus() const bool getMyActiveStatus() const {
{
return myActiveStatus; return myActiveStatus;
} }
void setMyStayOnTableStatus(bool theValue) void setMyStayOnTableStatus(bool theValue) {
{
myStayOnTableStatus = theValue; myStayOnTableStatus = theValue;
} }
bool getMyStayOnTableStatus() const bool getMyStayOnTableStatus() const {
{
return myStayOnTableStatus; return myStayOnTableStatus;
} }
void setMyCards(int* theValue) void setMyHoleCards(int* theValue) {
{
int i; int i;
for(i=0; i<2; i++) myCards[i] = theValue[i]; for(i=0; i<2; i++) myHoleCards[i] = theValue[i];
} }
void getMyCards(int* theValue) const void getMyHoleCards(int* theValue) const {
{
int i; int i;
for(i=0; i<2; i++) theValue[i] = myCards[i]; for(i=0; i<2; i++) theValue[i] = myHoleCards[i];
} }
void setMyTurn(bool theValue) void setMyTurn(bool theValue) {
{
myTurn = theValue; myTurn = theValue;
} }
bool getMyTurn() const bool getMyTurn() const {
{
return myTurn; return myTurn;
} }
void setMyCardsFlip(bool theValue, int state) void setMyHoleCardsFlip(bool theValue, int state) {
{ myHoleCardsFlip = theValue;
myCardsFlip = theValue;
// log flipping cards // log flipping cards
if(myCardsFlip) { if(myHoleCardsFlip) {
switch(state) { switch(state) {
case 1: case 1:
currentHand->getGuiInterface()->logFlipHoleCardsMsg(myName, myCards[0], myCards[1], myCardsValueInt); currentHand->getGuiInterface()->logFlipHoleCardsMsg(myName, myHoleCards[0], myHoleCards[1], myCardsValueInt);
break; break;
case 2: case 2:
currentHand->getGuiInterface()->logFlipHoleCardsMsg(myName, myCards[0], myCards[1]); currentHand->getGuiInterface()->logFlipHoleCardsMsg(myName, myHoleCards[0], myHoleCards[1]);
break; break;
case 3: case 3:
currentHand->getGuiInterface()->logFlipHoleCardsMsg(myName, myCards[0], myCards[1], myCardsValueInt, "has"); currentHand->getGuiInterface()->logFlipHoleCardsMsg(myName, myHoleCards[0], myHoleCards[1], myCardsValueInt, "has");
break; break;
default: default:
; ;
} }
} }
} }
bool getMyCardsFlip() const bool getMyHoleCardsFlip() const {
{ return myHoleCardsFlip;
return myCardsFlip;
} }
void setMyCardsValueInt(int theValue) void setMyCardsValueInt(int theValue) {
{
myCardsValueInt = theValue; myCardsValueInt = theValue;
} }
int getMyCardsValueInt() const int getMyCardsValueInt() const {
{
return myCardsValueInt; return myCardsValueInt;
} }
void setLogHoleCardsDone(bool theValue) void setLogHoleCardsDone(bool theValue) {
{
logHoleCardsDone = theValue; logHoleCardsDone = theValue;
} }
bool getLogHoleCardsDone() const bool getLogHoleCardsDone() const {
{
return logHoleCardsDone; return logHoleCardsDone;
} }
void setMyBestHandPosition(int* theValue) void setMyBestHandPosition(int* theValue) {
{
for (int i = 0; i < 5; i++) for (int i = 0; i < 5; i++)
myBestHandPosition[i] = theValue[i]; myBestHandPosition[i] = theValue[i];
} }
void getMyBestHandPosition(int* theValue) const void getMyBestHandPosition(int* theValue) const {
{
for (int i = 0; i < 5; i++) for (int i = 0; i < 5; i++)
theValue[i] = myBestHandPosition[i]; theValue[i] = myBestHandPosition[i];
} }
void setMyRoundStartCash(int theValue) void setMyRoundStartCash(int theValue) {
{
myRoundStartCash = theValue; myRoundStartCash = theValue;
} }
int getMyRoundStartCash() const int getMyRoundStartCash() const {
{
return myRoundStartCash; return myRoundStartCash;
} }
void setLastMoneyWon ( int theValue ) void setLastMoneyWon ( int theValue ) {
{
lastMoneyWon = theValue; lastMoneyWon = theValue;
} }
int getLastMoneyWon() const int getLastMoneyWon() const {
{
return lastMoneyWon; return lastMoneyWon;
} }
void setMyAverageSets(int theValue) void setMyAverageSets(int theValue) {
{
myAverageSets[0] = myAverageSets[1]; myAverageSets[0] = myAverageSets[1];
myAverageSets[1] = myAverageSets[2]; myAverageSets[1] = myAverageSets[2];
myAverageSets[2] = myAverageSets[3]; myAverageSets[2] = myAverageSets[3];
myAverageSets[3] = theValue; myAverageSets[3] = theValue;
} }
int getMyAverageSets() const int getMyAverageSets() const {
{
return (myAverageSets[0]+myAverageSets[1]+myAverageSets[2]+myAverageSets[3])/4; return (myAverageSets[0]+myAverageSets[1]+myAverageSets[2]+myAverageSets[3])/4;
} }
void setMyAggressive(bool theValue) void setMyAggressive(bool theValue) {
{
int i; int i;
for(i=0; i<6; i++) { for(i=0; i<6; i++) {
myAggressive[i] = myAggressive[i+1]; myAggressive[i] = myAggressive[i+1];
} }
myAggressive[6] = theValue; myAggressive[6] = theValue;
} }
int getMyAggressive() const int getMyAggressive() const {
{
int i, sum = 0; int i, sum = 0;
for(i=0; i<7; i++) { for(i=0; i<7; i++) {
sum += myAggressive[i]; sum += myAggressive[i];
@@ -307,21 +259,17 @@ public:
return sum; return sum;
} }
void setSBluff ( int theValue ) void setSBluff ( int theValue ) {
{
sBluff = theValue; sBluff = theValue;
} }
int getSBluff() const int getSBluff() const {
{
return sBluff; return sBluff;
} }
void setSBluffStatus ( bool theValue ) void setSBluffStatus ( bool theValue ) {
{
sBluffStatus = theValue; sBluffStatus = theValue;
} }
bool getSBluffStatus() const bool getSBluffStatus() const {
{
return sBluffStatus; return sBluffStatus;
} }
@@ -334,10 +282,10 @@ public:
void turnEngine(); void turnEngine();
void riverEngine(); void riverEngine();
void preflopEngine3(); // void preflopEngine3();
void flopEngine3(); // void flopEngine3();
void turnEngine3(); // void turnEngine3();
void riverEngine3(); // void riverEngine3();
int flopCardsValue(int*); int flopCardsValue(int*);
int turnCardsValue(int*); int turnCardsValue(int*);
@@ -381,7 +329,7 @@ private:
int myNiveau[3]; int myNiveau[3];
bool logHoleCardsDone; bool logHoleCardsDone;
int myCards[2]; int myHoleCards[2];
int myCash; int myCash;
int mySet; int mySet;
int myLastRelativeSet; int myLastRelativeSet;
@@ -390,7 +338,7 @@ private:
bool myActiveStatus; // 0 = inactive, 1 = active bool myActiveStatus; // 0 = inactive, 1 = active
bool myStayOnTableStatus; // 0 = left, 1 = stay bool myStayOnTableStatus; // 0 = left, 1 = stay
bool myTurn; // 0 = no, 1 = yes bool myTurn; // 0 = no, 1 = yes
bool myCardsFlip; // 0 = cards are not fliped, 1 = cards are already flipped, bool myHoleCardsFlip; // 0 = cards are not fliped, 1 = cards are already flipped,
int myRoundStartCash; int myRoundStartCash;
int lastMoneyWon; int lastMoneyWon;
+1 -3
View File
@@ -51,8 +51,7 @@ boost::thread_specific_ptr<boost::random_device> g_rand_state;
struct nondet_rng : std::unary_function<unsigned, unsigned> { struct nondet_rng : std::unary_function<unsigned, unsigned> {
boost::random_device &_state; boost::random_device &_state;
unsigned operator()(unsigned i) unsigned operator()(unsigned i) {
{
boost::uniform_int<> rng(0, i - 1); boost::uniform_int<> rng(0, i - 1);
return rng(_state); return rng(_state);
} }
@@ -83,4 +82,3 @@ void Tools::GetRand(int minValue, int maxValue, unsigned count, int *out)
*startPtr++ = gen(); *startPtr++ = gen();
} }
} }
+1 -2
View File
@@ -50,8 +50,7 @@ boost::thread_specific_ptr<boost::mt19937> g_rand_state;
struct det_rng : std::unary_function<unsigned, unsigned> { struct det_rng : std::unary_function<unsigned, unsigned> {
boost::mt19937 &_state; boost::mt19937 &_state;
unsigned operator()(unsigned i) unsigned operator()(unsigned i) {
{
boost::uniform_int<> rng(0, i - 1); boost::uniform_int<> rng(0, i - 1);
return rng(_state); return rng(_state);
} }
+518 -400
View File
File diff suppressed because it is too large Load Diff
+14 -4
View File
@@ -66,13 +66,21 @@ public:
void logAfterGame(); void logAfterGame();
// void closeLogDbAtExit(); // void closeLogDbAtExit();
void setCurrentRound(GameState theValue) void debugMode_getStartSmallBlind(int* startSmallBlind, int* currentSmallBlind);
{ void debugMode_getStartDealerPosition(unsigned* dealerPosition);
void debugMode_getBoardCards(int* tempBoardArray, int handID);
void debugMode_getPlayerCards(int* tempPlayerArray, int handID, int seatID);
void debugMode_getPlayerStartCash(int* startCash, int seatID);
void debugMode_getPlayerAction(PlayerAction* playerAction, int* bet, int* raise, GameState gameState, int handID, int seatID, int mySet);
bool getDebugMode() {
return debug_mode;
}
void setCurrentRound(GameState theValue) {
currentRound = theValue; currentRound = theValue;
} }
std::string getMySqliteLogFileName() std::string getMySqliteLogFileName() {
{
return mySqliteLogFileName.directory_string(); return mySqliteLogFileName.directory_string();
} }
@@ -87,6 +95,8 @@ private:
int currentHandID; int currentHandID;
GameState currentRound; GameState currentRound;
std::string sql; std::string sql;
bool debug_mode;
}; };
#endif // LOG_H #endif // LOG_H
+1 -1
View File
@@ -44,7 +44,7 @@ ClientHand::ClientHand(boost::shared_ptr<EngineFactory> f, GuiInterface *g, boos
for(it=seatsList->begin(); it!=seatsList->end(); ++it) { for(it=seatsList->begin(); it!=seatsList->end(); ++it) {
(*it)->setHand(this); (*it)->setHand(this);
// myFlipCards auf 0 setzen // myFlipCards auf 0 setzen
(*it)->setMyCardsFlip(0, 0); (*it)->setMyHoleCardsFlip(0, 0);
} }
// roundStartCashArray fuellen // roundStartCashArray fuellen
+1 -2
View File
@@ -63,8 +63,7 @@ public:
GuiInterface* getGuiInterface() const; GuiInterface* getGuiInterface() const;
boost::shared_ptr<BeRoInterface> getCurrentBeRo() const; boost::shared_ptr<BeRoInterface> getCurrentBeRo() const;
Log* getLog() const Log* getLog() const {
{
return myLog; return myLog;
} }
+14 -14
View File
@@ -38,12 +38,12 @@ using namespace std;
ClientPlayer::ClientPlayer(ConfigFile *c, int id, unsigned uniqueId, PlayerType type, std::string name, std::string avatar, int sC, bool aS, bool sotS, int mB) ClientPlayer::ClientPlayer(ConfigFile *c, int id, unsigned uniqueId, PlayerType type, std::string name, std::string avatar, int sC, bool aS, bool sotS, int mB)
: PlayerInterface(), myConfig(c), currentHand(0), myID(id), myUniqueID(uniqueId), myType(type), : PlayerInterface(), myConfig(c), currentHand(0), myID(id), myUniqueID(uniqueId), myType(type),
myName(name), myAvatar(avatar), myDude(0), myDude4(0), myCardsValueInt(0), myOdds(-1.0), logHoleCardsDone(false), myCash(sC), mySet(0), myLastRelativeSet(0), myName(name), myAvatar(avatar), myDude(0), myDude4(0), myCardsValueInt(0), myOdds(-1.0), logHoleCardsDone(false), myCash(sC), mySet(0), myLastRelativeSet(0),
myAction(PLAYER_ACTION_NONE), myButton(mB), myActiveStatus(aS), myStayOnTableStatus(sotS), myTurn(false), myCardsFlip(false), myRoundStartCash(0), myAction(PLAYER_ACTION_NONE), myButton(mB), myActiveStatus(aS), myStayOnTableStatus(sotS), myTurn(false), myHoleCardsFlip(false), myRoundStartCash(0),
lastMoneyWon(0), sBluff(0), sBluffStatus(false), m_isSessionActive(false), m_isKicked(false), m_isMuted(false) lastMoneyWon(0), sBluff(0), sBluffStatus(false), m_isSessionActive(false), m_isKicked(false), m_isMuted(false)
{ {
myBestHandPosition[0] = myBestHandPosition[1] = myBestHandPosition[2] = myBestHandPosition[3] = myBestHandPosition[4] = 0; myBestHandPosition[0] = myBestHandPosition[1] = myBestHandPosition[2] = myBestHandPosition[3] = myBestHandPosition[4] = 0;
myNiveau[0] = myNiveau[1] = myNiveau[2] = 0; myNiveau[0] = myNiveau[1] = myNiveau[2] = 0;
myCards[0] = myCards[1] = 0; myHoleCards[0] = myHoleCards[1] = 0;
myAverageSets[0] = myAverageSets[1] = myAverageSets[2] = myAverageSets[3] = 0; myAverageSets[0] = myAverageSets[1] = myAverageSets[2] = myAverageSets[3] = 0;
myAggressive[0] = myAggressive[1] = myAggressive[2] = myAggressive[3] = myAggressive[4] = myAggressive[5] = myAggressive[6] = false; myAggressive[0] = myAggressive[1] = myAggressive[2] = myAggressive[3] = myAggressive[4] = myAggressive[5] = myAggressive[6] = false;
} }
@@ -264,19 +264,19 @@ ClientPlayer::getMyStayOnTableStatus() const
} }
void void
ClientPlayer::setMyCards(int* theValue) ClientPlayer::setMyHoleCards(int* theValue)
{ {
boost::recursive_mutex::scoped_lock lock(m_syncMutex); boost::recursive_mutex::scoped_lock lock(m_syncMutex);
for (int i = 0; i < 2; i++) for (int i = 0; i < 2; i++)
myCards[i] = theValue[i]; myHoleCards[i] = theValue[i];
} }
void void
ClientPlayer::getMyCards(int* theValue) const ClientPlayer::getMyHoleCards(int* theValue) const
{ {
boost::recursive_mutex::scoped_lock lock(m_syncMutex); boost::recursive_mutex::scoped_lock lock(m_syncMutex);
for (int i = 0; i < 2; i++) for (int i = 0; i < 2; i++)
theValue[i] = myCards[i]; theValue[i] = myHoleCards[i];
} }
void void
@@ -294,21 +294,21 @@ ClientPlayer::getMyTurn() const
} }
void void
ClientPlayer::setMyCardsFlip(bool theValue, int state) ClientPlayer::setMyHoleCardsFlip(bool theValue, int state)
{ {
boost::recursive_mutex::scoped_lock lock(m_syncMutex); boost::recursive_mutex::scoped_lock lock(m_syncMutex);
myCardsFlip = theValue; myHoleCardsFlip = theValue;
// log flipping cards // log flipping cards
if (myCardsFlip) { if (myHoleCardsFlip) {
switch(state) { switch(state) {
case 1: case 1:
currentHand->getGuiInterface()->logFlipHoleCardsMsg(myName, myCards[0], myCards[1], myCardsValueInt); currentHand->getGuiInterface()->logFlipHoleCardsMsg(myName, myHoleCards[0], myHoleCards[1], myCardsValueInt);
break; break;
case 2: case 2:
currentHand->getGuiInterface()->logFlipHoleCardsMsg(myName, myCards[0], myCards[1]); currentHand->getGuiInterface()->logFlipHoleCardsMsg(myName, myHoleCards[0], myHoleCards[1]);
break; break;
case 3: case 3:
currentHand->getGuiInterface()->logFlipHoleCardsMsg(myName, myCards[0], myCards[1], myCardsValueInt, "has"); currentHand->getGuiInterface()->logFlipHoleCardsMsg(myName, myHoleCards[0], myHoleCards[1], myCardsValueInt, "has");
break; break;
default: default:
; ;
@@ -317,10 +317,10 @@ ClientPlayer::setMyCardsFlip(bool theValue, int state)
} }
bool bool
ClientPlayer::getMyCardsFlip() const ClientPlayer::getMyHoleCardsFlip() const
{ {
boost::recursive_mutex::scoped_lock lock(m_syncMutex); boost::recursive_mutex::scoped_lock lock(m_syncMutex);
return myCardsFlip; return myHoleCardsFlip;
} }
void void
+7 -8
View File
@@ -89,14 +89,14 @@ public:
void setMyStayOnTableStatus(bool theValue); void setMyStayOnTableStatus(bool theValue);
bool getMyStayOnTableStatus() const; bool getMyStayOnTableStatus() const;
void setMyCards(int* theValue); void setMyHoleCards(int* theValue);
void getMyCards(int* theValue) const; void getMyHoleCards(int* theValue) const;
void setMyTurn(bool theValue); void setMyTurn(bool theValue);
bool getMyTurn() const; bool getMyTurn() const;
void setMyCardsFlip(bool theValue, int state); void setMyHoleCardsFlip(bool theValue, int state);
bool getMyCardsFlip() const; bool getMyHoleCardsFlip() const;
void setMyCardsValueInt(int theValue); void setMyCardsValueInt(int theValue);
int getMyCardsValueInt() const; int getMyCardsValueInt() const;
@@ -156,8 +156,7 @@ public:
bool checkIfINeedToShowCards(); bool checkIfINeedToShowCards();
void markRemoteAction() {} void markRemoteAction() {}
unsigned getTimeSecSinceLastRemoteAction() const unsigned getTimeSecSinceLastRemoteAction() const {
{
return 0; return 0;
} }
@@ -185,7 +184,7 @@ private:
int myNiveau[3]; int myNiveau[3];
bool logHoleCardsDone; bool logHoleCardsDone;
int myCards[2]; int myHoleCards[2];
int myCash; int myCash;
int mySet; int mySet;
int myLastRelativeSet; int myLastRelativeSet;
@@ -194,7 +193,7 @@ private:
bool myActiveStatus; // 0 = inactive, 1 = active bool myActiveStatus; // 0 = inactive, 1 = active
bool myStayOnTableStatus; // 0 = left, 1 = stay bool myStayOnTableStatus; // 0 = left, 1 = stay
bool myTurn; // 0 = no, 1 = yes bool myTurn; // 0 = no, 1 = yes
bool myCardsFlip; // 0 = cards are not fliped, 1 = cards are already flipped, bool myHoleCardsFlip; // 0 = cards are not fliped, 1 = cards are already flipped,
int myRoundStartCash; int myRoundStartCash;
int lastMoneyWon; int lastMoneyWon;
+4 -4
View File
@@ -87,14 +87,14 @@ public:
virtual void setMyStayOnTableStatus(bool theValue) =0; virtual void setMyStayOnTableStatus(bool theValue) =0;
virtual bool getMyStayOnTableStatus() const =0; virtual bool getMyStayOnTableStatus() const =0;
virtual void setMyCards(int* theValue) =0; virtual void setMyHoleCards(int* theValue) =0;
virtual void getMyCards(int* theValue) const =0; virtual void getMyHoleCards(int* theValue) const =0;
virtual void setMyTurn(bool theValue) =0; virtual void setMyTurn(bool theValue) =0;
virtual bool getMyTurn() const =0; virtual bool getMyTurn() const =0;
virtual void setMyCardsFlip(bool theValue, int state) =0; virtual void setMyHoleCardsFlip(bool theValue, int state) =0;
virtual bool getMyCardsFlip() const =0; virtual bool getMyHoleCardsFlip() const =0;
virtual void setMyCardsValueInt(int theValue) =0; virtual void setMyCardsValueInt(int theValue) =0;
virtual int getMyCardsValueInt() const =0; virtual int getMyCardsValueInt() const =0;
+3 -6
View File
@@ -37,16 +37,12 @@
#define MIN_GUI_SPEED 1 #define MIN_GUI_SPEED 1
#define MAX_GUI_SPEED 11 #define MAX_GUI_SPEED 11
#define DEBUG_MODE 0
#define SQLITE_LOG 1
#define HTML_LOG 0
#define POKERTH_VERSION_MAJOR 1 #define POKERTH_VERSION_MAJOR 1
#define POKERTH_VERSION_MINOR 11 #define POKERTH_VERSION_MINOR 11
#define POKERTH_VERSION ((POKERTH_VERSION_MAJOR << 8) | POKERTH_VERSION_MINOR) #define POKERTH_VERSION ((POKERTH_VERSION_MAJOR << 8) | POKERTH_VERSION_MINOR)
#define POKERTH_BETA_REVISION 0 #define POKERTH_BETA_REVISION 0
#define POKERTH_BETA_RELEASE_STRING "1.1.2" #define POKERTH_BETA_RELEASE_STRING "1.1.1"
#define SQLITE_LOG_VERSION 1 #define SQLITE_LOG_VERSION 1
@@ -58,7 +54,8 @@
enum ServerMode { enum ServerMode {
SERVER_MODE_LAN, SERVER_MODE_LAN,
SERVER_MODE_INTERNET_NOAUTH, SERVER_MODE_INTERNET_NOAUTH,
SERVER_MODE_INTERNET_AUTH SERVER_MODE_INTERNET_AUTH,
SERVER_MODE_LAN_LOCAL
}; };
enum ServerTransportProtocol { enum ServerTransportProtocol {
-2
View File
@@ -105,8 +105,6 @@ void ServerGuiWrapper::logNewBlindsSetsMsg(int /*sbSet*/, int /*bbSet*/, std::st
void ServerGuiWrapper::logDealBoardCardsMsg(int /*roundID*/, int /*card1*/, int /*card2*/, int /*card3*/, int /*card4*/, int /*card5*/) {} void ServerGuiWrapper::logDealBoardCardsMsg(int /*roundID*/, int /*card1*/, int /*card2*/, int /*card3*/, int /*card4*/, int /*card5*/) {}
void ServerGuiWrapper::logFlipHoleCardsMsg(std::string /*playerName*/, int /*card1*/, int /*card2*/, int /*cardsValueInt*/, std::string /*showHas*/) {} void ServerGuiWrapper::logFlipHoleCardsMsg(std::string /*playerName*/, int /*card1*/, int /*card2*/, int /*cardsValueInt*/, std::string /*showHas*/) {}
void ServerGuiWrapper::logPlayerWinGame(std::string /*playerName*/, int /*gameID*/) {} void ServerGuiWrapper::logPlayerWinGame(std::string /*playerName*/, int /*gameID*/) {}
void ServerGuiWrapper::flushLogAtGame(int /*gameID*/) {}
void ServerGuiWrapper::flushLogAtHand() {}
void ServerGuiWrapper::SignalNetClientServerListAdd(unsigned serverId) void ServerGuiWrapper::SignalNetClientServerListAdd(unsigned serverId)
{ {
+2 -6
View File
@@ -48,12 +48,10 @@ public:
boost::shared_ptr<Session> getSession(); boost::shared_ptr<Session> getSession();
void setSession(boost::shared_ptr<Session> session); void setSession(boost::shared_ptr<Session> session);
gameTableImpl* getMyW() const gameTableImpl* getMyW() const {
{
return NULL; return NULL;
} }
guiLog* getMyGuiLog() const guiLog* getMyGuiLog() const {
{
return NULL; return NULL;
} }
@@ -120,8 +118,6 @@ public:
void logDealBoardCardsMsg(int roundID, int card1, int card2, int card3, int card4 = -1, int card5 = -1) ; void logDealBoardCardsMsg(int roundID, int card1, int card2, int card3, int card4 = -1, int card5 = -1) ;
void logFlipHoleCardsMsg(std::string playerName, int card1, int card2, int cardsValueInt = -1, std::string showHas = "shows") ; void logFlipHoleCardsMsg(std::string playerName, int card1, int card2, int cardsValueInt = -1, std::string showHas = "shows") ;
void logPlayerWinGame(std::string playerName, int gameID); void logPlayerWinGame(std::string playerName, int gameID);
void flushLogAtGame(int gameID);
void flushLogAtHand();
void SignalNetClientConnect(int actionID); void SignalNetClientConnect(int actionID);
void SignalNetClientGameInfo(int actionID); void SignalNetClientGameInfo(int actionID);
-2
View File
@@ -119,8 +119,6 @@ public:
virtual void logDealBoardCardsMsg(int roundID, int card1, int card2, int card3, int card4 = -1, int card5 = -1) = 0; virtual void logDealBoardCardsMsg(int roundID, int card1, int card2, int card3, int card4 = -1, int card5 = -1) = 0;
virtual void logFlipHoleCardsMsg(std::string playerName, int card1, int card2, int cardsValueInt = -1, std::string showHas = "shows") = 0; virtual void logFlipHoleCardsMsg(std::string playerName, int card1, int card2, int cardsValueInt = -1, std::string showHas = "shows") = 0;
virtual void logPlayerWinGame(std::string playerName, int gameID) =0; virtual void logPlayerWinGame(std::string playerName, int gameID) =0;
virtual void flushLogAtGame(int gameID) =0;
virtual void flushLogAtHand() =0;
}; };

Some files were not shown because too many files have changed in this diff Show More