Author SHA1 Message Date
Kai Philipp 4fad542d05 Merge pull request #364 from trebmuh/patch-1
French translation improvements
2019-01-21 18:22:05 +01:00
Olivier Humbert 5039b11cb7 French translation improvements 2019-01-21 03:30:35 +01:00
lotodore df59bf750f Merge pull request #317 from CyberBLN/develop/fixes/dbclosed_missing_header
BUGFIX: corrected library name
2016-10-14 15:16:57 +02:00
Kai Schröder 9121de301c BUGFIX: corrected library name 2016-09-29 11:46:54 +02:00
Lothar May bc3e716681 Adding db backend of official server (now AGPL3). 2016-09-03 21:03:43 +02:00
lotodore c406ee147b Merge pull request #303 from PJ-Finlay/updated-INSTALL
Fixed link and typo in INSTALL file
2016-02-21 00:11:46 +01:00
PJ-Finlay 5bbbbc37fd Fixed link and typo in INSTALL file 2016-02-13 12:41:05 -05:00
lotodore b309e9e43a Merge pull request #299 from jwakely/boost-fstream-ambiguity
Qualify std::ifstream and std::ofstream
2015-11-29 16:38:29 +01:00
Jonathan Wakely 69f820bb3d Qualify std::ifstream and std::ofstream
Starting with Boost 1.60.0 <boost/filesystem.hpp> includes
<boost/filesystem/fstream.hpp>, which declares ifstream and ofstream
types that make the unqualified names ifstream and ofstream ambiguous.
The names must be qualified to refer to the std versions.
2015-11-26 16:27:52 +00:00
Felix Hammer 055f87019c Create GameData from createLocalGameView and move to startviewimpl. Ready to start the Network session ... 2015-10-31 23:17:29 +01:00
Felix Hammer e053cdcaf6 Move the listView data to the c++ context 2015-09-20 14:01:51 +02:00
Felix Hammer 27b524f52f New AbstractSelector for Selector-Components to avoid recurrent code blocks. 2015-08-21 01:38:35 +02:00
Felix Hammer f4ac0fbb26 Hopefully get the windows build running again ... some c++11 stuff for websocketpp 2015-08-19 18:03:21 +02:00
Felix Hammer b6068fb0a0 QML:Starting seperate AppStyle file for central GUI adjustments (maybe later depending on dpi)
CreateLocalGameView: New delegate for viewing Blinds raise mode
2015-08-19 15:08:54 +02:00
Felix Hammer 924fcd6404 Linux Desktop build fix 2015-08-19 15:02:10 +02:00
Felix Hammer a7cc33e89a android compile fix, needs to be approved by lotodore 2015-08-19 14:52:11 +02:00
lotodore 1d34288a91 Use owner_less for ordering of connection_hdl (see https://github.com/zaphoyd/websocketpp/issues/457) 2015-08-18 20:49:06 +02:00
Felix Hammer d0cce129dd SpinBox bugfixes, outsourced corretValues helper function, MyBlindsRaiseIntervalSelector focus bugfixes 2015-08-18 01:36:55 +02:00
Felix Hammer bb441b565c New Blinds Raise Interval Selector Component for ListViews
Outsourced Styles for RadioButton and TextField
2015-08-17 14:52:46 +02:00
Felix Hammer 27946480cd New Blinds Raise Interval Selector Component for ListViews
Outsourced Styles for RadioButton and TextField
2015-08-17 14:51:30 +02:00
Felix Hammer ee897f17ef Put c++ data to QML the first time: YEAAAAHHHH ;-) 2015-08-13 22:36:11 +02:00
Felix Hammer 93b9881e75 implement custom SpinBox Delegeta for QML ListView
preperation for Config usage from c++
2015-08-13 15:39:24 +02:00
Felix Hammer a935bfd0b8 move more qt-tools stuff 2015-08-13 15:36:27 +02:00
Felix Hammer d14343b8ac move qmlwrapper to subdir 2015-08-13 15:35:25 +02:00
Felix Hammer 959d48f83d add qttools to core directory - the current directory will be deleted later 2015-08-13 15:34:39 +02:00
Felix Hammer 731f5f05f5 Qt 5.5.0 patch for qtsingleapplication 2015-08-07 00:57:51 +02:00
Felix Hammer 9b1ad883a2 First QML Steps with StartView and CreateLocalGameView 2015-08-07 00:49:54 +02:00
Felix Hammer 85611c6cdf directory changes 2015-08-07 00:49:54 +02:00
lotodore 1034d4adf5 Correcting name of unit test file. 2015-02-01 23:08:19 +01:00
lotodore f04dac83c6 Adding websocket test to default unit tests. 2015-02-01 20:22:14 +01:00
lotodore a57c344b11 Adding unit test for WebSocket communication and fixing a bug found by the unit test. 2015-01-31 22:51:03 +01:00
lotodore 988d05e236 Removing deprecated go libs (was just a prototype). 2015-01-31 22:49:41 +01:00
lotodore 2252c180c0 Adding Java WebSocket lib for unit tests. 2015-01-31 22:48:58 +01:00
lotodore a2109df5e9 Updating websocketpp again to release 0.5.0 (because Windows build fails currently). 2015-01-24 12:30:04 +01:00
lotodore cc5998e863 Fixing compiler warnings. 2015-01-24 10:11:51 +01:00
lotodore 374048c5cd Updating websocketpp to latest git. 2015-01-24 10:10:04 +01:00
lotodore 83bbc660e1 Fixing remaining java tests. 2015-01-18 23:27:36 +01:00
lotodore 19bf312694 Fixing additional java tests. 2015-01-18 12:07:39 +01:00
lotodore 046a2fbdc3 More work on java tests. 2015-01-18 01:34:38 +01:00
lotodore eedd86e150 Fixing java tests and bugs found by tests. 2015-01-17 17:58:47 +01:00
Felix Hammer 67c444266f some refactoring issues in the qml gui 2015-01-15 18:03:09 +01:00
Felix Hammer e617c667e1 a new try to a happy cppcheck 2015-01-15 10:03:47 +01:00
Felix Hammer a78e5b39a3 try to make cppcheck happy again 2015-01-15 08:19:55 +01:00
lotodore 8a000bdc2b Fixing another cppcheck issue. 2015-01-14 22:07:44 +01:00
Felix Hammer 54eabb28c8 try to make cppcheck happy 2015-01-14 01:22:10 +01:00
lotodore 6dff34a589 Remove asserts and make cppcheck happy. 2015-01-13 22:21:11 +01:00
Felix Hammer a212e5c037 change define to ifdef 2015-01-09 23:11:39 +01:00
Felix Hammer 32d2e2e159 make android build bot happy again 2015-01-09 23:09:42 +01:00
Felix Hammer c8bcfc1390 try to make linux build on buildbot working again 2015-01-06 20:51:49 +01:00
lotodore 81ce13f3d7 Fixing bug due to issue #282 for Windows build. 2015-01-06 17:02:45 +01:00
lotodore bace7cd987 Workaround for issue #282 (should be backward compatible). 2015-01-06 15:55:29 +01:00
Felix Hammer 507fbae5aa Changes to integrate a new qml gui target 2015-01-06 00:48:19 +01:00
Felix Hammer 6a8c159450 add first qml files 2015-01-06 00:43:58 +01:00
lotodore fa4df857e4 Fixing some of the java test cases. Still incomplete. 2015-01-06 00:37:23 +01:00
lotodore c24e8a3fa9 Fixing problem with subscription request message. 2015-01-03 12:38:33 +01:00
lotodore bd981dd581 Fix "create game" message. 2015-01-02 16:03:19 +01:00
lotodore 1f6c3d8ccf Builds with protocol changes (currently untested). 2014-12-28 01:03:06 +01:00
lotodore fdfba430b2 Builds with protocol changes (currently untested). 2014-12-28 01:01:52 +01:00
lotodore 47093976ca More work on new network protocol. 2014-08-19 18:19:17 +02:00
lotodore 88e5f600aa Merge branch 'new_local_game' of github.com:/pokerth/pokerth into gocode 2014-08-19 18:18:32 +02:00
floty 015d6b7c72 create additional class for server time delay; remove define NEW_LOCAL_GAME 2014-07-27 18:09:19 +02:00
lotodore 7eaa23b049 Server Umbau zwischenversion. 2014-07-13 13:48:01 +02:00
lotodore 171d05fdaf Merge branch 'new_local_game' of github.com:/pokerth/pokerth into gocode 2014-07-13 13:38:07 +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
lotodore f2f0c0a15e Merge branch 'master' of github.com:/pokerth/pokerth into gocode 2014-06-22 13:43:10 +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
lotodore 6058345c92 Adding first code for new go-based dedicated server. 2014-05-30 17:07:43 +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
335 changed files with 77179 additions and 42175 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/
-40
View File
@@ -1,40 +0,0 @@
<?xml version='1.0' encoding='utf-8'?>
<manifest package="org.qtproject.example" android:versionName="1.1" xmlns:android="http://schemas.android.com/apk/res/android" android:installLocation="auto" android:versionCode="1">
<application android:theme="@android:style/Theme.Black.NoTitleBar.Fullscreen" android:name="org.qtproject.qt5.android.bindings.QtApplication" android:label="PokerTH" android:icon="@drawable/icon">
<activity android:name="org.qtproject.qt5.android.bindings.QtActivity" android:label="PokerTH" android:screenOrientation="landscape" android:configChanges="orientation|uiMode|screenLayout|screenSize|smallestScreenSize|locale|fontScale|keyboard|keyboardHidden|navigation">
<intent-filter>
<action android:name="android.intent.action.MAIN"/>
<category android:name="android.intent.category.LAUNCHER"/>
</intent-filter>
<meta-data android:name="android.app.lib_name" android:value="pokerth"/>
<meta-data android:name="android.app.qt_sources_resource_id" android:resource="@array/qt_sources"/>
<meta-data android:name="android.app.repository" android:value="default"/>
<meta-data android:name="android.app.qt_libs_resource_id" android:resource="@array/qt_libs"/>
<meta-data android:name="android.app.bundled_libs_resource_id" android:resource="@array/bundled_libs"/>
<!-- Deploy Qt libs as part of package -->
<meta-data android:name="android.app.bundle_local_qt_libs" android:value="-- %%BUNDLE_LOCAL_QT_LIBS%% --"/>
<meta-data android:name="android.app.bundled_in_lib_resource_id" android:resource="@array/bundled_in_lib"/>
<meta-data android:name="android.app.bundled_in_assets_resource_id" android:resource="@array/bundled_in_assets"/>
<!-- Run with local libs -->
<meta-data android:name="android.app.use_local_qt_libs" android:value="-- %%USE_LOCAL_QT_LIBS%% --"/>
<meta-data android:name="android.app.libs_prefix" android:value="/data/local/tmp/qt/"/>
<meta-data android:name="android.app.load_local_libs" android:value="-- %%INSERT_LOCAL_LIBS%% --"/>
<meta-data android:name="android.app.load_local_jars" android:value="-- %%INSERT_LOCAL_JARS%% --"/>
<meta-data android:name="android.app.static_init_classes" android:value="-- %%INSERT_INIT_CLASSES%% --"/>
<!-- Messages maps -->
<meta-data android:name="android.app.ministro_not_found_msg" android:value="@string/ministro_not_found_msg"/>
<meta-data android:name="android.app.ministro_needed_msg" android:value="@string/ministro_needed_msg"/>
<meta-data android:name="android.app.fatal_error_msg" android:value="@string/fatal_error_msg"/>
<!-- Messages maps -->
<!-- Splash screen -->
<meta-data android:name="android.app.splash_screen" android:resource="@layout/splash"/>
<!-- Splash screen -->
</activity>
</application>
<uses-sdk android:minSdkVersion="9" android:targetSdkVersion="19"/>
<supports-screens android:smallScreens="true" android:anyDensity="true" android:largeScreens="true" android:normalScreens="true"/>
<!-- %%INSERT_PERMISSIONS -->
<!-- %%INSERT_FEATURES -->
<uses-permission android:name="android.permission.INTERNET"/>
<uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE"/>
</manifest>
-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)
-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.
# #
+74
View File
@@ -0,0 +1,74 @@
/*****************************************************************************
* PokerTH dedicated server *
* Copyright (C) 2014 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. *
*****************************************************************************/
package gameserver
import (
"log"
"pokerth"
"sync/atomic"
)
type Dispatcher struct {
receiver chan SessionPokerTHMessage
authChan chan SessionAuthMessage
lobbyChan chan SessionLobbyMessage
lastSessionId uint32
}
func NewDispatcher(authChan chan SessionAuthMessage, lobbyChan chan SessionLobbyMessage) *Dispatcher {
return &Dispatcher{make(chan SessionPokerTHMessage, RECV_DISPATCHER_NUM_PACKET_BUF), authChan, lobbyChan, 0}
}
func (d *Dispatcher) GetReceiver() chan SessionPokerTHMessage {
return d.receiver
}
func (d *Dispatcher) GetNextSessionId() uint32 {
return atomic.AddUint32(&d.lastSessionId, 1)
}
func (d *Dispatcher) Run() {
var sessionMsg SessionPokerTHMessage
for {
select {
case sessionMsg = <-d.receiver:
log.Printf("Packet in dispatcher session %d type %d", sessionMsg.session.id, sessionMsg.packet.GetMessageType())
switch sessionMsg.packet.GetMessageType() {
case pokerth.PokerTHMessage_Type_AuthMessage:
d.authChan <- SessionAuthMessage{sessionMsg.session, sessionMsg.packet.GetAuthMessage()}
case pokerth.PokerTHMessage_Type_LobbyMessage:
d.lobbyChan <- SessionLobbyMessage{sessionMsg.session, sessionMsg.packet.GetLobbyMessage()}
default:
log.Print("Unknown packet type")
}
}
}
}
+83
View File
@@ -0,0 +1,83 @@
/*****************************************************************************
* PokerTH dedicated server *
* Copyright (C) 2014 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. *
*****************************************************************************/
package gameserver
import (
"code.google.com/p/goprotobuf/proto"
"container/list"
"log"
"pokerth"
)
type Lobby struct {
receiver chan SessionLobbyMessage
sessions *list.List
}
func NewLobby() *Lobby {
return &Lobby{make(chan SessionLobbyMessage, RECV_LOBBY_NUM_PACKET_BUF), list.New()}
}
func (l *Lobby) GetReceiver() chan SessionLobbyMessage {
return l.receiver
}
func (l *Lobby) AddSession(session *Session) {
log.Print("New session")
l.sessions.PushBack(session)
announce := &pokerth.PokerTHMessage{
MessageType: pokerth.PokerTHMessage_PokerTHMessageType.Enum(pokerth.PokerTHMessage_Type_AnnounceMessage),
AnnounceMessage: &pokerth.AnnounceMessage{
ProtocolVersion: &pokerth.AnnounceMessage_Version{
MajorVersion: proto.Uint32(NET_VERSION_MAJOR),
MinorVersion: proto.Uint32(NET_VERSION_MINOR),
},
LatestGameVersion: &pokerth.AnnounceMessage_Version{
MajorVersion: proto.Uint32(POKERTH_VERSION_MAJOR),
MinorVersion: proto.Uint32(POKERTH_VERSION_MINOR),
},
LatestBetaRevision: proto.Uint32(0),
ServerType: pokerth.AnnounceMessage_ServerType.Enum(pokerth.AnnounceMessage_serverTypeInternetAuth),
NumPlayersOnServer: proto.Uint32(0),
},
}
session.sender <- announce
}
func (l *Lobby) Run() {
var lobbyMsg SessionLobbyMessage
for {
select {
case lobbyMsg = <-l.receiver:
log.Printf("Lobby packet %d", lobbyMsg.packet.GetMessageType())
}
}
}
+103
View File
@@ -0,0 +1,103 @@
/*****************************************************************************
* PokerTH dedicated server *
* Copyright (C) 2014 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. *
*****************************************************************************/
package gameserver
import (
"encoding/binary"
"pokerth"
)
const NET_HEADER_SIZE uint32 = 4
type PacketSerializer interface {
ReadPacket(buf []byte, num uint32) (uint32, *pokerth.PokerTHMessage)
WritePacket(buf []byte, packet *pokerth.PokerTHMessage) uint32
}
func readPacketRaw(buf []byte, num uint32) (uint32, *pokerth.PokerTHMessage) {
packet := &pokerth.PokerTHMessage{}
err := packet.Unmarshal(buf[0:num])
if err != nil {
packet = nil
}
return num, packet
}
func readPacketWithHeader(buf []byte, num uint32) (uint32, *pokerth.PokerTHMessage) {
var bytesScanned uint32 = 0
var packetSize uint32 = 0
packet := &pokerth.PokerTHMessage{}
if num >= NET_HEADER_SIZE {
packetSize = binary.BigEndian.Uint32(buf[0:NET_HEADER_SIZE])
if packetSize <= 0 {
bytesScanned = NET_HEADER_SIZE
} else if num >= NET_HEADER_SIZE+packetSize {
bytesScanned, packet = readPacketRaw(buf[NET_HEADER_SIZE:], NET_HEADER_SIZE+packetSize)
}
}
return bytesScanned, packet
}
func writePacketGeneric(buf []byte, packet *pokerth.PokerTHMessage, headerSize uint32) uint32 {
var bytesWritten uint32 = 0
num, err := packet.MarshalTo(buf[headerSize:])
if err == nil {
if headerSize > 0 {
binary.BigEndian.PutUint32(buf[0:headerSize], uint32(num))
bytesWritten = uint32(num) + headerSize
} else {
bytesWritten = uint32(num)
}
}
return bytesWritten
}
type RawPacketSerializer struct {
}
func (RawPacketSerializer) ReadPacket(buf []byte, num uint32) (uint32, *pokerth.PokerTHMessage) {
return readPacketRaw(buf, num)
}
func (RawPacketSerializer) WritePacket(buf []byte, packet *pokerth.PokerTHMessage) uint32 {
return writePacketGeneric(buf, packet, 0)
}
type HeaderPacketSerializer struct {
}
func (HeaderPacketSerializer) ReadPacket(buf []byte, num uint32) (uint32, *pokerth.PokerTHMessage) {
return readPacketWithHeader(buf, num)
}
func (HeaderPacketSerializer) WritePacket(buf []byte, packet *pokerth.PokerTHMessage) uint32 {
return writePacketGeneric(buf, packet, NET_HEADER_SIZE)
}
+146
View File
@@ -0,0 +1,146 @@
/*****************************************************************************
* PokerTH dedicated server *
* Copyright (C) 2014 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. *
*****************************************************************************/
package gameserver
import (
"log"
"net"
"pokerth"
)
const POKERTH_VERSION_MAJOR = 1
const POKERTH_VERSION_MINOR = 11
const NET_VERSION_MAJOR = 5
const NET_VERSION_MINOR = 1
const MAX_PACKET_SIZE uint32 = 384
const RECV_BUF_SIZE uint32 = 4 * MAX_PACKET_SIZE
const SEND_BUF_SIZE uint32 = 2 * MAX_PACKET_SIZE
const SEND_NUM_PACKET_BUF = 2048
const RECV_DISPATCHER_NUM_PACKET_BUF = 2048
const RECV_LOBBY_NUM_PACKET_BUF = 2048
type Session struct {
id uint32
PacketSerializer
Connection net.Conn
sender chan *pokerth.PokerTHMessage
receiver chan SessionPokerTHMessage
}
type SessionPokerTHMessage struct {
session *Session
packet *pokerth.PokerTHMessage
}
type SessionAuthMessage struct {
session *Session
packet *pokerth.AuthMessage
}
type SessionLobbyMessage struct {
session *Session
packet *pokerth.LobbyMessage
}
type SessionGameMessage struct {
session *Session
packet *pokerth.GameMessage
}
func NewSession(id uint32, serializer PacketSerializer, conn net.Conn, receiver chan SessionPokerTHMessage) *Session {
return &Session{id, serializer, conn, make(chan *pokerth.PokerTHMessage, SEND_NUM_PACKET_BUF), receiver}
}
func (s *Session) Run() {
// run sender as separate goroutine
go s.handleSend()
s.handleReceive()
}
func (s *Session) handleReceive() {
// close connection on exit
defer s.Connection.Close()
var buf [RECV_BUF_SIZE]byte
var bufPos uint32 = 0
for {
// read upto RECV_BUF_SIZE bytes
num, err := s.Connection.Read(buf[bufPos:])
bufPos += uint32(num)
if err != nil {
log.Printf("Read error: %s\n", err.Error())
return
}
bytesScanned, packet := s.ReadPacket(buf[0:bufPos], bufPos)
if bytesScanned > 0 {
if packet == nil {
log.Print("Invalid packet")
} else {
log.Printf("Packet in: %d\n", packet.GetMessageType())
s.receiver <- SessionPokerTHMessage{s, packet}
remainingBytes := bufPos - bytesScanned
if remainingBytes > 0 {
copy(buf[0:], buf[bytesScanned:remainingBytes])
bufPos = remainingBytes
} else {
bufPos = 0
}
}
}
}
}
func (s *Session) handleSend() {
var buf [RECV_BUF_SIZE]byte
var packet *pokerth.PokerTHMessage
for {
select {
case packet = <-s.sender:
packetSize := s.WritePacket(buf[0:RECV_BUF_SIZE], packet)
if packetSize > 0 {
var bufStart uint32 = 0
for bufStart < packetSize {
num, err := s.Connection.Write(buf[bufStart:packetSize])
if err != nil {
log.Printf("Write error: %s\n", err.Error())
return
}
bufStart += uint32(num)
}
log.Printf("Packet out: %d, size: %d\n", packet.GetMessageType(), packetSize)
}
}
}
}
+78
View File
@@ -0,0 +1,78 @@
/*****************************************************************************
* PokerTH dedicated server *
* Copyright (C) 2014 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. *
*****************************************************************************/
package main
import (
"code.google.com/p/go.net/websocket"
"gameserver"
"log"
"net"
"net/http"
)
var lobby *gameserver.Lobby
var dispatcher *gameserver.Dispatcher
func main() {
lobby = gameserver.NewLobby()
dispatcher = gameserver.NewDispatcher(nil, lobby.GetReceiver())
go lobby.Run()
go dispatcher.Run()
listener, err := net.Listen("tcp", ":7234")
if err != nil {
log.Fatalf("Listen error: %s", err.Error())
}
go acceptSockets(listener)
server := websocket.Server{Handler: handleWebsocketConn}
http.Handle("/pokerthwebsocket", server)
http.ListenAndServe(":7233", nil)
}
func acceptSockets(listener net.Listener) {
for {
conn, err := listener.Accept()
if err != nil {
log.Fatalf("Accept error: %s\n", err.Error())
}
s := gameserver.NewSession(dispatcher.GetNextSessionId(), gameserver.HeaderPacketSerializer{}, conn, dispatcher.GetReceiver())
lobby.AddSession(s)
go s.Run()
}
}
func handleWebsocketConn(ws *websocket.Conn) {
ws.PayloadType = websocket.BinaryFrame
s := gameserver.NewSession(dispatcher.GetNextSessionId(), gameserver.RawPacketSerializer{}, ws, dispatcher.GetReceiver())
lobby.AddSession(s)
s.Run()
}
File diff suppressed because it is too large Load Diff
+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
+4 -2
View File
@@ -5,13 +5,15 @@ SUBDIRS = pokerth_protocol.pro pokerth_db.pro pokerth_lib.pro
official_server { official_server {
SUBDIRS += pokerth_dbofficial.pro SUBDIRS += pokerth_dbofficial.pro
} }
client: { qml-client{
SUBDIRS += pokerth_qml-client.pro
}
!qml-client{
SUBDIRS += pokerth_game.pro SUBDIRS += pokerth_game.pro
} }
!mac:!gui_800x480:!client:!qml-client { !mac:!gui_800x480:!client:!qml-client {
SUBDIRS += pokerth_server.pro chatcleaner.pro SUBDIRS += pokerth_server.pro chatcleaner.pro
} }
CONFIG += ordered CONFIG += ordered
OTHER_FILES += \ OTHER_FILES += \
+347 -305
View File
@@ -1,7 +1,6 @@
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-2014 Felix Hammer, Florian Thauer, Lothar May *
* * * *
* This program is free software: you can redistribute it and/or modify * * This program is free software: you can redistribute it and/or modify *
* it under the terms of the GNU Affero General Public License as * * it under the terms of the GNU Affero General Public License as *
@@ -146,22 +145,22 @@ message AnnounceMessage {
required uint32 numPlayersOnServer = 5; required uint32 numPlayersOnServer = 5;
} }
// buildId contains a constant build id (specific for Windows/Linux/Mac builds) message AuthClientRequestMessage {
message InitMessage {
required AnnounceMessage.Version requestedVersion = 1; required AnnounceMessage.Version requestedVersion = 1;
// buildId contains a constant build id (specific for Windows/Linux/Mac builds)
required uint32 buildId = 2; required uint32 buildId = 2;
optional bytes myLastSessionId = 3;
optional string authServerPassword = 4;
enum LoginType { enum LoginType {
guestLogin = 0; guestLogin = 0;
authenticatedLogin = 1; authenticatedLogin = 1;
unauthenticatedLogin = 2; unauthenticatedLogin = 2;
} }
required LoginType login = 5; required LoginType login = 3;
optional string authServerPassword = 4;
// Only used for guest login or unauthenticated login. // Only used for guest login or unauthenticated login.
optional string nickName = 6; optional string nickName = 5;
// Authenticated login data is according to SCRAM SHA-1 // Authenticated login data is according to SCRAM SHA-1
optional bytes clientUserData = 7; optional bytes clientUserData = 6;
optional bytes myLastSessionId = 7;
// Ignored for guest login. // Ignored for guest login.
optional bytes avatarHash = 8; optional bytes avatarHash = 8;
} }
@@ -178,7 +177,7 @@ message AuthServerVerificationMessage {
required bytes serverVerification = 1; required bytes serverVerification = 1;
} }
message InitAckMessage { message InitDoneMessage {
required bytes yourSessionId = 1; required bytes yourSessionId = 1;
required uint32 yourPlayerId = 2; required uint32 yourPlayerId = 2;
optional bytes yourAvatarHash = 3; optional bytes yourAvatarHash = 3;
@@ -278,32 +277,49 @@ message PlayerInfoReplyMessage {
optional PlayerInfoData playerInfoData = 2; optional PlayerInfoData playerInfoData = 2;
} }
// The following request will not be confirmed by the server. It is used, // The following request is used optionally to reduce server traffic.
// optionally, to reduce server traffic. The server might ignore it.
message SubscriptionRequestMessage { message SubscriptionRequestMessage {
required uint32 requestId = 1;
enum SubscriptionAction { enum SubscriptionAction {
unsubscribeGameList = 1; unsubscribeGameList = 1;
resubscribeGameList = 2; resubscribeGameList = 2;
} }
required SubscriptionAction subscriptionAction = 1; required SubscriptionAction subscriptionAction = 2;
} }
message JoinExistingGameMessage { message SubscriptionReplyMessage {
required uint32 requestId = 1;
required bool ack = 2;
}
message CreateGameMessage {
required uint32 requestId = 1;
required NetGameInfo gameInfo = 2;
optional string password = 3;
optional bool autoLeave = 4;
}
message CreateGameFailedMessage {
required uint32 requestId = 1;
enum CreateGameFailureReason {
notAllowedAsGuest = 1;
gameNameInUse = 2;
badGameName = 3;
invalidSettings = 4;
}
required CreateGameFailureReason createGameFailureReason = 2;
}
message JoinGameMessage {
required uint32 gameId = 1; required uint32 gameId = 1;
optional string password = 2; optional string password = 2;
optional bool autoLeave = 3 [default = false]; optional bool autoLeave = 3 [default = false];
optional bool spectateOnly = 4 [default = false]; optional bool spectateOnly = 4 [default = false];
} }
message JoinNewGameMessage { message RejoinGameMessage {
required NetGameInfo gameInfo = 1;
optional string password = 2;
optional bool autoLeave = 3;
}
message RejoinExistingGameMessage {
required uint32 gameId = 1; required uint32 gameId = 1;
optional bool autoLeave = 2; optional bool autoLeave = 2 [default = false];
} }
message JoinGameAckMessage { message JoinGameAckMessage {
@@ -314,59 +330,50 @@ message JoinGameAckMessage {
} }
message JoinGameFailedMessage { message JoinGameFailedMessage {
required uint32 gameId = 1;
enum JoinGameFailureReason { enum JoinGameFailureReason {
invalidGame = 1; invalidGame = 1;
gameIsFull = 2; gameIsFull = 2;
gameIsRunning = 3; gameIsRunning = 3;
invalidPassword = 4; notAllowedAsGuest = 4;
notAllowedAsGuest = 5; invalidPassword = 5;
notInvited = 6; notInvited = 6;
gameNameInUse = 7; ipAddressBlocked = 7;
badGameName = 8; rejoinFailed = 8;
invalidSettings = 9; noSpectatorsAllowed = 9;
ipAddressBlocked = 10;
rejoinFailed = 11;
noSpectatorsAllowed = 12;
} }
required uint32 gameId = 1;
required JoinGameFailureReason joinGameFailureReason = 2; required JoinGameFailureReason joinGameFailureReason = 2;
} }
message GamePlayerJoinedMessage { message GamePlayerJoinedMessage {
required uint32 gameId = 1; required uint32 playerId = 1;
required uint32 playerId = 2; required bool isGameAdmin = 2;
required bool isGameAdmin = 3;
} }
message GamePlayerLeftMessage { message GamePlayerLeftMessage {
required uint32 gameId = 1; required uint32 playerId = 1;
required uint32 playerId = 2;
enum GamePlayerLeftReason { enum GamePlayerLeftReason {
leftOnRequest = 0; leftOnRequest = 0;
leftKicked = 1; leftKicked = 1;
leftError = 2; leftError = 2;
} }
required GamePlayerLeftReason gamePlayerLeftReason = 3; required GamePlayerLeftReason gamePlayerLeftReason = 2;
} }
message GameSpectatorJoinedMessage { message GameSpectatorJoinedMessage {
required uint32 gameId = 1; required uint32 playerId = 1;
required uint32 playerId = 2;
} }
message GameSpectatorLeftMessage { message GameSpectatorLeftMessage {
required uint32 gameId = 1; required uint32 playerId = 1;
required uint32 playerId = 2; required GamePlayerLeftMessage.GamePlayerLeftReason gameSpectatorLeftReason = 2;
required GamePlayerLeftMessage.GamePlayerLeftReason gameSpectatorLeftReason = 3;
} }
message GameAdminChangedMessage { message GameAdminChangedMessage {
required uint32 gameId = 1; required uint32 newAdminPlayerId = 1;
required uint32 newAdminPlayerId = 2;
} }
message RemovedFromGameMessage { message RemovedFromGameMessage {
required uint32 gameId = 1;
enum RemovedFromGameReason { enum RemovedFromGameReason {
removedOnRequest = 0; // No error, client wished to leave. removedOnRequest = 0; // No error, client wished to leave.
kickedFromGame = 1; kickedFromGame = 1;
@@ -376,16 +383,14 @@ message RemovedFromGameMessage {
removedStartFailed = 5; removedStartFailed = 5;
gameClosed = 6; gameClosed = 6;
} }
required RemovedFromGameReason removedFromGameReason = 2; required RemovedFromGameReason removedFromGameReason = 1;
} }
message KickPlayerRequestMessage { message KickPlayerRequestMessage {
required uint32 gameId = 1; required uint32 playerId = 1;
required uint32 playerId = 2;
} }
message LeaveGameRequestMessage { message LeaveGameRequestMessage {
required uint32 gameId = 1;
} }
message InvitePlayerToGameMessage { message InvitePlayerToGameMessage {
@@ -415,124 +420,109 @@ message RejectInvNotifyMessage {
} }
message StartEventMessage { message StartEventMessage {
required uint32 gameId = 1;
enum StartEventType { enum StartEventType {
startEvent = 0; startEvent = 0;
rejoinEvent = 1; rejoinEvent = 1;
} }
required StartEventType startEventType = 2; required StartEventType startEventType = 1;
optional bool fillWithComputerPlayers = 3; optional bool fillWithComputerPlayers = 2;
} }
message StartEventAckMessage { message StartEventAckMessage {
required uint32 gameId = 1;
} }
message GameStartInitialMessage { message GameStartInitialMessage {
required uint32 gameId = 1; required uint32 startDealerPlayerId = 1;
required uint32 startDealerPlayerId = 2; repeated uint32 playerSeats = 2 [packed = true];
repeated uint32 playerSeats = 3 [packed = true];
} }
message GameStartRejoinMessage { message GameStartRejoinMessage {
required uint32 gameId = 1; required uint32 startDealerPlayerId = 1;
required uint32 startDealerPlayerId = 2; required uint32 handNum = 2;
required uint32 handNum = 3;
message RejoinPlayerData { message RejoinPlayerData {
required uint32 playerId = 1; required uint32 playerId = 1;
required uint32 playerMoney = 2; required uint32 playerMoney = 2;
} }
repeated RejoinPlayerData rejoinPlayerData = 4; repeated RejoinPlayerData rejoinPlayerData = 3;
} }
message HandStartMessage { message HandStartMessage {
required uint32 gameId = 1;
message PlainCards { message PlainCards {
required uint32 plainCard1 = 1; required uint32 plainCard1 = 1;
required uint32 plainCard2 = 2; required uint32 plainCard2 = 2;
} }
optional PlainCards plainCards = 2; optional PlainCards plainCards = 1;
optional bytes encryptedCards = 3; optional bytes encryptedCards = 2;
required uint32 smallBlind = 4; required uint32 smallBlind = 3;
repeated NetPlayerState seatStates = 5; repeated NetPlayerState seatStates = 4;
optional uint32 dealerPlayerId = 6; optional uint32 dealerPlayerId = 5;
} }
message PlayersTurnMessage { message PlayersTurnMessage {
required uint32 gameId = 1; required uint32 playerId = 1;
required uint32 playerId = 2; required NetGameState gameState = 2;
required NetGameState gameState = 3;
} }
message MyActionRequestMessage { message MyActionRequestMessage {
required uint32 gameId = 1; required uint32 handNum = 1;
required uint32 handNum = 2; required NetGameState gameState = 2;
required NetGameState gameState = 3; required NetPlayerAction myAction = 3;
required NetPlayerAction myAction = 4; required uint32 myRelativeBet = 4;
required uint32 myRelativeBet = 5;
} }
message YourActionRejectedMessage { message YourActionRejectedMessage {
required uint32 gameId = 1; required NetGameState gameState = 1;
required NetGameState gameState = 2; required NetPlayerAction yourAction = 2;
required NetPlayerAction yourAction = 3; required uint32 yourRelativeBet = 3;
required uint32 yourRelativeBet = 4;
enum RejectionReason { enum RejectionReason {
rejectedInvalidGameState = 1; rejectedInvalidGameState = 1;
rejectedNotYourTurn = 2; rejectedNotYourTurn = 2;
rejectedActionNotAllowed = 3; rejectedActionNotAllowed = 3;
} }
required RejectionReason rejectionReason = 5; required RejectionReason rejectionReason = 4;
} }
message PlayersActionDoneMessage { message PlayersActionDoneMessage {
required uint32 gameId = 1; required uint32 playerId = 1;
required uint32 playerId = 2; required NetGameState gameState = 2;
required NetGameState gameState = 3; required NetPlayerAction playerAction = 3;
required NetPlayerAction playerAction = 4; required uint32 totalPlayerBet = 4;
required uint32 totalPlayerBet = 5; required uint32 playerMoney = 5;
required uint32 playerMoney = 6; required uint32 highestSet = 6;
required uint32 highestSet = 7; required uint32 minimumRaise = 7;
required uint32 minimumRaise = 8;
} }
message DealFlopCardsMessage { message DealFlopCardsMessage {
required uint32 gameId = 1; required uint32 flopCard1 = 1;
required uint32 flopCard1 = 2; required uint32 flopCard2 = 2;
required uint32 flopCard2 = 3; required uint32 flopCard3 = 3;
required uint32 flopCard3 = 4;
} }
message DealTurnCardMessage { message DealTurnCardMessage {
required uint32 gameId = 1; required uint32 turnCard = 1;
required uint32 turnCard = 2;
} }
message DealRiverCardMessage { message DealRiverCardMessage {
required uint32 gameId = 1; required uint32 riverCard = 1;
required uint32 riverCard = 2;
} }
message AllInShowCardsMessage { message AllInShowCardsMessage {
required uint32 gameId = 1;
message PlayerAllIn { message PlayerAllIn {
required uint32 playerId = 1; required uint32 playerId = 1;
required uint32 allInCard1 = 2; required uint32 allInCard1 = 2;
required uint32 allInCard2 = 3; required uint32 allInCard2 = 3;
} }
repeated PlayerAllIn playersAllIn = 2; repeated PlayerAllIn playersAllIn = 1;
} }
message EndOfHandShowCardsMessage { message EndOfHandShowCardsMessage {
required uint32 gameId = 1; repeated PlayerResult playerResults = 1;
repeated PlayerResult playerResults = 2;
} }
message EndOfHandHideCardsMessage { message EndOfHandHideCardsMessage {
required uint32 gameId = 1; required uint32 playerId = 1;
required uint32 playerId = 2; required uint32 moneyWon = 2;
required uint32 moneyWon = 3; required uint32 playerMoney = 3;
required uint32 playerMoney = 4;
} }
message ShowMyCardsRequestMessage { message ShowMyCardsRequestMessage {
@@ -543,8 +533,7 @@ message AfterHandShowCardsMessage {
} }
message EndOfGameMessage { message EndOfGameMessage {
required uint32 gameId = 1; required uint32 winnerPlayerId = 1;
required uint32 winnerPlayerId = 2;
} }
message PlayerIdChangedMessage { message PlayerIdChangedMessage {
@@ -553,13 +542,11 @@ message PlayerIdChangedMessage {
} }
message AskKickPlayerMessage { message AskKickPlayerMessage {
required uint32 gameId = 1; required uint32 playerId = 1;
required uint32 playerId = 2;
} }
message AskKickDeniedMessage { message AskKickDeniedMessage {
required uint32 gameId = 1; required uint32 playerId = 1;
required uint32 playerId = 2;
enum KickDeniedReason { enum KickDeniedReason {
kickDeniedInvalidGameState = 0; kickDeniedInvalidGameState = 0;
kickDeniedNotPossible = 1; kickDeniedNotPossible = 1;
@@ -567,56 +554,51 @@ message AskKickDeniedMessage {
kickDeniedAlreadyInProgress = 3; kickDeniedAlreadyInProgress = 3;
kickDeniedInvalidPlayerId = 4; kickDeniedInvalidPlayerId = 4;
} }
required KickDeniedReason kickDeniedReason = 3; required KickDeniedReason kickDeniedReason = 2;
} }
message StartKickPetitionMessage { message StartKickPetitionMessage {
required uint32 gameId = 1; required uint32 petitionId = 1;
required uint32 petitionId = 2; required uint32 proposingPlayerId = 2;
required uint32 proposingPlayerId = 3; required uint32 kickPlayerId = 3;
required uint32 kickPlayerId = 4; required uint32 kickTimeoutSec = 4;
required uint32 kickTimeoutSec = 5; required uint32 numVotesNeededToKick = 5;
required uint32 numVotesNeededToKick = 6;
} }
message VoteKickRequestMessage { message VoteKickRequestMessage {
required uint32 gameId = 1; required uint32 petitionId = 1;
required uint32 petitionId = 2; required bool voteKick = 2;
required bool voteKick = 3;
} }
message VoteKickReplyMessage { message VoteKickReplyMessage {
required uint32 gameId = 1; required uint32 petitionId = 1;
required uint32 petitionId = 2;
enum VoteKickReplyType { enum VoteKickReplyType {
voteKickAck = 0; voteKickAck = 0;
voteKickDeniedInvalid = 1; voteKickDeniedInvalid = 1;
voteKickDeniedAlreadyVoted = 2; voteKickDeniedAlreadyVoted = 2;
} }
required VoteKickReplyType voteKickReplyType = 3; required VoteKickReplyType voteKickReplyType = 2;
} }
message KickPetitionUpdateMessage { message KickPetitionUpdateMessage {
required uint32 gameId = 1; required uint32 petitionId = 1;
required uint32 petitionId = 2; required uint32 numVotesAgainstKicking = 2;
required uint32 numVotesAgainstKicking = 3; required uint32 numVotesInFavourOfKicking = 3;
required uint32 numVotesInFavourOfKicking = 4; required uint32 numVotesNeededToKick = 4;
required uint32 numVotesNeededToKick = 5;
} }
message EndKickPetitionMessage { message EndKickPetitionMessage {
required uint32 gameId = 1; required uint32 petitionId = 1;
required uint32 petitionId = 2; required uint32 numVotesAgainstKicking = 2;
required uint32 numVotesAgainstKicking = 3; required uint32 numVotesInFavourOfKicking = 3;
required uint32 numVotesInFavourOfKicking = 4; required uint32 resultPlayerKicked = 4;
required uint32 resultPlayerKicked = 5;
enum PetitionEndReason { enum PetitionEndReason {
petitionEndEnoughVotes = 0; petitionEndEnoughVotes = 0;
petitionEndTooFewPlayers = 1; petitionEndTooFewPlayers = 1;
petitionEndPlayerLeft = 2; petitionEndPlayerLeft = 2;
petitionEndTimeout = 3; petitionEndTimeout = 3;
} }
required PetitionEndReason petitionEndReason = 6; required PetitionEndReason petitionEndReason = 5;
} }
message StatisticsMessage { message StatisticsMessage {
@@ -631,23 +613,20 @@ message StatisticsMessage {
} }
message ChatRequestMessage { message ChatRequestMessage {
optional uint32 targetGameId = 1;
optional uint32 targetPlayerId = 2; optional uint32 targetPlayerId = 2;
required string chatText = 3; required string chatText = 3;
} }
message ChatMessage { message ChatMessage {
optional uint32 gameId = 1; optional uint32 playerId = 1;
optional uint32 playerId = 2;
enum ChatType { enum ChatType {
chatTypeLobby = 0; chatTypeStandard = 0;
chatTypeGame = 1; chatTypeBot = 1;
chatTypeBot = 2; chatTypeBroadcast = 2;
chatTypeBroadcast = 3; chatTypePrivate = 3;
chatTypePrivate = 4;
} }
required ChatType chatType = 3; required ChatType chatType = 2;
required string chatText = 4; required string chatText = 3;
} }
message ChatRejectMessage { message ChatRejectMessage {
@@ -702,7 +681,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;
@@ -750,173 +729,236 @@ message AdminBanPlayerAckMessage {
required AdminBanPlayerResult banPlayerResult = 2; required AdminBanPlayerResult banPlayerResult = 2;
} }
// The main message type (it is prefixed by 4 bytes length of the message). message AuthMessage {
enum AuthMessageType {
Type_AuthClientRequestMessage = 1;
Type_AuthServerChallengeMessage = 2;
Type_AuthClientResponseMessage = 3;
Type_AuthServerVerificationMessage = 4;
Type_ErrorMessage = 1024;
}
required AuthMessageType messageType = 1;
optional AuthClientRequestMessage authClientRequestMessage = 2;
optional AuthServerChallengeMessage authServerChallengeMessage = 3;
optional AuthClientResponseMessage authClientResponseMessage = 4;
optional AuthServerVerificationMessage authServerVerificationMessage = 5;
optional ErrorMessage errorMessage = 1025;
}
message LobbyMessage {
enum LobbyMessageType {
Type_InitDoneMessage = 1;
Type_AvatarRequestMessage = 2;
Type_AvatarHeaderMessage = 3;
Type_AvatarDataMessage = 4;
Type_AvatarEndMessage = 5;
Type_UnknownAvatarMessage = 6;
Type_PlayerListMessage = 7;
Type_GameListNewMessage = 8;
Type_GameListUpdateMessage = 9;
Type_GameListPlayerJoinedMessage = 10;
Type_GameListPlayerLeftMessage = 11;
Type_GameListSpectatorJoinedMessage = 12;
Type_GameListSpectatorLeftMessage = 13;
Type_GameListAdminChangedMessage = 14;
Type_PlayerInfoRequestMessage = 15;
Type_PlayerInfoReplyMessage = 16;
Type_SubscriptionRequestMessage = 17;
Type_SubscriptionReplyMessage = 18;
Type_CreateGameMessage = 19;
Type_CreateGameFailedMessage = 20;
Type_JoinGameMessage = 21;
Type_RejoinGameMessage = 22;
Type_JoinGameAckMessage = 23;
Type_JoinGameFailedMessage = 24;
Type_InviteNotifyMessage = 25;
Type_RejectGameInvitationMessage = 26;
Type_RejectInvNotifyMessage = 27;
Type_StatisticsMessage = 28;
Type_ChatRequestMessage = 29;
Type_ChatMessage = 30;
Type_ChatRejectMessage = 31;
Type_DialogMessage = 32;
Type_TimeoutWarningMessage = 33;
Type_ResetTimeoutMessage = 34;
Type_ReportAvatarMessage = 35;
Type_ReportAvatarAckMessage = 36;
Type_ReportGameMessage = 37;
Type_ReportGameAckMessage = 38;
Type_AdminRemoveGameMessage = 39;
Type_AdminRemoveGameAckMessage = 40;
Type_AdminBanPlayerMessage = 41;
Type_AdminBanPlayerAckMessage = 42;
Type_ErrorMessage = 1024;
}
required LobbyMessageType messageType = 1;
optional InitDoneMessage initDoneMessage = 2;
optional AvatarRequestMessage avatarRequestMessage = 3;
optional AvatarHeaderMessage avatarHeaderMessage = 4;
optional AvatarDataMessage avatarDataMessage = 5;
optional AvatarEndMessage avatarEndMessage = 6;
optional UnknownAvatarMessage unknownAvatarMessage = 7;
optional PlayerListMessage playerListMessage = 8;
optional GameListNewMessage gameListNewMessage = 9;
optional GameListUpdateMessage gameListUpdateMessage = 10;
optional GameListPlayerJoinedMessage gameListPlayerJoinedMessage = 11;
optional GameListPlayerLeftMessage gameListPlayerLeftMessage = 12;
optional GameListSpectatorJoinedMessage gameListSpectatorJoinedMessage = 13;
optional GameListSpectatorLeftMessage gameListSpectatorLeftMessage = 14;
optional GameListAdminChangedMessage gameListAdminChangedMessage = 15;
optional PlayerInfoRequestMessage playerInfoRequestMessage = 16;
optional PlayerInfoReplyMessage playerInfoReplyMessage = 17;
optional SubscriptionRequestMessage subscriptionRequestMessage = 18;
optional SubscriptionReplyMessage subscriptionReplyMessage = 19;
optional CreateGameMessage createGameMessage = 20;
optional CreateGameFailedMessage createGameFailedMessage = 21;
optional JoinGameMessage joinGameMessage = 22;
optional RejoinGameMessage rejoinGameMessage = 23;
optional JoinGameAckMessage joinGameAckMessage = 24;
optional JoinGameFailedMessage joinGameFailedMessage = 25;
optional InviteNotifyMessage inviteNotifyMessage = 26;
optional RejectGameInvitationMessage rejectGameInvitationMessage = 27;
optional RejectInvNotifyMessage rejectInvNotifyMessage = 28;
optional StatisticsMessage statisticsMessage = 29;
optional ChatRequestMessage chatRequestMessage = 30;
optional ChatMessage chatMessage = 31;
optional ChatRejectMessage chatRejectMessage = 32;
optional DialogMessage dialogMessage = 33;
optional TimeoutWarningMessage timeoutWarningMessage = 34;
optional ResetTimeoutMessage resetTimeoutMessage = 35;
optional ReportAvatarMessage reportAvatarMessage = 36;
optional ReportAvatarAckMessage reportAvatarAckMessage = 37;
optional ReportGameMessage reportGameMessage = 38;
optional ReportGameAckMessage reportGameAckMessage = 39;
optional AdminRemoveGameMessage adminRemoveGameMessage = 40;
optional AdminRemoveGameAckMessage adminRemoveGameAckMessage = 41;
optional AdminBanPlayerMessage adminBanPlayerMessage = 42;
optional AdminBanPlayerAckMessage adminBanPlayerAckMessage = 43;
optional ErrorMessage errorMessage = 1025;
}
message GameManagementMessage {
enum GameManagementMessageType {
Type_GamePlayerJoinedMessage = 1;
Type_GamePlayerLeftMessage = 2;
Type_GameSpectatorJoinedMessage = 3;
Type_GameSpectatorLeftMessage = 4;
Type_GameAdminChangedMessage = 5;
Type_RemovedFromGameMessage = 6;
Type_KickPlayerRequestMessage = 7;
Type_LeaveGameRequestMessage = 8;
Type_InvitePlayerToGameMessage = 9;
Type_StartEventMessage = 10;
Type_StartEventAckMessage = 11;
Type_GameStartInitialMessage = 12;
Type_GameStartRejoinMessage = 13;
Type_EndOfGameMessage = 14;
Type_PlayerIdChangedMessage = 15;
Type_AskKickPlayerMessage = 16;
Type_AskKickDeniedMessage = 17;
Type_StartKickPetitionMessage = 18;
Type_VoteKickRequestMessage = 19;
Type_VoteKickReplyMessage = 20;
Type_KickPetitionUpdateMessage = 21;
Type_EndKickPetitionMessage = 22;
Type_ChatRequestMessage = 23;
Type_ChatMessage = 24;
Type_ChatRejectMessage = 25;
Type_TimeoutWarningMessage = 26;
Type_ResetTimeoutMessage = 27;
Type_ErrorMessage = 1024;
}
required GameManagementMessageType messageType = 1;
optional GamePlayerJoinedMessage gamePlayerJoinedMessage = 2;
optional GamePlayerLeftMessage gamePlayerLeftMessage = 3;
optional GameSpectatorJoinedMessage gameSpectatorJoinedMessage = 4;
optional GameSpectatorLeftMessage gameSpectatorLeftMessage = 5;
optional GameAdminChangedMessage gameAdminChangedMessage = 6;
optional RemovedFromGameMessage removedFromGameMessage = 7;
optional KickPlayerRequestMessage kickPlayerRequestMessage = 8;
optional LeaveGameRequestMessage leaveGameRequestMessage = 9;
optional InvitePlayerToGameMessage invitePlayerToGameMessage = 10;
optional StartEventMessage startEventMessage = 11;
optional StartEventAckMessage startEventAckMessage = 12;
optional GameStartInitialMessage gameStartInitialMessage = 13;
optional GameStartRejoinMessage gameStartRejoinMessage = 14;
optional EndOfGameMessage endOfGameMessage = 15;
optional PlayerIdChangedMessage playerIdChangedMessage = 16;
optional AskKickPlayerMessage askKickPlayerMessage = 17;
optional AskKickDeniedMessage askKickDeniedMessage = 18;
optional StartKickPetitionMessage startKickPetitionMessage = 19;
optional VoteKickRequestMessage voteKickRequestMessage = 20;
optional VoteKickReplyMessage voteKickReplyMessage = 21;
optional KickPetitionUpdateMessage kickPetitionUpdateMessage = 22;
optional EndKickPetitionMessage endKickPetitionMessage = 23;
optional ChatRequestMessage chatRequestMessage = 24;
optional ChatMessage chatMessage = 25;
optional ChatRejectMessage chatRejectMessage = 26;
optional TimeoutWarningMessage timeoutWarningMessage = 27;
optional ResetTimeoutMessage resetTimeoutMessage = 28;
optional ErrorMessage errorMessage = 1025;
}
message GameEngineMessage {
enum GameEngineMessageType {
Type_HandStartMessage = 1;
Type_PlayersTurnMessage = 2;
Type_MyActionRequestMessage = 3;
Type_YourActionRejectedMessage = 4;
Type_PlayersActionDoneMessage = 5;
Type_DealFlopCardsMessage = 6;
Type_DealTurnCardMessage = 7;
Type_DealRiverCardMessage = 8;
Type_AllInShowCardsMessage = 9;
Type_EndOfHandShowCardsMessage = 10;
Type_EndOfHandHideCardsMessage = 11;
Type_ShowMyCardsRequestMessage = 12;
Type_AfterHandShowCardsMessage = 13;
}
required GameEngineMessageType messageType = 1;
optional HandStartMessage handStartMessage = 2;
optional PlayersTurnMessage playersTurnMessage = 3;
optional MyActionRequestMessage myActionRequestMessage = 4;
optional YourActionRejectedMessage yourActionRejectedMessage = 5;
optional PlayersActionDoneMessage playersActionDoneMessage = 6;
optional DealFlopCardsMessage dealFlopCardsMessage = 7;
optional DealTurnCardMessage dealTurnCardMessage = 8;
optional DealRiverCardMessage dealRiverCardMessage = 9;
optional AllInShowCardsMessage allInShowCardsMessage = 10;
optional EndOfHandShowCardsMessage endOfHandShowCardsMessage = 11;
optional EndOfHandHideCardsMessage endOfHandHideCardsMessage = 12;
optional ShowMyCardsRequestMessage showMyCardsRequestMessage = 13;
optional AfterHandShowCardsMessage afterHandShowCardsMessage = 14;
}
message GameMessage {
enum GameMessageType {
Type_GameManagementMessage = 1;
Type_GameEngineMessage = 2;
}
required GameMessageType messageType = 1;
required uint32 gameId = 2;
optional GameManagementMessage gameManagementMessage = 3;
optional GameEngineMessage gameEngineMessage = 4;
}
// The main message type (with TCP, it is prefixed by 4 bytes length of the message).
message PokerTHMessage { message PokerTHMessage {
enum PokerTHMessageType { enum PokerTHMessageType {
Type_AnnounceMessage = 1; Type_AnnounceMessage = 1;
Type_InitMessage = 2; Type_AuthMessage = 2;
Type_AuthServerChallengeMessage = 3; Type_LobbyMessage = 3;
Type_AuthClientResponseMessage = 4; Type_GameMessage = 4;
Type_AuthServerVerificationMessage = 5;
Type_InitAckMessage = 6;
Type_AvatarRequestMessage = 7;
Type_AvatarHeaderMessage = 8;
Type_AvatarDataMessage = 9;
Type_AvatarEndMessage = 10;
Type_UnknownAvatarMessage = 11;
Type_PlayerListMessage = 12;
Type_GameListNewMessage = 13;
Type_GameListUpdateMessage = 14;
Type_GameListPlayerJoinedMessage = 15;
Type_GameListPlayerLeftMessage = 16;
Type_GameListAdminChangedMessage = 17;
Type_PlayerInfoRequestMessage = 18;
Type_PlayerInfoReplyMessage = 19;
Type_SubscriptionRequestMessage = 20;
Type_JoinExistingGameMessage = 21;
Type_JoinNewGameMessage = 22;
Type_RejoinExistingGameMessage = 23;
Type_JoinGameAckMessage = 24;
Type_JoinGameFailedMessage = 25;
Type_GamePlayerJoinedMessage = 26;
Type_GamePlayerLeftMessage = 27;
Type_GameAdminChangedMessage = 28;
Type_RemovedFromGameMessage = 29;
Type_KickPlayerRequestMessage = 30;
Type_LeaveGameRequestMessage = 31;
Type_InvitePlayerToGameMessage = 32;
Type_InviteNotifyMessage = 33;
Type_RejectGameInvitationMessage = 34;
Type_RejectInvNotifyMessage = 35;
Type_StartEventMessage = 36;
Type_StartEventAckMessage = 37;
Type_GameStartInitialMessage = 38;
Type_GameStartRejoinMessage = 39;
Type_HandStartMessage = 40;
Type_PlayersTurnMessage = 41;
Type_MyActionRequestMessage = 42;
Type_YourActionRejectedMessage = 43;
Type_PlayersActionDoneMessage = 44;
Type_DealFlopCardsMessage = 45;
Type_DealTurnCardMessage = 46;
Type_DealRiverCardMessage = 47;
Type_AllInShowCardsMessage = 48;
Type_EndOfHandShowCardsMessage = 49;
Type_EndOfHandHideCardsMessage = 50;
Type_ShowMyCardsRequestMessage = 51;
Type_AfterHandShowCardsMessage = 52;
Type_EndOfGameMessage = 53;
Type_PlayerIdChangedMessage = 54;
Type_AskKickPlayerMessage = 55;
Type_AskKickDeniedMessage = 56;
Type_StartKickPetitionMessage = 57;
Type_VoteKickRequestMessage = 58;
Type_VoteKickReplyMessage = 59;
Type_KickPetitionUpdateMessage = 60;
Type_EndKickPetitionMessage = 61;
Type_StatisticsMessage = 62;
Type_ChatRequestMessage = 63;
Type_ChatMessage = 64;
Type_ChatRejectMessage = 65;
Type_DialogMessage = 66;
Type_TimeoutWarningMessage = 67;
Type_ResetTimeoutMessage = 68;
Type_ReportAvatarMessage = 69;
Type_ReportAvatarAckMessage = 70;
Type_ReportGameMessage = 71;
Type_ReportGameAckMessage = 72;
Type_ErrorMessage = 73;
Type_AdminRemoveGameMessage = 74;
Type_AdminRemoveGameAckMessage = 75;
Type_AdminBanPlayerMessage = 76;
Type_AdminBanPlayerAckMessage = 77;
Type_GameListSpectatorJoinedMessage = 78;
Type_GameListSpectatorLeftMessage = 79;
Type_GameSpectatorJoinedMessage = 80;
Type_GameSpectatorLeftMessage = 81;
} }
required PokerTHMessageType messageType = 1; required PokerTHMessageType messageType = 1;
optional AnnounceMessage announceMessage = 2; optional AnnounceMessage announceMessage = 2;
optional InitMessage initMessage = 3; optional AuthMessage authMessage = 3;
optional AuthServerChallengeMessage authServerChallengeMessage = 4; optional LobbyMessage lobbyMessage = 4;
optional AuthClientResponseMessage authClientResponseMessage = 5; optional GameMessage gameMessage = 5;
optional AuthServerVerificationMessage authServerVerificationMessage = 6;
optional InitAckMessage initAckMessage = 7;
optional AvatarRequestMessage avatarRequestMessage = 8;
optional AvatarHeaderMessage avatarHeaderMessage = 9;
optional AvatarDataMessage avatarDataMessage = 10;
optional AvatarEndMessage avatarEndMessage = 11;
optional UnknownAvatarMessage unknownAvatarMessage = 12;
optional PlayerListMessage playerListMessage = 13;
optional GameListNewMessage gameListNewMessage = 14;
optional GameListUpdateMessage gameListUpdateMessage = 15;
optional GameListPlayerJoinedMessage gameListPlayerJoinedMessage = 16;
optional GameListPlayerLeftMessage gameListPlayerLeftMessage = 17;
optional GameListAdminChangedMessage gameListAdminChangedMessage = 18;
optional PlayerInfoRequestMessage playerInfoRequestMessage = 19;
optional PlayerInfoReplyMessage playerInfoReplyMessage = 20;
optional SubscriptionRequestMessage subscriptionRequestMessage = 21;
optional JoinExistingGameMessage joinExistingGameMessage = 22;
optional JoinNewGameMessage joinNewGameMessage = 23;
optional RejoinExistingGameMessage rejoinExistingGameMessage = 24;
optional JoinGameAckMessage joinGameAckMessage = 25;
optional JoinGameFailedMessage joinGameFailedMessage = 26;
optional GamePlayerJoinedMessage gamePlayerJoinedMessage = 27;
optional GamePlayerLeftMessage gamePlayerLeftMessage = 28;
optional GameAdminChangedMessage gameAdminChangedMessage = 29;
optional RemovedFromGameMessage removedFromGameMessage = 30;
optional KickPlayerRequestMessage kickPlayerRequestMessage = 31;
optional LeaveGameRequestMessage leaveGameRequestMessage = 32;
optional InvitePlayerToGameMessage invitePlayerToGameMessage = 33;
optional InviteNotifyMessage inviteNotifyMessage = 34;
optional RejectGameInvitationMessage rejectGameInvitationMessage = 35;
optional RejectInvNotifyMessage rejectInvNotifyMessage = 36;
optional StartEventMessage startEventMessage = 37;
optional StartEventAckMessage startEventAckMessage = 38;
optional GameStartInitialMessage gameStartInitialMessage = 39;
optional GameStartRejoinMessage gameStartRejoinMessage = 40;
optional HandStartMessage handStartMessage = 41;
optional PlayersTurnMessage playersTurnMessage = 42;
optional MyActionRequestMessage myActionRequestMessage = 43;
optional YourActionRejectedMessage yourActionRejectedMessage = 44;
optional PlayersActionDoneMessage playersActionDoneMessage = 45;
optional DealFlopCardsMessage dealFlopCardsMessage = 46;
optional DealTurnCardMessage dealTurnCardMessage = 47;
optional DealRiverCardMessage dealRiverCardMessage = 48;
optional AllInShowCardsMessage allInShowCardsMessage = 49;
optional EndOfHandShowCardsMessage endOfHandShowCardsMessage = 50;
optional EndOfHandHideCardsMessage endOfHandHideCardsMessage = 51;
optional ShowMyCardsRequestMessage showMyCardsRequestMessage = 52;
optional AfterHandShowCardsMessage afterHandShowCardsMessage = 53;
optional EndOfGameMessage endOfGameMessage = 54;
optional PlayerIdChangedMessage playerIdChangedMessage = 55;
optional AskKickPlayerMessage askKickPlayerMessage = 56;
optional AskKickDeniedMessage askKickDeniedMessage = 57;
optional StartKickPetitionMessage startKickPetitionMessage = 58;
optional VoteKickRequestMessage voteKickRequestMessage = 59;
optional VoteKickReplyMessage voteKickReplyMessage = 60;
optional KickPetitionUpdateMessage kickPetitionUpdateMessage = 61;
optional EndKickPetitionMessage endKickPetitionMessage = 62;
optional StatisticsMessage statisticsMessage = 63;
optional ChatRequestMessage chatRequestMessage = 64;
optional ChatMessage chatMessage = 65;
optional ChatRejectMessage chatRejectMessage = 66;
optional DialogMessage dialogMessage = 67;
optional TimeoutWarningMessage timeoutWarningMessage = 68;
optional ResetTimeoutMessage resetTimeoutMessage = 69;
optional ReportAvatarMessage reportAvatarMessage = 70;
optional ReportAvatarAckMessage reportAvatarAckMessage = 71;
optional ReportGameMessage reportGameMessage = 72;
optional ReportGameAckMessage reportGameAckMessage = 73;
optional ErrorMessage errorMessage = 74;
optional AdminRemoveGameMessage adminRemoveGameMessage = 75;
optional AdminRemoveGameAckMessage adminRemoveGameAckMessage = 76;
optional AdminBanPlayerMessage adminBanPlayerMessage = 77;
optional AdminBanPlayerAckMessage adminBanPlayerAckMessage = 78;
optional GameListSpectatorJoinedMessage gameListSpectatorJoinedMessage = 79;
optional GameListSpectatorLeftMessage gameListSpectatorLeftMessage = 80;
optional GameSpectatorJoinedMessage gameSpectatorJoinedMessage = 81;
optional GameSpectatorLeftMessage gameSpectatorLeftMessage = 82;
} }
-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
-5
View File
@@ -14,9 +14,6 @@ OBJECTS_DIR = obj
QT -= core \ QT -= core \
gui gui
# Check for c++11
include(pokerth_common.pro)
# PRECOMPILED_HEADER = dbofficial/pch_lib.h # PRECOMPILED_HEADER = dbofficial/pch_lib.h
INCLUDEPATH += . \ INCLUDEPATH += . \
./src ./src
@@ -42,7 +39,6 @@ HEADERS += src/dbofficial/asyncdbauth.h \
src/dbofficial/asyncdbavatarblacklist.h \ src/dbofficial/asyncdbavatarblacklist.h \
src/dbofficial/asyncdbadminplayers.h \ src/dbofficial/asyncdbadminplayers.h \
src/dbofficial/asyncdbblockplayer.h \ src/dbofficial/asyncdbblockplayer.h \
src/dbofficial/asyncdbplayerlastgames.h \
src/dbofficial/dbidmanager.h src/dbofficial/dbidmanager.h
SOURCES += src/dbofficial/asyncdbauth.cpp \ SOURCES += src/dbofficial/asyncdbauth.cpp \
src/dbofficial/asyncdbcreategame.cpp \ src/dbofficial/asyncdbcreategame.cpp \
@@ -61,7 +57,6 @@ SOURCES += src/dbofficial/asyncdbauth.cpp \
src/dbofficial/asyncdbavatarblacklist.cpp \ src/dbofficial/asyncdbavatarblacklist.cpp \
src/dbofficial/asyncdbadminplayers.cpp \ src/dbofficial/asyncdbadminplayers.cpp \
src/dbofficial/asyncdbblockplayer.cpp \ src/dbofficial/asyncdbblockplayer.cpp \
src/dbofficial/asyncdbplayerlastgames.cpp \
src/dbofficial/dbidmanager.cpp src/dbofficial/dbidmanager.cpp
win32 { win32 {
DEFINES += _WIN32_WINNT=0x0501 DEFINES += _WIN32_WINNT=0x0501
Regular → Executable
+37 -45
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{
@@ -412,11 +409,11 @@ unix:!mac {
LIB_DIRS = $${PREFIX}/lib \ LIB_DIRS = $${PREFIX}/lib \
$${PREFIX}/lib64 \ $${PREFIX}/lib64 \
$${PREFIX}/lib/x86_64-linux-gnu \ $${PREFIX}/lib/x86_64-linux-gnu \
$$system($$QMAKE_QMAKE -query QT_INSTALL_LIBS) $$system(qmake -query QT_INSTALL_LIBS)
} }
android{ android{
LIBPATH += $${PREFIX}/lib/armv7 LIBPATH += $${PREFIX}/lib/armv5
LIB_DIRS = $${PREFIX}/lib/armv7 LIB_DIRS = $${PREFIX}/lib/armv5
} }
BOOST_FS = boost_filesystem \ BOOST_FS = boost_filesystem \
boost_filesystem-mt boost_filesystem-mt
@@ -426,14 +423,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 +466,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 +492,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}")
}
!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}") !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,8 +521,9 @@ 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, 6):error("Unable to find boost libraries in PREFIX=$${PREFIX}lib/armv5")
LIBS += -ltinyxml LIBS += -ltinyxml
LIBS += $$BOOST_LIBS LIBS += $$BOOST_LIBS
LIBS += -lgsasl -lidn LIBS += -lgsasl -lidn
@@ -576,7 +561,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 +573,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
# SDL and SDL_mixer come as frameworks
LIBS += -framework \ LIBS += -framework \
SDL SDL
LIBS += -framework \ LIBS += -framework \
SDL_mixer 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,21 +602,15 @@ 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
LIBPATH += /usr/local/opt/tinyxml/lib
LIBPATH += /usr/local/opt/protobuf/lib
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.framework/Headers
INCLUDEPATH += /Library/Frameworks/SDL_mixer.framework/Headers INCLUDEPATH += /Library/Frameworks/SDL_mixer.framework/Headers
INCLUDEPATH += /usr/local/include
} }
OTHER_FILES += docs/infomessage-id-desc.txt OTHER_FILES += docs/infomessage-id-desc.txt
official_server { official_server {
@@ -704,3 +685,14 @@ android_test{
HEADERS += src/gui/qt/sound/androidapi8dummy.h HEADERS += src/gui/qt/sound/androidapi8dummy.h
SOURCES += src/gui/qt/sound/androidapi8dummy.cpp SOURCES += src/gui/qt/sound/androidapi8dummy.cpp
} }
DISTFILES += \
android/AndroidManifest.xml \
android/gradle/wrapper/gradle-wrapper.jar \
android/gradlew \
android/res/values/libs.xml \
android/build.gradle \
android/gradle/wrapper/gradle-wrapper.properties \
android/gradlew.bat
ANDROID_PACKAGE_SOURCE_DIR = $$PWD/android
+26 -53
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 \
@@ -74,7 +71,6 @@ HEADERS += \
src/net/clientthread.h \ src/net/clientthread.h \
src/net/genericsocket.h \ src/net/genericsocket.h \
src/net/netpacket.h \ src/net/netpacket.h \
src/net/netpacketvalidator.h \
src/net/senderhelper.h \ src/net/senderhelper.h \
src/net/sendercallback.h \ src/net/sendercallback.h \
src/net/serverexception.h \ src/net/serverexception.h \
@@ -141,7 +137,14 @@ HEADERS += \
src/net/servermanagerfactory.h \ src/net/servermanagerfactory.h \
src/net/uploadcallback.h \ src/net/uploadcallback.h \
src/net/websocket_defs.h \ src/net/websocket_defs.h \
src/net/websocketdata.h src/net/websocketdata.h \
src/net/validation/lobbymessagevalidator.h \
src/net/validation/authmessagevalidator.h \
src/net/validation/gamemessagevalidator.h \
src/net/validation/gameenginemessagevalidator.h \
src/net/validation/gamemanagementmessagevalidator.h \
src/net/validation/pokerthmessagevalidator.h \
src/net/validation/validationhelper.h
SOURCES += \ SOURCES += \
src/engine/game.cpp \ src/engine/game.cpp \
@@ -186,7 +189,6 @@ SOURCES += \
src/net/common/downloadhelper.cpp \ src/net/common/downloadhelper.cpp \
src/net/common/downloaderthread.cpp \ src/net/common/downloaderthread.cpp \
src/net/common/netpacket.cpp \ src/net/common/netpacket.cpp \
src/net/common/netpacketvalidator.cpp \
src/net/common/senderhelper.cpp \ src/net/common/senderhelper.cpp \
src/net/common/sendercallback.cpp \ src/net/common/sendercallback.cpp \
src/net/common/serverexception.cpp \ src/net/common/serverexception.cpp \
@@ -195,6 +197,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 \
@@ -220,7 +223,13 @@ SOURCES += \
src/net/common/receivebuffer.cpp \ src/net/common/receivebuffer.cpp \
src/net/common/asioreceivebuffer.cpp \ src/net/common/asioreceivebuffer.cpp \
src/net/common/webreceivebuffer.cpp \ src/net/common/webreceivebuffer.cpp \
src/net/common/uploadcallback.cpp src/net/common/uploadcallback.cpp \
src/net/common/validation/authmessagevalidator.cpp \
src/net/common/validation/gamemessagevalidator.cpp \
src/net/common/validation/lobbymessagevalidator.cpp \
src/net/common/validation/pokerthmessagevalidator.cpp \
src/net/common/validation/gameenginemessagevalidator.cpp \
src/net/common/validation/gamemanagementmessagevalidator.cpp
!android:!android_test{ !android:!android_test{
SOURCES += src/engine/local_engine/tools.cpp SOURCES += src/engine/local_engine/tools.cpp
@@ -229,49 +238,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{
@@ -282,11 +251,15 @@ win32{
win32-g++ { win32-g++ {
INCLUDEPATH += ../boost/ ../GnuTLS/include ../gsasl/include ../curl/include ../zlib ../sqlite ../openssl/include INCLUDEPATH += ../boost/ ../GnuTLS/include ../gsasl/include ../curl/include ../zlib ../sqlite ../openssl/include
} }
DEFINES += _WEBSOCKETPP_CPP11_STL_
QMAKE_CXXFLAGS += -std=gnu++11
} }
!win32{ !win32{
##### My release static build options ##### My release static build options
#QMAKE_CXXFLAGS += -ffunction-sections -fdata-sections #QMAKE_CXXFLAGS += -ffunction-sections -fdata-sections
INCLUDEPATH += $${PREFIX}/include /opt/gsasl/include INCLUDEPATH += $${PREFIX}/include /opt/gsasl/include
DEFINES += _WEBSOCKETPP_CPP11_STL_
QMAKE_CXXFLAGS += -std=gnu++11
} }
mac{ mac{
@@ -294,17 +267,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 += /usr/local/include
INCLUDEPATH += /Library/Frameworks/SDL.framework/Headers INCLUDEPATH += /Library/Frameworks/SDL.framework/Headers
INCLUDEPATH += /Library/Frameworks/SDL_mixer.framework/Headers INCLUDEPATH += /Library/Frameworks/SDL_mixer.framework/Headers
INCLUDEPATH += /usr/local/include
} }
android{ android{
Regular → Executable
+1 -9
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,17 +31,12 @@ 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 { android {
system(wine protoc.exe pokerth.proto --cpp_out=src/third_party/protobuf) 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 chatcleaner.proto --cpp_out=src/third_party/protobuf)
@@ -56,7 +48,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
# 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.
+247
View File
@@ -0,0 +1,247 @@
QMAKE_MOC = $$QMAKE_MOC -DBOOST_NO_TEMPLATE_PARTIAL_SPECIALIZATION
isEmpty( PREFIX ){
PREFIX =/usr
}
DEFINES += PREFIX=\"$${PREFIX}\"
TEMPLATE = app
CODECFORSRC = UTF-8
QT += core qml quick widgets svg sql
CONFIG += qt thread embed_manifest_exe exceptions rtti stl warn_on
DEFINES += ENABLE_IPV6 TIXML_USE_STL BOOST_FILESYSTEM_DEPRECATED
DEFINES += QML_CLIENT
RESOURCES += src/gui/qml/qml.qrc
# Additional import path used to resolve QML modules in Qt Creator's code model
QML_IMPORT_PATH = \
src/gui/qml/views/startview/ \
src/gui/qml/views/createlocalgameview/ \
src/gui/qml/views/ \
src/gui/qml/components/styles/ \
src/gui/qml/components/ \
src/gui/qml/js/
# Default rules for deployment.
include(src/gui/qml/deployment.pri)
INCLUDEPATH += . \
src \
src/config \
src/core \
src/core/common \
src/core/common/qttools \
src/core/common/qttools/qthelper \
src/gui \
src/gui/qml/cpp
DEPENDPATH += . \
src \
src/config \
src/core \
src/core/common \
src/core/common/qttools \
src/core/common/qttools/qthelper \
src/gui \
src/gui/qml/cpp
HEADERS += \
src/core/loghelper.h \
src/core/common/qttools/qthelper/qthelper.h \
src/core/common/qttools/qttoolswrapper.h \
src/core/common/qttoolsinterface.h \
src/gui/qml/cpp/qmlwrapper.h \
src/gui/qml/cpp/qmlconfig.h \
src/gui/qml/cpp/startviewimpl.h \
src/gui/qml/cpp/createlocalgameviewimpl.h \
src/gui/qml/cpp/mylistviewitemdata.h
SOURCES += \
src/pokerth.cpp \
src/core/common/loghelper_client.cpp \
src/core/common/qttools/qthelper/qthelper.cpp \
src/core/common/qttools/qttoolswrapper.cpp \
src/core/common/qttoolsinterface.cpp \
src/gui/qml/cpp/qmlwrapper.cpp \
src/gui/qml/cpp/qmlconfig.cpp \
src/gui/qml/cpp/createlocalgameviewimpl.cpp \
src/gui/qml/cpp/startviewimpl.cpp
LIBS += \
-lpokerth_lib \
-lpokerth_db \
-lpokerth_protocol \
-lcurl
unix:!mac {
# #### My release static build options
# QMAKE_CXXFLAGS += -ffunction-sections -fdata-sections
# QMAKE_LFLAGS += -Wl,--gc-sections
INCLUDEPATH += $${PREFIX}/include
QMAKE_LIBDIR += lib
!android{
LIBPATH += $${PREFIX}/lib /opt/gsasl/lib
LIB_DIRS = $${PREFIX}/lib \
$${PREFIX}/lib64 \
$${PREFIX}/lib/x86_64-linux-gnu \
$$system(qmake -query QT_INSTALL_LIBS)
}
android{
LIBPATH += $${PREFIX}/lib/armv5
LIB_DIRS = $${PREFIX}/lib/armv5
}
# BEGIN TODO: Cleanup!!! --> This is just a copy from pokerth_game.pro when starting with c++ integration
BOOST_FS = boost_filesystem \
boost_filesystem-mt
BOOST_THREAD = boost_thread \
boost_thread-mt
BOOST_IOSTREAMS = boost_iostreams \
boost_iostreams-mt
BOOST_REGEX = boost_regex \
boost_regex-mt
BOOST_CHRONO = boost_chrono \
boost_chrono-mt
BOOST_SYS = boost_system \
boost_system-mt
BOOST_RANDOM = boost_random \
boost_random-mt
# searching in $PREFIX/lib, $PREFIX/lib64 and $$system(qmake -query QT_INSTALL_LIBS)
# to override the default '/usr' pass PREFIX
# variable to qmake.
for(dir, LIB_DIRS):exists($$dir) {
for(lib, BOOST_THREAD):exists($${dir}/lib$${lib}.so*) {
message("Found $$lib")
BOOST_THREAD = -l$$lib
}
for(lib, BOOST_THREAD):exists($${dir}/lib$${lib}.a) {
message("Found $$lib")
BOOST_THREAD = -l$$lib
}
for(lib, BOOST_FS):exists($${dir}/lib$${lib}.so*) {
message("Found $$lib")
BOOST_FS = -l$$lib
}
for(lib, BOOST_FS):exists($${dir}/lib$${lib}.a) {
message("Found $$lib")
BOOST_FS = -l$$lib
}
for(lib, BOOST_IOSTREAMS):exists($${dir}/lib$${lib}.so*) {
message("Found $$lib")
BOOST_IOSTREAMS = -l$$lib
}
for(lib, BOOST_IOSTREAMS):exists($${dir}/lib$${lib}.a) {
message("Found $$lib")
BOOST_IOSTREAMS = -l$$lib
}
for(lib, BOOST_REGEX):exists($${dir}/lib$${lib}.so*) {
message("Found $$lib")
BOOST_REGEX = -l$$lib
}
for(lib, BOOST_REGEX):exists($${dir}/lib$${lib}.a) {
message("Found $$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{
for(lib, BOOST_RANDOM):exists($${dir}/lib$${lib}.so*) {
message("Found $$lib")
BOOST_RANDOM = -l$$lib
}
for(lib, BOOST_RANDOM):exists($${dir}/lib$${lib}.a) {
message("Found $$lib")
BOOST_RANDOM = -l$$lib
}
}
for(lib, BOOST_SYS):exists($${dir}/lib$${lib}.so*) {
message("Found $$lib")
BOOST_SYS = -l$$lib
}
for(lib, BOOST_SYS):exists($${dir}/lib$${lib}.a) {
message("Found $$lib")
BOOST_SYS = -l$$lib
}
}
!android{
BOOST_LIBS = $$BOOST_THREAD \
$$BOOST_FS \
$$BOOST_IOSTREAMS \
$$BOOST_REGEX \
$$BOOST_CHRONO \
$$BOOST_RANDOM \
$$BOOST_SYS
!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!")
UNAME = $$system(uname -s)
BSD = $$find(UNAME, "BSD")
kFreeBSD = $$find(UNAME, "kFreeBSD")
LIBS += -lsqlite3 \
-ltinyxml \
-lprotobuf
LIBS += $$BOOST_LIBS
LIBS += -lSDL \
-lSDL_mixer \
-lgsasl
!isEmpty( BSD ):isEmpty( kFreeBSD ):LIBS += -lcrypto
else:LIBS += -lgcrypt
}
android{
BOOST_LIBS = $$BOOST_THREAD \
$$BOOST_FS \
$$BOOST_IOSTREAMS \
$$BOOST_REGEX \
$$BOOST_CHRONO \
$$BOOST_SYS
!count(BOOST_LIBS, 6):error("Unable to find boost libraries in PREFIX=$${PREFIX}lib/armv5")
LIBS += -ltinyxml
LIBS += $$BOOST_LIBS
LIBS += -lgsasl -lidn
LIBS += -lssl -lcrypto -lgcrypt -lgpg-error -lprotobuf-lite
!android_api8 {
#android sound lib for api9 and higher
LIBS += -lOpenSLES
}
}
TARGETDEPS += ./lib/libpokerth_lib.a \
./lib/libpokerth_db.a \
./lib/libpokerth_protocol.a
!android{
# #### My release static libs
# LIBS += -lgcrypt_static -lgpg-error_static -lgnutls_static -lSDL_mixer_static -lSDL -lmikmod -lcurl
# ### INSTALL ####
binary.path += $${PREFIX}/bin/
binary.files += pokerth
data.path += $${PREFIX}/share/pokerth/data/
data.files += data/*
pixmap.path += $${PREFIX}/share/pixmaps/
pixmap.files += pokerth.png
desktop.path += $${PREFIX}/share/applications/
desktop.files += pokerth.desktop
INSTALLS += binary \
data \
pixmap \
desktop
}
# END TODO: Cleanup!!! --> This is just a copy from pokerth_game.pro when starting with c++ integration
}
ANDROID_PACKAGE_SOURCE_DIR = $$PWD/android
contains(ANDROID_TARGET_ARCH,armeabi) {
ANDROID_EXTRA_LIBS =
}
+17 -27
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 \
@@ -180,18 +178,19 @@ unix : !mac {
INCLUDEPATH += $${PREFIX}/include INCLUDEPATH += $${PREFIX}/include
# see issue https://github.com/pokerth/pokerth/issues/282 # see issue https://github.com/pokerth/pokerth/issues/282
INCLUDEPATH += $${PREFIX}/include/libircclient INCLUDEPATH += $${PREFIX}/include/libircclient
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_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 +236,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,30 +260,12 @@ 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
} }
} }
} BOOST_LIBS = $$BOOST_THREAD $$BOOST_FS $$BOOST_PROGRAM_OPTIONS $$BOOST_IOSTREAMS $$BOOST_REGEX $$BOOST_CHRONO $$BOOST_RANDOM $$BOOST_SYS
}
c++11 {
BOOST_LIBS = $$BOOST_THREAD $$BOOST_FS $$BOOST_PROGRAM_OPTIONS $$BOOST_IOSTREAMS $$BOOST_REGEX $$BOOST_RANDOM $$BOOST_SYS
!count(BOOST_LIBS, 7){
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){ !count(BOOST_LIBS, 8){
error("Unable to find boost libraries in PREFIX=$${PREFIX}") error("Unable to find boost libraries in PREFIX=$${PREFIX}")
} }
}
UNAME = $$system(uname -s) UNAME = $$system(uname -s)
BSD = $$find(UNAME, "BSD") BSD = $$find(UNAME, "BSD")
@@ -310,7 +299,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 +311,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
+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;
+14 -6
View File
@@ -195,13 +195,17 @@ AvatarManager::AvatarFileToNetPackets(const string &fileName, unsigned requestId
AvatarFileType fileType; AvatarFileType fileType;
boost::shared_ptr<AvatarFileState> tmpState = OpenAvatarFileForChunkRead(fileName, fileSize, fileType); boost::shared_ptr<AvatarFileState> tmpState = OpenAvatarFileForChunkRead(fileName, fileSize, fileType);
if (tmpState.get() && fileSize && fileType != AVATAR_FILE_TYPE_UNKNOWN) { if (tmpState.get() && fileSize && fileType != AVATAR_FILE_TYPE_UNKNOWN) {
{
boost::shared_ptr<NetPacket> avatarHeader(new NetPacket); boost::shared_ptr<NetPacket> avatarHeader(new NetPacket);
avatarHeader->GetMsg()->set_messagetype(PokerTHMessage::Type_AvatarHeaderMessage); avatarHeader->GetMsg()->set_messagetype(PokerTHMessage::Type_LobbyMessage);
AvatarHeaderMessage *netHeader = avatarHeader->GetMsg()->mutable_avatarheadermessage(); LobbyMessage *netLobby = avatarHeader->GetMsg()->mutable_lobbymessage();
netLobby->set_messagetype(LobbyMessage::Type_AvatarHeaderMessage);
AvatarHeaderMessage *netHeader = netLobby->mutable_avatarheadermessage();
netHeader->set_requestid(requestId); netHeader->set_requestid(requestId);
netHeader->set_avatartype(static_cast<NetAvatarType>(fileType)); netHeader->set_avatartype(static_cast<NetAvatarType>(fileType));
netHeader->set_avatarsize(fileSize); netHeader->set_avatarsize(fileSize);
packets.push_back(avatarHeader); packets.push_back(avatarHeader);
}
unsigned numBytes = 0; unsigned numBytes = 0;
unsigned totalBytesRead = 0; unsigned totalBytesRead = 0;
@@ -212,8 +216,10 @@ AvatarManager::AvatarFileToNetPackets(const string &fileName, unsigned requestId
totalBytesRead += numBytes; totalBytesRead += numBytes;
boost::shared_ptr<NetPacket> avatarFile(new NetPacket); boost::shared_ptr<NetPacket> avatarFile(new NetPacket);
avatarFile->GetMsg()->set_messagetype(PokerTHMessage::Type_AvatarDataMessage); avatarFile->GetMsg()->set_messagetype(PokerTHMessage::Type_LobbyMessage);
AvatarDataMessage *netFile = avatarFile->GetMsg()->mutable_avatardatamessage(); LobbyMessage *netLobby = avatarFile->GetMsg()->mutable_lobbymessage();
netLobby->set_messagetype(LobbyMessage::Type_AvatarDataMessage);
AvatarDataMessage *netFile = netLobby->mutable_avatardatamessage();
netFile->set_requestid(requestId); netFile->set_requestid(requestId);
netFile->set_avatarblock((const char *)&tmpData[0], numBytes); netFile->set_avatarblock((const char *)&tmpData[0], numBytes);
packets.push_back(avatarFile); packets.push_back(avatarFile);
@@ -224,8 +230,10 @@ AvatarManager::AvatarFileToNetPackets(const string &fileName, unsigned requestId
retVal = ERR_NET_WRONG_AVATAR_SIZE; retVal = ERR_NET_WRONG_AVATAR_SIZE;
else { else {
boost::shared_ptr<NetPacket> avatarEnd(new NetPacket); boost::shared_ptr<NetPacket> avatarEnd(new NetPacket);
avatarEnd->GetMsg()->set_messagetype(PokerTHMessage::Type_AvatarEndMessage); avatarEnd->GetMsg()->set_messagetype(PokerTHMessage::Type_LobbyMessage);
AvatarEndMessage *netEnd = avatarEnd->GetMsg()->mutable_avatarendmessage(); LobbyMessage *netLobby = avatarEnd->GetMsg()->mutable_lobbymessage();
netLobby->set_messagetype(LobbyMessage::Type_AvatarEndMessage);
AvatarEndMessage *netEnd = netLobby->mutable_avatarendmessage();
netEnd->set_requestid(requestId); netEnd->set_requestid(requestId);
packets.push_back(avatarEnd); packets.push_back(avatarEnd);
retVal = 0; retVal = 0;
+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);
@@ -0,0 +1,71 @@
/*****************************************************************************
* PokerTH - The open source texas holdem engine *
* Copyright (C) 2006-2012 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 "nonqthelper.h"
#include <core/convhelper.h>
#include <boost/filesystem.hpp>
NonQtHelper::NonQtHelper()
{
}
NonQtHelper::~NonQtHelper()
{
}
std::string
NonQtHelper::stringToUtf8(const std::string &myString)
{
return ConvHelper::NativeToUtf8(myString);
}
std::string
NonQtHelper::stringFromUtf8(const std::string &myString)
{
return ConvHelper::Utf8ToNative(myString);
}
std::string
NonQtHelper::getDefaultLanguage()
{
return "en";
}
std::string
NonQtHelper::getDataPathStdString(const char *argv0)
{
boost::filesystem::path startPath(argv0);
startPath = startPath.remove_leaf();
startPath /= "data";
return stringToUtf8(startPath.directory_string());
}
@@ -1,6 +1,6 @@
/***************************************************************************** /*****************************************************************************
* PokerTH - The open source texas holdem engine * * PokerTH - The open source texas holdem engine *
* Copyright (C) 2006-2016 Felix Hammer, Florian Thauer, Lothar May * * Copyright (C) 2006-2012 Felix Hammer, Florian Thauer, Lothar May *
* * * *
* This program is free software: you can redistribute it and/or modify * * This program is free software: you can redistribute it and/or modify *
* it under the terms of the GNU Affero General Public License as * * it under the terms of the GNU Affero General Public License as *
@@ -28,30 +28,30 @@
* 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. *
*****************************************************************************/ *****************************************************************************/
/* Async database update to block a player. */
#ifndef _ASYNCDBPLAYERLASTGAMES_H_ #ifndef NONQTHELPER_H
#define _ASYNCDBPLAYERLASTGAMES_H_ #define NONQTHELPER_H
#include <dbofficial/singleasyncdbquery.h> #ifndef POKERTH_DEDICATED_SERVER
#error This file is only for the server.
#endif
#include <string>
class AsyncDBPlayerLastGames : public SingleAsyncDBQuery class NonQtHelper
{ {
public: public:
AsyncDBPlayerLastGames(unsigned queryId, const std::string &preparedName, const std::list<std::string> &params); NonQtHelper();
virtual ~AsyncDBPlayerLastGames();
virtual void Init(DBIdManager& /*idManager*/) {} ~NonQtHelper();
virtual void HandleResult(mysqlpp::Query &query, DBIdManager& idManager, mysqlpp::StoreQueryResult& result, boost::asio::io_service &service, ServerDBCallback &cb); std::string stringToUtf8(const std::string &);
virtual void HandleNoResult(mysqlpp::Query &query, DBIdManager& idManager, boost::asio::io_service &service, ServerDBCallback &cb); std::string stringFromUtf8(const std::string &);
virtual void HandleError(boost::asio::io_service &service, ServerDBCallback &cb); std::string getDefaultLanguage();
virtual bool RequiresResultSet() const std::string getDataPathStdString(const char *argv0);
{
return false;
}
}; };
#endif #endif
@@ -1,6 +1,6 @@
/***************************************************************************** /*****************************************************************************
* PokerTH - The open source texas holdem engine * * PokerTH - The open source texas holdem engine *
* Copyright (C) 2006-2016 Felix Hammer, Florian Thauer, Lothar May * * Copyright (C) 2006-2012 Felix Hammer, Florian Thauer, Lothar May *
* * * *
* This program is free software: you can redistribute it and/or modify * * This program is free software: you can redistribute it and/or modify *
* it under the terms of the GNU Affero General Public License as * * it under the terms of the GNU Affero General Public License as *
@@ -29,34 +29,46 @@
* as that of the covered work. * * as that of the covered work. *
*****************************************************************************/ *****************************************************************************/
#include <dbofficial/asyncdbplayerlastgames.h> #include "nonqttoolswrapper.h"
#include <nonqthelper/nonqthelper.h>
using namespace std; using namespace std;
AsyncDBPlayerLastGames::AsyncDBPlayerLastGames(unsigned queryId, const string &preparedName, const list<string> &params) QtToolsInterface *CreateQtToolsWrapper()
: SingleAsyncDBQuery(queryId, preparedName, params)
{ {
return new NonQtToolsWrapper;
} }
AsyncDBPlayerLastGames::~AsyncDBPlayerLastGames() NonQtToolsWrapper::NonQtToolsWrapper() : myQtHelper(0)
{ {
myQtHelper = new NonQtHelper();
} }
void
AsyncDBPlayerLastGames::HandleResult(mysqlpp::Query &/*query*/, DBIdManager &/*idManager*/, mysqlpp::StoreQueryResult &/*result*/, boost::asio::io_service &service, ServerDBCallback &cb) NonQtToolsWrapper::~NonQtToolsWrapper()
{ {
// This query does not produce a result. delete myQtHelper;
HandleError(service, cb); myQtHelper = 0;
} }
void std::string NonQtToolsWrapper::stringToUtf8(const std::string &myString)
AsyncDBPlayerLastGames::HandleNoResult(mysqlpp::Query &/*query*/, DBIdManager& /*idManager*/, boost::asio::io_service &/*service*/, ServerDBCallback &/*cb*/)
{ {
return myQtHelper->stringToUtf8(myString);
}
std::string NonQtToolsWrapper::stringFromUtf8(const std::string &myString)
{
return myQtHelper->stringFromUtf8(myString);
}
std::string NonQtToolsWrapper::getDefaultLanguage()
{
return myQtHelper->getDefaultLanguage();
}
std::string NonQtToolsWrapper::getDataPathStdString(const char * argv0)
{
return myQtHelper->getDataPathStdString(argv0);
} }
void
AsyncDBPlayerLastGames::HandleError(boost::asio::io_service &service, ServerDBCallback &cb)
{
}
@@ -0,0 +1,58 @@
/*****************************************************************************
* PokerTH - The open source texas holdem engine *
* Copyright (C) 2006-2012 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 NONQTTOOLSWRAPPER_H
#define NONQTTOOLSWRAPPER_H
#include <qttoolsinterface.h>
#include <string>
class NonQtHelper;
class NonQtToolsWrapper : public QtToolsInterface
{
public:
NonQtToolsWrapper();
~NonQtToolsWrapper();
std::string stringToUtf8(const std::string &myString);
std::string stringFromUtf8(const std::string &myString);
std::string getDefaultLanguage();
std::string getDataPathStdString(const char *argv0);
private:
NonQtHelper *myQtHelper;
};
#endif
@@ -0,0 +1,107 @@
/*****************************************************************************
* PokerTH - The open source texas holdem engine *
* Copyright (C) 2006-2012 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 "qthelper.h"
#include <QtCore>
#include <iostream>
QtHelper::QtHelper()
{
}
QtHelper::~QtHelper()
{
}
std::string QtHelper::stringToUtf8(const std::string &myString)
{
QString tmpString = QString::fromLocal8Bit(myString.c_str());
std::string myUtf8String = tmpString.toUtf8().constData();
return myUtf8String;
}
std::string QtHelper::stringFromUtf8(const std::string &myString)
{
QString tmpString = QString::fromUtf8(myString.c_str());
return tmpString.toLocal8Bit().constData();
}
std::string QtHelper::getDefaultLanguage()
{
return QLocale::system().name().toStdString();
}
std::string QtHelper::getDataPathStdString(const char * /*argv0*/)
{
QString path(QCoreApplication::instance()->applicationDirPath());
#ifdef _WIN32
path += "/data/";
#else
#ifdef __APPLE__
if (QRegExp("Contents/MacOS/?$").indexIn(path) != -1) {
// pointing into an macosx application bundle
path += "/../Resources/data/";
} else {
path += "/data/";
}
#else //Unix
if (QRegExp("pokerth/?$").indexIn(path) != -1) {
// there is an own application directory
path += "/data/";
} else if (QRegExp("usr/games/bin/?$").indexIn(path) != -1) {
// we are in /usr/games/bin (like gentoo linux does)
path += "/../../share/games/pokerth/data/";
} else if (QRegExp("usr/games/?$").indexIn(path) != -1) {
// we are in /usr/games (like Debian linux does)
path += "/../share/games/pokerth/";
} else if (QRegExp("bin/?$").indexIn(path) != -1) {
// we are in a bin directory. e.g. /usr/bin
path += "/../share/pokerth/data/";
} else {
path += "/data/";
}
#endif
#endif
return (QDir::cleanPath(path) + "/").toStdString();
}
// [01:09] <Zhenech> doitux|mob, mach den pfad als define, und nur wenns nich gesetzt is wildes raten
// [01:10] <Zhenech> dann compilieren die distries mit -DDATAPTH="/usr/share/games/pokerth" o.ä.
// [01:10] <Zhenech> und du suchst eine liste ab:
// [01:10] <Zhenech> ist es in [/usr/share/pokerth, /usr/share/games/pokerth/, /usr/local/..., $PWD/data]
@@ -0,0 +1,57 @@
/*****************************************************************************
* PokerTH - The open source texas holdem engine *
* Copyright (C) 2006-2012 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 QTHELPER_H
#define QTHELPER_H
#ifdef POKERTH_DEDICATED_SERVER
#error This file is not for the server.
#endif
#include <string>
/**
@author FThauer FHammer <webmaster@pokerth.net>
*/
class QtHelper
{
public:
QtHelper();
~QtHelper();
std::string stringToUtf8(const std::string &);
std::string stringFromUtf8(const std::string &);
std::string getDefaultLanguage();
std::string getDataPathStdString(const char *argv0);
};
#endif
@@ -0,0 +1,71 @@
/*****************************************************************************
* PokerTH - The open source texas holdem engine *
* Copyright (C) 2006-2012 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 "qttoolswrapper.h"
#include <qthelper/qthelper.h>
using namespace std;
QtToolsInterface *CreateQtToolsWrapper()
{
return new QtToolsWrapper;
}
QtToolsWrapper::QtToolsWrapper() : myQtHelper(0)
{
myQtHelper = new QtHelper();
}
QtToolsWrapper::~QtToolsWrapper()
{
delete myQtHelper;
myQtHelper = 0;
}
std::string QtToolsWrapper::stringToUtf8(const std::string &myString)
{
return myQtHelper->stringToUtf8(myString);
}
std::string QtToolsWrapper::stringFromUtf8(const std::string &myString)
{
return myQtHelper->stringFromUtf8(myString);
}
std::string QtToolsWrapper::getDefaultLanguage()
{
return myQtHelper->getDefaultLanguage();
}
std::string QtToolsWrapper::getDataPathStdString(const char * argv0)
{
return myQtHelper->getDataPathStdString(argv0);
}
+58
View File
@@ -0,0 +1,58 @@
/*****************************************************************************
* PokerTH - The open source texas holdem engine *
* Copyright (C) 2006-2012 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 QTTOOLSWRAPPER_H
#define QTTOOLSWRAPPER_H
#include <qttoolsinterface.h>
#include <string>
class QtHelper;
class QtToolsWrapper : public QtToolsInterface
{
public:
QtToolsWrapper();
~QtToolsWrapper();
std::string stringToUtf8(const std::string &myString);
std::string stringFromUtf8(const std::string &myString);
std::string getDefaultLanguage();
std::string getDataPathStdString(const char *argv0);
private:
QtHelper *myQtHelper;
};
#endif
+37
View File
@@ -0,0 +1,37 @@
/*****************************************************************************
* PokerTH - The open source texas holdem engine *
* Copyright (C) 2006-2012 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 "qttoolsinterface.h"
QtToolsInterface::~QtToolsInterface()
{
}
+52
View File
@@ -0,0 +1,52 @@
/*****************************************************************************
* PokerTH - The open source texas holdem engine *
* Copyright (C) 2006-2012 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 QTTOOLSINTERFACE_H
#define QTTOOLSINTERFACE_H
#include <string>
class QtToolsInterface
{
public:
virtual ~QtToolsInterface();
//qthelper.cpp
virtual std::string stringToUtf8(const std::string &) =0;
virtual std::string stringFromUtf8(const std::string &) =0;
virtual std::string getDefaultLanguage() =0;
virtual std::string getDataPathStdString(const char *argv0) =0;
};
QtToolsInterface *CreateQtToolsWrapper();
#endif
+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*/) {}
+3 -9
View File
@@ -51,26 +51,20 @@ AsyncDBAuth::HandleResult(mysqlpp::Query &/*query*/, DBIdManager& /*idManager*/,
if (result.num_rows() != 1) { if (result.num_rows() != 1) {
service.post(boost::bind(&ServerDBCallback::PlayerLoginFailed, &cb, GetId())); service.post(boost::bind(&ServerDBCallback::PlayerLoginFailed, &cb, GetId()));
} else { } else {
int blocked = result[0][2]; int valid = result[0][2];
int active = result[0][7]; int active = result[0][5];
if ((active != 1) || (blocked != 0)) { if ((valid != 1) || (active != 1)) {
service.post(boost::bind(&ServerDBCallback::PlayerLoginBlocked, &cb, GetId())); service.post(boost::bind(&ServerDBCallback::PlayerLoginBlocked, &cb, GetId()));
} else { } else {
mysqlpp::String secret(result[0][1]); mysqlpp::String secret(result[0][1]);
mysqlpp::String country(result[0][3]); mysqlpp::String country(result[0][3]);
mysqlpp::String last_login(result[0][4]); 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); boost::shared_ptr<DBPlayerData> tmpData(new DBPlayerData);
tmpData->id = result[0][0]; tmpData->id = result[0][0];
secret.to_string(tmpData->secret); secret.to_string(tmpData->secret);
if (!country.is_null()) if (!country.is_null())
country.to_string(tmpData->country); country.to_string(tmpData->country);
last_login.to_string(tmpData->last_login); 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)); service.post(boost::bind(&ServerDBCallback::PlayerLoginSuccess, &cb, GetId(), tmpData));
} }
+6 -8
View File
@@ -32,18 +32,16 @@
#ifndef _DB_TABLE_DEFS_H_ #ifndef _DB_TABLE_DEFS_H_
#define _DB_TABLE_DEFS_H_ #define _DB_TABLE_DEFS_H_
#define DB_TABLE_PLAYER "player" #define DB_TABLE_PLAYER "player_login"
#define DB_TABLE_PLAYER_COL_ID "player_id" #define DB_TABLE_PLAYER_COL_ID "id"
#define DB_TABLE_PLAYER_COL_USERNAME "username" #define DB_TABLE_PLAYER_COL_USERNAME "username"
#define DB_TABLE_PLAYER_COL_PASSWORD "password" #define DB_TABLE_PLAYER_COL_PASSWORD "password"
#define DB_TABLE_PLAYER_COL_VALID "blocked" #define DB_TABLE_PLAYER_COL_VALID "valid"
#define DB_TABLE_PLAYER_COL_COUNTRY "country_iso" #define DB_TABLE_PLAYER_COL_COUNTRY "country"
#define DB_TABLE_PLAYER_COL_LASTLOGIN "last_login" #define DB_TABLE_PLAYER_COL_LASTLOGIN "last_login"
#define DB_TABLE_PLAYER_COL_ACTIVE "active" #define DB_TABLE_PLAYER_COL_ACTIVE "aktivator"
#define DB_TABLE_PLAYER_COL_AVATARHASH "avatar_hash" #define DB_TABLE_PLAYER_COL_AVATARHASH "avatar_hash"
#define DB_TABLE_PLAYER_COL_AVATARTYPE "avatar_mime" #define DB_TABLE_PLAYER_COL_AVATARTYPE "avatar_type"
#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 "game"
#define DB_TABLE_GAME_COL_ID "idgame" #define DB_TABLE_GAME_COL_ID "idgame"
+7 -53
View File
@@ -41,15 +41,12 @@
#include <dbofficial/asyncdbreportgame.h> #include <dbofficial/asyncdbreportgame.h>
#include <dbofficial/asyncdbadminplayers.h> #include <dbofficial/asyncdbadminplayers.h>
#include <dbofficial/asyncdbblockplayer.h> #include <dbofficial/asyncdbblockplayer.h>
#include <dbofficial/asyncdbplayerlastgames.h>
#include <dbofficial/compositeasyncdbquery.h> #include <dbofficial/compositeasyncdbquery.h>
#include <dbofficial/db_table_defs.h> #include <dbofficial/db_table_defs.h>
#include <ctime> #include <ctime>
#include <sstream> #include <sstream>
#include <mysql++.h> #include <mysql++.h>
#include <core/loghelper.h> // @TODO: remove in productive
#define QUERY_NICK_PREPARE "nick_template" #define QUERY_NICK_PREPARE "nick_template"
#define QUERY_LOGIN_PREPARE "login_template" #define QUERY_LOGIN_PREPARE "login_template"
#define QUERY_AVATAR_BLACKLIST_PREPARE "avatar_blacklist_template" #define QUERY_AVATAR_BLACKLIST_PREPARE "avatar_blacklist_template"
@@ -61,7 +58,6 @@
#define QUERY_REPORT_GAME_PREPARE "report_game_template" #define QUERY_REPORT_GAME_PREPARE "report_game_template"
#define QUERY_ADMIN_PLAYER_PREPARE "admin_player_template" #define QUERY_ADMIN_PLAYER_PREPARE "admin_player_template"
#define QUERY_BLOCK_PLAYER_PREPARE "block_player_template" #define QUERY_BLOCK_PLAYER_PREPARE "block_player_template"
#define QUERY_PLAYER_LASTGAMES_PREPARE "player_lastgames_template"
using namespace std; using namespace std;
@@ -234,33 +230,6 @@ ServerDBThread::SetGamePlayerPlace(unsigned requestId, DB_id playerId, unsigned
m_semaphore.post(); 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 void
ServerDBThread::EndGame(unsigned requestId) ServerDBThread::EndGame(unsigned requestId)
{ {
@@ -456,20 +425,13 @@ ServerDBThread::EstablishDBConnection()
Msleep(250); Msleep(250);
} else { } else {
mysqlpp::Query prepareNick = m_connData->conn.query(); mysqlpp::Query prepareNick = m_connData->conn.query();
/*
prepareNick prepareNick
<< "PREPARE " QUERY_NICK_PREPARE " FROM " << mysqlpp::quote << "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 " = ?"; << "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(); mysqlpp::Query prepareAvatarBlacklist = m_connData->conn.query();
prepareAvatarBlacklist prepareAvatarBlacklist
<< "PREPARE " QUERY_AVATAR_BLACKLIST_PREPARE " FROM " << mysqlpp::quote << "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 " = ?"; << "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(); mysqlpp::Query prepareLogin = m_connData->conn.query();
prepareLogin prepareLogin
<< "PREPARE " QUERY_LOGIN_PREPARE " FROM " << mysqlpp::quote << "PREPARE " QUERY_LOGIN_PREPARE " FROM " << mysqlpp::quote
@@ -490,38 +452,31 @@ ServerDBThread::EstablishDBConnection()
prepareScore prepareScore
<< "PREPARE " QUERY_UPDATE_SCORE_PREPARE " FROM " << mysqlpp::quote << "PREPARE " QUERY_UPDATE_SCORE_PREPARE " FROM " << mysqlpp::quote
<< "CALL updatePointsForGame(?)"; << "CALL updatePointsForGame(?)";
mysqlpp::Query prepareReportAvatar = m_connData->conn.query(); mysqlpp::Query prepareReportAvatar = m_connData->conn.query();
prepareReportAvatar prepareReportAvatar
<< "PREPARE " QUERY_REPORT_AVATAR_PREPARE " FROM " << mysqlpp::quote << "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 (?, ?, ?, ?, ?)"; << "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(); mysqlpp::Query prepareReportGame = m_connData->conn.query();
prepareReportGame prepareReportGame
<< "PREPARE " QUERY_REPORT_GAME_PREPARE " FROM " << mysqlpp::quote << "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 (?, ?, ?, ?, ?)"; << "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(); mysqlpp::Query prepareAdminPlayer = m_connData->conn.query();
prepareAdminPlayer prepareAdminPlayer
<< "PREPARE " QUERY_ADMIN_PLAYER_PREPARE " FROM " << mysqlpp::quote << "PREPARE " QUERY_ADMIN_PLAYER_PREPARE " FROM " << mysqlpp::quote
<< "SELECT " DB_TABLE_ADMIN_PLAYER_COL_PLAYERID " FROM " DB_TABLE_ADMIN_PLAYER; << "SELECT " DB_TABLE_ADMIN_PLAYER_COL_PLAYERID " FROM " DB_TABLE_ADMIN_PLAYER;
mysqlpp::Query prepareBlockPlayer = m_connData->conn.query(); mysqlpp::Query prepareBlockPlayer = m_connData->conn.query();
prepareBlockPlayer prepareBlockPlayer
<< "PREPARE " QUERY_BLOCK_PLAYER_PREPARE " FROM " << mysqlpp::quote << "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 " = ?"; << "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() if (!prepareNick.exec() || !prepareAvatarBlacklist.exec() || !prepareLogin.exec() || !prepareCreateGame.exec()
|| !prepareEndGame.exec() || !prepareRelation.exec() || !prepareScore.exec() || !prepareReportAvatar.exec() || !prepareEndGame.exec() || !prepareRelation.exec() || !prepareScore.exec() || !prepareReportAvatar.exec()
|| !prepareReportGame.exec() || !prepareAdminPlayer.exec() || !prepareBlockPlayer.exec() || !preparePlayerLastGames.exec()) { || !prepareReportGame.exec() || !prepareAdminPlayer.exec() || !prepareBlockPlayer.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_connData->conn.disconnect();
m_ioService->post(boost::bind(&ServerDBCallback::ConnectFailed, &m_callback, tmpError)); m_ioService->post(boost::bind(&ServerDBCallback::ConnectFailed, &m_callback,
string(prepareNick.error()) + prepareAvatarBlacklist.error() + prepareLogin.error() + prepareCreateGame.error()
+ prepareEndGame.error() + prepareRelation.error() + prepareScore.error() + prepareReportAvatar.error()
+ prepareReportGame.error() + prepareAdminPlayer.error() + prepareBlockPlayer.error()));
m_permanentError = true; m_permanentError = true;
} else { } else {
m_ioService->post(boost::bind(&ServerDBCallback::ConnectSuccess, &m_callback)); m_ioService->post(boost::bind(&ServerDBCallback::ConnectSuccess, &m_callback));
@@ -572,9 +527,8 @@ ServerDBThread::HandleNextQuery()
++i; ++i;
} }
if (!paramQuery.exec()) { if (!paramQuery.exec()) {
string tmpError = paramQuery.error();
m_connData->conn.disconnect(); m_connData->conn.disconnect();
m_ioService->post(boost::bind(&ServerDBCallback::QueryError, &m_callback, tmpError)); m_ioService->post(boost::bind(&ServerDBCallback::QueryError, &m_callback, paramQuery.error()));
break; break;
} }
} }
-2
View File
@@ -42,7 +42,6 @@
#include <dbofficial/dbidmanager.h> #include <dbofficial/dbidmanager.h>
#include <core/thread.h> #include <core/thread.h>
struct DBConnectionData; struct DBConnectionData;
class AsyncDBQuery; class AsyncDBQuery;
@@ -67,7 +66,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);
+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) {
+325 -414
View File
@@ -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];
} }
return 5; // Flush
} }
} }
// Karten innerhalb der Farben nach der Gre sortieren: Ass - Kig - Dame - ... - 4 - 3 - 2 int AND = cards[0] & cards[1] & cards[2] & cards[3];
for(k1=0; k1<7; k1++) {
for(k2=k1+1; k2<7; k2++) { // Four of a Kind
if(array[k1][0]==array[k2][0] && array[k1][1]<array[k2][1]) { if(AND) {
ktemp[0] = array[k1][0]; return 7;
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 int OR = cards[0] | cards[1] | cards[2] | cards[3];
// 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 // 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]) { for(card_idx=0; card_idx<10; card_idx++) {
if(position) { if((OR & straight[card_idx]) == straight[card_idx]) {
// Position-Array fuellen return 4;
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])) { int color_1_idx, color_2_idx, color_3_idx, color_4_idx, color_5_idx;
if(position) { int temp;
// Position-Array fuellen
position[0] = array[j1][2]; // Full House, Three of a Kind
position[1] = array[j2][2]; for(color_1_idx=0; color_1_idx<2; color_1_idx++) {
position[2] = array[j3][2]; for(color_2_idx=color_1_idx+1; color_2_idx<3; color_2_idx++) {
position[3] = array[j4][2]; for(color_3_idx=color_2_idx+1; color_3_idx<4; color_3_idx++) {
position[4] = array[j5][2]; temp = cards[color_1_idx] & cards[color_2_idx] & cards[color_3_idx];
} if(bitcount(temp) == 2) { // two times Three of a Kind
// Paar und Drilling des Full House ermitteln ermitteln return 6; // Full House
if(array[j3][1]==array[j1][1]) {
drei = array[j1][1];
zwei = array[j4][1];
} else { } else {
drei = array[j4][1]; if(temp) {
zwei = array[j1][1]; for(color_4_idx=0; color_4_idx<3; color_4_idx++) {
for(color_5_idx=color_4_idx+1; color_5_idx<4; color_5_idx++) {
if(~temp & cards[color_4_idx] & cards[color_5_idx]) { // search for additional pair
return 6; // Full House
} }
return 600000000+drei*1000000+zwei*10000;
} }
} }
return 3; // Three of a Kind
}
} }
} }
} }
} }
// auf Straight-Spezialfall ( 5 4 3 2 A ) testen // Two Pairs, Two of a Kind
for(j1=0; j1<7; j1++) { for(color_1_idx=0; color_1_idx<3; color_1_idx++) {
for(j2=j1+1; j2<7; j2++) { for(color_2_idx=color_1_idx+1; color_2_idx<4; color_2_idx++) {
for(j3=j2+1; j3<7; j3++) { temp = cards[color_1_idx] & cards[color_2_idx];
for(j4=j3+1; j4<7; j4++) { if(bitcount(temp) >= 2) { // at least two times Two of a Kind
for(j5=j4+1; j5<7; j5++) { return 2; // Two Pairs
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]) { } else {
if(position) { if(temp) { // search for second pair
// Position-Array fuellen for(color_3_idx=0; color_3_idx<3; color_3_idx++) {
position[0] = array[j1][2]; for(color_4_idx=color_3_idx+1; color_4_idx<4; color_4_idx++) {
position[1] = array[j2][2]; if(~temp & cards[color_3_idx] & cards[color_4_idx]) {
position[2] = array[j3][2]; return 2; // Two Pairs
position[3] = array[j4][2];
position[4] = array[j5][2];
}
return 400000000+array[j2][1]*1000000;
} }
} }
} }
return 1; // Two of a Kind
}
} }
} }
} }
// auf Drilling (Klasse 3) testen return 0; // High Card
for(j1=0; j1<5; j1++) {
if(array[j1][1] == array[j1+1][1] && array[j1][1] == array[j1+2][1]) {
// Kicker ermitteln
if(j1==0) {
if(position) {
// Position-Array fuellen
for(j2=0; j2<5; j2++) {
position[j2] = array[j2][2];
}
}
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 {
if(position) {
// Position-Array fuellen
for(j2=0; j2<3; j2++) {
position[j2] = array[j1+j2][2];
}
position[3] = array[0][2];
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
for(j1=0; j1<4; j1++) {
for(j2=j1+2; j2<6; j2++) {
if(array[j1][1] == array[j1+1][1] && array[j2][1] == array[j2+1][1]) {
// Kicker ermitteln
if(j1==0) {
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 {
if(position) {
// Position-Array fuellen
for(j2=0; j2<2; j2++) {
position[j2] = array[j1+j2][2];
}
position[2] = array[0][2];
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
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;
std::vector< std::vector<int> > chance(2); // Royal Flush, Straight Flush, Flush
for(color_1_idx=0; color_1_idx<4; color_1_idx++) { // check all colors
chance[0].resize(10); if(bitcount(cards[color_1_idx])>=5) { // check if at least 5 cards of one color
chance[1].resize(10); if((cards[color_1_idx] & straight[0]) == straight[0]) { // check for Royal Flush
if(bestHand) bestHand[color_1_idx] = straight[0];
for(i=0; i<10; i++) { return 900000000; // Royal Flush
chance[0][i] = 0; } else {
chance[1][i] = 0; 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 cards[7]; 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);
chance[0].assign(10,0);
chance[1].assign(10,0);
int cards[4] = { 0,0,0,0 };
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;
} }
@@ -1161,8 +1034,8 @@ std::string CardsValue::determineHandName(int myCardsValueInt, PlayerList active
} }
} }
break; break;
default: { default:
} {}
} }
return handName; return handName;
@@ -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;
} }
+9 -6
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,14 +175,14 @@ 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)); (*it)->setMyCash( (*it)->getMyCash() + ((potLevel[1])/winnerCount));
// filling winners vector // filling winners vector
winners.push_back((*it)->getMyUniqueID()); winners.push_back((*it)->getMyUniqueID());
(*it)->setLastMoneyWon( (*it)->getLastMoneyWon() + (potLevel[1])/winnerCount ); (*it)->setLastMoneyWon( (*it)->getLastMoneyWon() + (potLevel[1])/winnerCount );
} }
}
} }
// pot level sum not divisible by winnerCount // pot level sum not divisible by 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,6 +217,7 @@ void LocalBoard::distributePot(unsigned dealerPosition)
} }
if(winnerHit) {
if(j<mod) { if(j<mod) {
(*it)->setMyCash( (*it)->getMyCash() + (int)((potLevel[1])/winnerCount) + 1); (*it)->setMyCash( (*it)->getMyCash() + (int)((potLevel[1])/winnerCount) + 1);
// filling winners vector // filling winners vector
@@ -229,6 +231,7 @@ void LocalBoard::distributePot(unsigned dealerPosition)
} }
} }
} }
}
potCarryOver = 0; potCarryOver = 0;
// pot refresh // pot refresh
+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;
} }
+62 -320
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,39 +66,49 @@ 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];
}
(*it)->setMyCards(tempPlayerArray); // determine cards value
(*it)->setMyCardsValueInt(CardsValue::cardsValue(tempPlayerAndBoardArray, bestHandPos)); 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); (*it)->setMyBestHandPosition(bestHandPos);
(*it)->setMyRoundStartCash((*it)->getMyCash()); } else {
// error-check
for(j=0; j<5; j++) {
if (bestHandPos[j] == -1) {
LOG_ERROR(__FILE__ << " (" << __LINE__ << "): ERROR getMyBestHandPosition"); LOG_ERROR(__FILE__ << " (" << __LINE__ << "): ERROR getMyBestHandPosition");
} }
}
// set round start cash
(*it)->setMyRoundStartCash((*it)->getMyCash());
// 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) {
@@ -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);
} }
+144 -26
View File
@@ -39,25 +39,93 @@
#include <dirent.h> #include <dirent.h>
#include <boost/lexical_cast.hpp> #include <boost/lexical_cast.hpp>
#include <fstream>
using namespace std; using namespace std;
Log::Log(ConfigFile *c) : mySqliteLogDb(0), mySqliteLogFileName(""), myConfig(c), uniqueGameID(0), currentHandID(0), currentRound(GAME_STATE_PREFLOP), sql("") unsigned debug_mode_startSmallBlind = 10;
unsigned debug_mode_dealerPosition = 4;
unsigned debug_mode_startCash[MAX_NUMBER_OF_PLAYERS] = { 5000, 5000, 5000, 5000, 5000, 5000, 5000, 5000, 5000, 5000};
unsigned debug_mode_boardCards[][5] = {
{ 4, 19, 20, 43, 49 },
{ 4, 19, 20, 43, 49 }
};
int debug_mode_playerCards[][MAX_NUMBER_OF_PLAYERS][2] = {
{ {18,17}, {-1,-1}, {26,27}, {31,30}, {50,51}, {25,24}, {38,37}, {32,33}, {19,20}, {18,17} },
{ {18,17}, {31, 8}, {26,27}, {31,30}, {50,51}, {25,24}, {38,37}, {32,33}, {19,20}, {18,17} }
};
const unsigned debug_mode_cntBeRo = 4;
const unsigned debug_mode_cntActions = 4;
const unsigned debug_mode_cntValues = 3;
int playerActionMatrix[][debug_mode_cntBeRo][MAX_NUMBER_OF_PLAYERS][debug_mode_cntActions][debug_mode_cntValues] = {
{ /* handID==0 */
{ /* preflop */
{ {-1,PLAYER_ACTION_NONE ,-1},{-1,PLAYER_ACTION_NONE ,-1},{-1,PLAYER_ACTION_NONE ,-1},{-1,PLAYER_ACTION_NONE ,-1} }, /* player0 */
{ {-1,PLAYER_ACTION_CALL ,-1},{-1,PLAYER_ACTION_NONE ,-1},{-1,PLAYER_ACTION_NONE ,-1},{-1,PLAYER_ACTION_NONE ,-1} }, /* player1 */
{ {-1,PLAYER_ACTION_CALL ,-1},{-1,PLAYER_ACTION_NONE ,-1},{-1,PLAYER_ACTION_NONE ,-1},{-1,PLAYER_ACTION_NONE ,-1} }, /* player2 */
{ {-1,PLAYER_ACTION_CALL ,-1},{-1,PLAYER_ACTION_NONE ,-1},{-1,PLAYER_ACTION_NONE ,-1},{-1,PLAYER_ACTION_NONE ,-1} }, /* player3 */
{ {-1,PLAYER_ACTION_CALL ,-1},{-1,PLAYER_ACTION_NONE ,-1},{-1,PLAYER_ACTION_NONE ,-1},{-1,PLAYER_ACTION_NONE ,-1} }, /* player4 */
{ {-1,PLAYER_ACTION_CALL ,-1},{-1,PLAYER_ACTION_NONE ,-1},{-1,PLAYER_ACTION_NONE ,-1},{-1,PLAYER_ACTION_NONE ,-1} }, /* player5 */
{ {-1,PLAYER_ACTION_RAISE,100},{50,PLAYER_ACTION_CALL ,-1},{-1,PLAYER_ACTION_NONE ,-1},{-1,PLAYER_ACTION_NONE ,-1} }, /* player6 */
{ {-1,PLAYER_ACTION_CALL ,-1},{-1,PLAYER_ACTION_NONE ,-1},{-1,PLAYER_ACTION_NONE ,-1},{-1,PLAYER_ACTION_NONE ,-1} }, /* player7 */
{ {-1,PLAYER_ACTION_CALL ,-1},{-1,PLAYER_ACTION_NONE ,-1},{-1,PLAYER_ACTION_NONE ,-1},{-1,PLAYER_ACTION_NONE ,-1} }, /* player8 */
{ {-1,PLAYER_ACTION_CALL ,-1},{10,PLAYER_ACTION_RAISE ,100},{-1,PLAYER_ACTION_NONE ,-1},{-1,PLAYER_ACTION_NONE ,-1} } /* player9 */
},
{ /* flop */
{ {-1,PLAYER_ACTION_NONE ,-1},{-1,PLAYER_ACTION_NONE ,-1},{-1,PLAYER_ACTION_NONE ,-1},{-1,PLAYER_ACTION_NONE ,-1} },
{ {-1,PLAYER_ACTION_CHECK,-1},{-1,PLAYER_ACTION_NONE ,-1},{-1,PLAYER_ACTION_NONE ,-1},{-1,PLAYER_ACTION_NONE ,-1} },
{ {-1,PLAYER_ACTION_CHECK,-1},{-1,PLAYER_ACTION_NONE ,-1},{-1,PLAYER_ACTION_NONE ,-1},{-1,PLAYER_ACTION_NONE ,-1} },
{ {-1,PLAYER_ACTION_CHECK,-1},{-1,PLAYER_ACTION_NONE ,-1},{-1,PLAYER_ACTION_NONE ,-1},{-1,PLAYER_ACTION_NONE ,-1} },
{ {-1,PLAYER_ACTION_CHECK,-1},{-1,PLAYER_ACTION_NONE ,-1},{-1,PLAYER_ACTION_NONE ,-1},{-1,PLAYER_ACTION_NONE ,-1} },
{ {-1,PLAYER_ACTION_CHECK,-1},{-1,PLAYER_ACTION_NONE ,-1},{-1,PLAYER_ACTION_NONE ,-1},{-1,PLAYER_ACTION_NONE ,-1} },
{ {-1,PLAYER_ACTION_CHECK,-1},{-1,PLAYER_ACTION_NONE ,-1},{-1,PLAYER_ACTION_NONE ,-1},{-1,PLAYER_ACTION_NONE ,-1} },
{ {-1,PLAYER_ACTION_CHECK,-1},{-1,PLAYER_ACTION_NONE ,-1},{-1,PLAYER_ACTION_NONE ,-1},{-1,PLAYER_ACTION_NONE ,-1} },
{ {-1,PLAYER_ACTION_CHECK,-1},{-1,PLAYER_ACTION_NONE ,-1},{-1,PLAYER_ACTION_NONE ,-1},{-1,PLAYER_ACTION_NONE ,-1} },
{ {-1,PLAYER_ACTION_CHECK,-1},{-1,PLAYER_ACTION_NONE ,-1},{-1,PLAYER_ACTION_NONE ,-1},{-1,PLAYER_ACTION_NONE ,-1} }
},
{ /* turn */
{ {-1,PLAYER_ACTION_NONE ,-1},{-1,PLAYER_ACTION_NONE ,-1},{-1,PLAYER_ACTION_NONE ,-1},{-1,PLAYER_ACTION_NONE ,-1} },
{ {-1,PLAYER_ACTION_CHECK,-1},{-1,PLAYER_ACTION_NONE ,-1},{-1,PLAYER_ACTION_NONE ,-1},{-1,PLAYER_ACTION_NONE ,-1} },
{ {-1,PLAYER_ACTION_CHECK,-1},{-1,PLAYER_ACTION_NONE ,-1},{-1,PLAYER_ACTION_NONE ,-1},{-1,PLAYER_ACTION_NONE ,-1} },
{ {-1,PLAYER_ACTION_CHECK,-1},{-1,PLAYER_ACTION_NONE ,-1},{-1,PLAYER_ACTION_NONE ,-1},{-1,PLAYER_ACTION_NONE ,-1} },
{ {-1,PLAYER_ACTION_CHECK,-1},{-1,PLAYER_ACTION_NONE ,-1},{-1,PLAYER_ACTION_NONE ,-1},{-1,PLAYER_ACTION_NONE ,-1} },
{ {-1,PLAYER_ACTION_CHECK,-1},{-1,PLAYER_ACTION_NONE ,-1},{-1,PLAYER_ACTION_NONE ,-1},{-1,PLAYER_ACTION_NONE ,-1} },
{ {-1,PLAYER_ACTION_CHECK,-1},{-1,PLAYER_ACTION_NONE ,-1},{-1,PLAYER_ACTION_NONE ,-1},{-1,PLAYER_ACTION_NONE ,-1} },
{ {-1,PLAYER_ACTION_CHECK,-1},{-1,PLAYER_ACTION_NONE ,-1},{-1,PLAYER_ACTION_NONE ,-1},{-1,PLAYER_ACTION_NONE ,-1} },
{ {-1,PLAYER_ACTION_CHECK,-1},{-1,PLAYER_ACTION_NONE ,-1},{-1,PLAYER_ACTION_NONE ,-1},{-1,PLAYER_ACTION_NONE ,-1} },
{ {-1,PLAYER_ACTION_CHECK,-1},{-1,PLAYER_ACTION_NONE ,-1},{-1,PLAYER_ACTION_NONE ,-1},{-1,PLAYER_ACTION_NONE ,-1} }
},
{ /* river */
{ {-1,PLAYER_ACTION_NONE ,-1},{-1,PLAYER_ACTION_NONE ,-1},{-1,PLAYER_ACTION_NONE ,-1},{-1,PLAYER_ACTION_NONE ,-1} },
{ {-1,PLAYER_ACTION_CHECK,-1},{-1,PLAYER_ACTION_NONE ,-1},{-1,PLAYER_ACTION_NONE ,-1},{-1,PLAYER_ACTION_NONE ,-1} },
{ {-1,PLAYER_ACTION_CHECK,-1},{-1,PLAYER_ACTION_NONE ,-1},{-1,PLAYER_ACTION_NONE ,-1},{-1,PLAYER_ACTION_NONE ,-1} },
{ {-1,PLAYER_ACTION_CHECK,-1},{-1,PLAYER_ACTION_NONE ,-1},{-1,PLAYER_ACTION_NONE ,-1},{-1,PLAYER_ACTION_NONE ,-1} },
{ {-1,PLAYER_ACTION_CHECK,-1},{-1,PLAYER_ACTION_NONE ,-1},{-1,PLAYER_ACTION_NONE ,-1},{-1,PLAYER_ACTION_NONE ,-1} },
{ {-1,PLAYER_ACTION_CHECK,-1},{-1,PLAYER_ACTION_NONE ,-1},{-1,PLAYER_ACTION_NONE ,-1},{-1,PLAYER_ACTION_NONE ,-1} },
{ {-1,PLAYER_ACTION_CHECK,-1},{-1,PLAYER_ACTION_NONE ,-1},{-1,PLAYER_ACTION_NONE ,-1},{-1,PLAYER_ACTION_NONE ,-1} },
{ {-1,PLAYER_ACTION_CHECK,-1},{-1,PLAYER_ACTION_NONE ,-1},{-1,PLAYER_ACTION_NONE ,-1},{-1,PLAYER_ACTION_NONE ,-1} },
{ {-1,PLAYER_ACTION_CHECK,-1},{-1,PLAYER_ACTION_NONE ,-1},{-1,PLAYER_ACTION_NONE ,-1},{-1,PLAYER_ACTION_NONE ,-1} },
{ {-1,PLAYER_ACTION_CHECK,-1},{-1,PLAYER_ACTION_NONE ,-1},{-1,PLAYER_ACTION_NONE ,-1},{-1,PLAYER_ACTION_NONE ,-1} }
}
}
};
Log::Log(ConfigFile *c) : mySqliteLogDb(0), mySqliteLogFileName(""), myConfig(c), uniqueGameID(0), currentHandID(0), currentRound(GAME_STATE_PREFLOP), sql(""), debug_mode(false)
{ {
// check for debug_mode
ifstream debug_mode_test_file("enable_debug_mode");
if(debug_mode_test_file) debug_mode = true;
} }
Log::~Log() Log::~Log()
{ {
if(SQLITE_LOG) {
sqlite3_close(mySqliteLogDb); sqlite3_close(mySqliteLogDb);
}
} }
void void
Log::init() Log::init()
{ {
if(SQLITE_LOG) {
// logging activated // logging activated
if(myConfig->readConfigInt("LogOnOff")) { if(myConfig->readConfigInt("LogOnOff")) {
@@ -160,7 +228,6 @@ Log::init()
} }
} }
} }
}
} }
void void
@@ -168,8 +235,6 @@ Log::logNewGameMsg(int gameID, int startCash, int startSmallBlind, unsigned deal
{ {
uniqueGameID++; uniqueGameID++;
if(SQLITE_LOG) {
if(myConfig->readConfigInt("LogOnOff")) { if(myConfig->readConfigInt("LogOnOff")) {
//if write logfiles is enabled //if write logfiles is enabled
@@ -212,7 +277,6 @@ Log::logNewGameMsg(int gameID, int startCash, int startSmallBlind, unsigned deal
exec_transaction(); exec_transaction();
} }
} }
}
} }
void void
@@ -226,8 +290,6 @@ Log::logNewHandMsg(int handID, unsigned dealerPosition, int smallBlind, unsigned
(*it_c)->setLogHoleCardsDone(false); (*it_c)->setLogHoleCardsDone(false);
} }
if(SQLITE_LOG) {
if(myConfig->readConfigInt("LogOnOff")) { if(myConfig->readConfigInt("LogOnOff")) {
//if write logfiles is enabled //if write logfiles is enabled
@@ -303,15 +365,12 @@ Log::logNewHandMsg(int handID, unsigned dealerPosition, int smallBlind, unsigned
} }
} }
}
} }
void void
Log::logPlayerAction(string playerName, PlayerActionLog action, int amount) Log::logPlayerAction(string playerName, PlayerActionLog action, int amount)
{ {
if(SQLITE_LOG) {
if(myConfig->readConfigInt("LogOnOff")) { if(myConfig->readConfigInt("LogOnOff")) {
//if write logfiles is enabled //if write logfiles is enabled
@@ -340,15 +399,12 @@ Log::logPlayerAction(string playerName, PlayerActionLog action, int amount)
sqlite3_free_table(result_Player); sqlite3_free_table(result_Player);
} }
} }
}
} }
void void
Log::logPlayerAction(int seat, PlayerActionLog action, int amount) Log::logPlayerAction(int seat, PlayerActionLog action, int amount)
{ {
if(SQLITE_LOG) {
if(myConfig->readConfigInt("LogOnOff")) { if(myConfig->readConfigInt("LogOnOff")) {
//if write logfiles is enabled //if write logfiles is enabled
@@ -451,7 +507,6 @@ Log::logPlayerAction(int seat, PlayerActionLog action, int amount)
} }
} }
} }
}
} }
PlayerActionLog PlayerActionLog
@@ -482,7 +537,6 @@ Log::transformPlayerActionLog(PlayerAction action)
void void
Log::logBoardCards(int boardCards[5]) Log::logBoardCards(int boardCards[5])
{ {
if(SQLITE_LOG) {
if(myConfig->readConfigInt("LogOnOff")) { if(myConfig->readConfigInt("LogOnOff")) {
//if write logfiles is enabled //if write logfiles is enabled
@@ -520,7 +574,6 @@ Log::logBoardCards(int boardCards[5])
} }
} }
} }
}
} }
void void
@@ -542,15 +595,13 @@ void
Log::logHoleCardsHandName(PlayerList activePlayerList, boost::shared_ptr<PlayerInterface> player, bool forceExecLog) Log::logHoleCardsHandName(PlayerList activePlayerList, boost::shared_ptr<PlayerInterface> player, bool forceExecLog)
{ {
if(SQLITE_LOG) {
if(myConfig->readConfigInt("LogOnOff")) { if(myConfig->readConfigInt("LogOnOff")) {
//if write logfiles is enabled //if write logfiles is enabled
if( mySqliteLogDb != 0) { if( mySqliteLogDb != 0) {
int myCards[2]; int myCards[2];
player->getMyCards(myCards); player->getMyHoleCards(myCards);
sql += "UPDATE Hand SET "; sql += "UPDATE Hand SET ";
if(currentRound==GAME_STATE_POST_RIVER && player->getMyCardsValueInt()>0) { if(currentRound==GAME_STATE_POST_RIVER && player->getMyCardsValueInt()>0) {
sql += "Seat_" + boost::lexical_cast<string>(player->getMyID()+1) + "_Hand_text=\"" + CardsValue::determineHandName(player->getMyCardsValueInt(),activePlayerList) + "\""; sql += "Seat_" + boost::lexical_cast<string>(player->getMyID()+1) + "_Hand_text=\"" + CardsValue::determineHandName(player->getMyCardsValueInt(),activePlayerList) + "\"";
@@ -581,7 +632,6 @@ Log::logHoleCardsHandName(PlayerList activePlayerList, boost::shared_ptr<PlayerI
} }
} }
}
} }
void void
@@ -682,9 +732,77 @@ Log::exec_transaction()
//void //void
//Log::closeLogDbAtExit() //Log::closeLogDbAtExit()
//{ //{
// if(SQLITE_LOG) {
// // close sqlite-db // // close sqlite-db
// sqlite3_close(mySqliteLogDb); // sqlite3_close(mySqliteLogDb);
// mySqliteLogDb = NULL; // mySqliteLogDb = NULL;
// }
//} //}
void
Log::debugMode_getStartSmallBlind(int* startSmallBlind, int* currentSmallBlind)
{
if(debug_mode) {
*startSmallBlind = debug_mode_startSmallBlind;
*currentSmallBlind = *startSmallBlind;
}
}
void
Log::debugMode_getStartDealerPosition(unsigned* dealerPosition)
{
if(debug_mode) {
*dealerPosition = debug_mode_dealerPosition;
}
}
void
Log::debugMode_getBoardCards(int *boardCards, int handID)
{
if(debug_mode) {
if((unsigned)handID <= sizeof(debug_mode_boardCards)/sizeof(unsigned)/5) {
for(int i=0; i<5; i++) boardCards[i] = debug_mode_boardCards[handID-1][i];
}
}
}
void
Log::debugMode_getPlayerCards(int *playerCards, int handID, int seatID)
{
if(debug_mode) {
if((unsigned)handID <= sizeof(debug_mode_playerCards)/sizeof(int)/MAX_NUMBER_OF_PLAYERS/2) {
for(int i=0; i<2; i++) {
if(debug_mode_playerCards[handID-1][seatID][i]>=0) playerCards[i] = debug_mode_playerCards[handID-1][seatID][i];
}
}
}
}
void
Log::debugMode_getPlayerStartCash(int* startCash, int seatID)
{
if(debug_mode) {
*startCash = debug_mode_startCash[seatID];
}
}
void
Log::debugMode_getPlayerAction(PlayerAction *playerAction, int *bet, int *raise, GameState gameState, int handID, int seatID, int mySet)
{
if(debug_mode) {
if((unsigned)handID <= sizeof(playerActionMatrix)/sizeof(int)/debug_mode_cntBeRo/MAX_NUMBER_OF_PLAYERS/debug_mode_cntActions/debug_mode_cntValues) {
int max_thd = 0;
unsigned next_action_idx = 0;
for(unsigned action_idx=0; action_idx<debug_mode_cntActions; action_idx++) {
if(mySet > playerActionMatrix[handID-1][gameState][seatID][action_idx][0] && playerActionMatrix[handID-1][gameState][seatID][action_idx][0] > max_thd) {
max_thd = playerActionMatrix[handID-1][gameState][seatID][action_idx][0];
next_action_idx = action_idx;
}
*playerAction = (PlayerAction)playerActionMatrix[handID-1][gameState][seatID][next_action_idx][1];
if(*playerAction == PLAYER_ACTION_BET) {
*bet = playerActionMatrix[handID-1][gameState][seatID][next_action_idx][2];
} else if(*playerAction == PLAYER_ACTION_RAISE || *playerAction == PLAYER_ACTION_ALLIN) {
*raise = playerActionMatrix[handID-1][gameState][seatID][next_action_idx][2];
}
}
}
}
}
+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;
}; };
@@ -0,0 +1,126 @@
import QtQuick 2.0
import QtQuick.Layouts 1.1
import QtQuick.Controls 1.2
import QtQuick.Controls.Styles 1.2
import "../js/colors.js" as GlobalColors
import "styles"
Rectangle {
id: selector
z:1000
visible: false
anchors.fill: parent
color: "#88000000" //dark transparent background
property alias container: ctr.children
property alias containerSelf: ctr
property string titleText: ""
property string button1Text: ""
property string button2Text: ""
signal button1Clicked
signal button2Clicked
function show() {
visible = true;
}
function hide() {
visible = false;
}
MouseArea {
//set empty MouseArea to prevent the background to be clicked
anchors.fill: parent
}
Rectangle {
id: selectorBox
visible: true
color: "white"
height: AppStyle.selectorBoxHeight
width: AppStyle.selectorBoxWidth
anchors.centerIn: parent;
radius: AppStyle.selectorBoxRadius
ColumnLayout {
id: content
anchors.fill: parent
anchors.margins: AppStyle.selectorBoxContentMargins
spacing: AppStyle.columnLayoutSpacing
Text {
id: title
font.pixelSize: AppStyle.selectorBoxTitleFontSize
font.bold: AppStyle.selectorBoxTitleFontBold
text: titleText
anchors.left: parent.left
anchors.top: parent.top
anchors.topMargin: AppStyle.selectorBoxTitleTopMargin
Layout.preferredHeight: contentHeight
}
Rectangle {
id: preCtr
Layout.fillHeight: true
Layout.fillWidth: true
Rectangle {
anchors.fill: preCtr
anchors.leftMargin: AppStyle.selectorBoxRealContentLeftMargin
anchors.rightMargin: AppStyle.selectorBoxRealContentRightMargin
id: ctr
//The content goes here
}
}
RowLayout {
width: parent.width
anchors.right: parent.right
anchors.bottom: parent.bottom
spacing: AppStyle.selectorBoxButtonRowLayoutSpacing
Layout.preferredHeight: btn1.contentHeight
Text {
id: btn1
font.pixelSize: AppStyle.selectorBoxButtonFontSize
font.bold: true
width: button1Text == "" ? 0 : contentWidth
text: button1Text
MouseArea {
id: mouse1
anchors.fill: parent
anchors.margins: AppStyle.selectorBoxButtonMouseAreaMargin
onClicked: selector.button1Clicked()
Rectangle {
anchors.fill: parent
color: mouse1.pressed ? "#55555555" : "#00ffffff"
}
}
}
Text {
id: btn2
font.pixelSize: AppStyle.selectorBoxButtonFontSize
font.bold: true
width: button2Text == "" ? 0 : contentWidth
text: button2Text
MouseArea {
id: mouse2
anchors.fill: parent
anchors.margins: AppStyle.selectorBoxButtonMouseAreaMargin
onClicked: selector.button2Clicked()
Rectangle {
anchors.fill: parent
color: mouse2.pressed ? "#55555555" : "#00ffffff"
}
}
}
}
}
}
}
@@ -0,0 +1,137 @@
import QtQuick 2.0
import QtQuick.Layouts 1.1
import QtQuick.Controls 1.2
import QtQuick.Controls.Styles 1.2
import "../js/colors.js" as GlobalColors
import "../js/tools.js" as GlobalTools
import "styles/"
Item {
id: root
anchors.fill: parent
property string titleString: ""
property string raiseOnHandsType: ""
property string raiseOnHandsInterval: ""
property string raiseOnMinutesInterval: ""
property int raiseOnHandsMinimum: 1
property int raiseOnHandsMaximum: 99
property int raiseOnMinutesMinimum: 1
property int raiseOnMinutesMaximum: 99
property bool ready: false
signal accepted
function show(title, type, hands, minutes) {
titleString = title
raiseOnHandsType = type;
raiseOnHandsInterval = hands;
raiseOnMinutesInterval = minutes;
mySelector.show()
if(raiseOnHandsType == "1") {
// textFieldHandsInterval.focus = true;
radioBtnRaiseOnHands.checked = true;
}
else {
// textFieldMinutesInterval.focus = true;
radioBtnRaiseOnMinutes.checked = true;
}
}
function selected(handsType, handsInterval, minutesInterval) {
raiseOnHandsType = handsType;
raiseOnHandsInterval = handsInterval;
raiseOnMinutesInterval = minutesInterval;
mySelector.hide()
root.accepted()
}
MyAbstractSelector {
id: mySelector
titleText: titleString
button1Text: qsTr("CANCEL")
onButton1Clicked: hide()
button2Text: qsTr("OK")
onButton2Clicked: {
textFieldHandsInterval.correctValue();
textFieldMinutesInterval.correctValue();
//return values
root.selected(radioBtnRaiseOnHands.checked ? "1": "0", textFieldHandsInterval.text, textFieldMinutesInterval.text);
}
container: ColumnLayout {
anchors.fill: parent
RowLayout { //Hands interval section
spacing: AppStyle.rowLayoutSpacing
ExclusiveGroup { id: raiseTypeGroup }
RadioButton {
id: radioBtnRaiseOnHands
exclusiveGroup: raiseTypeGroup
style: MyRadioButtonStyle {
myRadioBtn: radioBtnRaiseOnHands;
labelString: "Every"
}
onClicked: textFieldHandsInterval.focus = true;
}
TextField {
id: textFieldHandsInterval
width: AppStyle.textFieldFontSize*2
validator: IntValidator{bottom: raiseOnHandsMinimum; top: raiseOnHandsMaximum;}
text: raiseOnHandsInterval
function correctValue() {
text = GlobalTools.correctTextFieldIntegerValue(root, text, raiseOnHandsMinimum);
}
onFocusChanged: { if(root.ready && !focus) correctValue(); }
onEditingFinished: { if(root.ready) correctValue(); }
style: MyTextFieldStyle {
myTextField: textFieldHandsInterval
}
}
Text {
id: onHandsString
font.pixelSize: AppStyle.selectorBoxValueFontSize
text: qsTr("hands")
}
}
RowLayout { //Minutes interval section
spacing: AppStyle.rowLayoutSpacing
RadioButton {
id: radioBtnRaiseOnMinutes
exclusiveGroup: raiseTypeGroup
style: MyRadioButtonStyle {
myRadioBtn: radioBtnRaiseOnMinutes;
labelString: "Every"
}
onClicked: textFieldMinutesInterval.focus = true;
}
TextField {
id: textFieldMinutesInterval
validator: IntValidator{bottom: raiseOnMinutesMinimum; top: raiseOnMinutesMaximum;}
text: raiseOnMinutesInterval
width: AppStyle.textFieldFontSize*2
function correctValue() {
text = GlobalTools.correctTextFieldIntegerValue(root, text, raiseOnMinutesMinimum);
}
onFocusChanged: { if(root.ready && !focus) correctValue(); }
onEditingFinished: { if(root.ready) correctValue(); }
style: MyTextFieldStyle {
myTextField: textFieldMinutesInterval
}
}
Text {
id: onMinutesString
font.pixelSize: AppStyle.selectorBoxValueFontSize
text: qsTr("minutes")
}
}
}
}
Component.onCompleted: ready = true;
}
@@ -0,0 +1,285 @@
import QtQuick 2.0
import QtQuick.Layouts 1.1
import QtQuick.Controls 1.2
import QtQuick.Controls.Styles 1.2
import "../js/colors.js" as GlobalColors
import "../js/tools.js" as GlobalTools
import "styles"
Item {
id: root
anchors.fill: parent
property string titleString: ""
property bool alwaysDoubleBlinds: false
property var manualBlindsList
property ListModel internalManualBlindsList: ListModel {}
property bool afterMBAlwaysDoubleBlinds: false
property bool afterMBAlwaysRaiseAbout: false
property bool afterMBStayAtLastBlind: false
property string afterMBAlwaysRaiseValue: "0"
property var parentListViewModel
property var parentListViewRoot
property int addBlindTextFieldMinValue: 5
property int addBlindTextFieldMaxValue: 1000000
property bool ready: false
signal accepted
function show(title, doubleBlinds, list, afterMBDouble, afterMBRaise, afterMBRaiseValue, afterMBStay, parentListModel, parentListRoot) {
//initial the class values
titleString = title
alwaysDoubleBlinds = doubleBlinds;
manualBlindsList = list;
//to easily edit the array put it into an temporary listmodel
internalManualBlindsList.clear();
for (var i=0; i < list.length; i++) {
internalManualBlindsList.append({"value": list[i]});
}
afterMBAlwaysDoubleBlinds = afterMBDouble;
afterMBAlwaysRaiseAbout = afterMBRaise;
afterMBAlwaysRaiseValue = afterMBRaiseValue;
afterMBStayAtLastBlind = afterMBStay;
parentListViewModel = parentListModel;
parentListViewRoot = parentListRoot;
//show the abstract selector with below defined specific content
mySelector.show()
//set the config options to radiobuttons and textfields
if(alwaysDoubleBlinds) {
radioBtnBlindsRaiseModeAlwaysDouble.checked = true;
radioBtnBlindsRaiseModeManualBlindsList.checked = false;
}
else {
radioBtnBlindsRaiseModeManualBlindsList.checked = true;
radioBtnBlindsRaiseModeAlwaysDouble.checked = false;
}
//if we are in a createLocalGameView Dialog set min and max from corresponding values in the same list
if(parentListViewRoot.myReadableId == "createLocalGameViewRoot") {
//get current start blind as minimum and cash as maximum for the textfield
var currentStartBlind = 0;
var startCash = 0;
for (var i=0; i < parentListViewModel.length; i++) {
if(parentListViewModel[i].myId == "spinBox_FirstSmallBlind") {
currentStartBlind = parentListViewModel[i].myValue;
}
else if (parentListViewModel[i].myId == "spinBox_StartCash") {
startCash = parentListViewModel[i].myValue;
}
}
addBlindTextFieldMinValue = currentStartBlind;
addBlindTextFieldMaxValue = startCash;
textFieldAddListBlind.text = addBlindTextFieldMinValue;
}
if(afterMBAlwaysDoubleBlinds) {
radioBtnAfterMBAlwaysDouble.checked = true
radioBtnAfterMBAlwaysRaiseAbout.checked = false
radioBtnAfterMBKeepLastBlind.checked = false
}
else if (afterMBAlwaysRaiseAbout) {
radioBtnAfterMBAlwaysDouble.checked = false
radioBtnAfterMBAlwaysRaiseAbout.checked = true
radioBtnAfterMBKeepLastBlind.checked = false
}
else {
radioBtnAfterMBAlwaysDouble.checked = false
radioBtnAfterMBAlwaysRaiseAbout.checked = false
radioBtnAfterMBKeepLastBlind.checked = true
}
textFieldAfterMBAlwaysRaiseAboutValue.text = afterMBAlwaysRaiseValue
}
function selected(doubleBlinds, afterMBDouble, afterMBRaise, afterMBRaiseValue, afterMBStay) {
alwaysDoubleBlinds = doubleBlinds;
afterMBAlwaysDoubleBlinds = afterMBDouble;
afterMBAlwaysRaiseAbout = afterMBRaise;
afterMBAlwaysRaiseValue = afterMBRaiseValue;
afterMBStayAtLastBlind = afterMBStay;
mySelector.hide()
root.accepted()
}
MyAbstractSelector {
id: mySelector
titleText: titleString
button1Text: qsTr("CANCEL")
onButton1Clicked: hide()
button2Text: qsTr("OK")
onButton2Clicked: {
textFieldAfterMBAlwaysRaiseAboutValue.correctValue();
//copy editable internal listmodel to returnable list
manualBlindsList = new Array(); //clear at first
for (var i=0; i < internalManualBlindsList.count; i++) {
manualBlindsList.push(internalManualBlindsList.get(i).value.toString());
}
//return values
root.selected(radioBtnBlindsRaiseModeAlwaysDouble.checked, radioBtnAfterMBAlwaysDouble.checked, radioBtnAfterMBAlwaysRaiseAbout.checked, textFieldAfterMBAlwaysRaiseAboutValue.text, radioBtnAfterMBKeepLastBlind.checked);
}
container: ScrollView {
id: scrollView
anchors.fill: parent
ColumnLayout {
width: parent.width
spacing: AppStyle.columnLayoutSpacing
ExclusiveGroup { id: blindsRaiseModeGroup }
RadioButton {
id: radioBtnBlindsRaiseModeAlwaysDouble
exclusiveGroup: blindsRaiseModeGroup
style: MyRadioButtonStyle {
myRadioBtn: radioBtnBlindsRaiseModeAlwaysDouble
labelString: qsTr("Always double blinds");
}
}
RadioButton {
id: radioBtnBlindsRaiseModeManualBlindsList
exclusiveGroup: blindsRaiseModeGroup
style: MyRadioButtonStyle {
myRadioBtn: radioBtnBlindsRaiseModeManualBlindsList
labelString: qsTr("Manual blinds list");
}
}
RowLayout {
id: listControlsRow
width: parent.width
spacing: AppStyle.rowLayoutSpacing
TextField {
id: textFieldAddListBlind
anchors.left: parent.left
//make space for the prefix
anchors.leftMargin: AppStyle.spinBoxSelectorTextFieldPrefixExtraLeftMargin
width: Math.round(listControlsRow.width * 0.5)
style: MyTextFieldStyle {
prefix: "$"
myTextField: textFieldAddListBlind
}
function correctValue() {
text = GlobalTools.correctTextFieldIntegerValue(root, text, addBlindTextFieldMinValue, addBlindTextFieldMaxValue);
}
onFocusChanged: { if(root.ready && !focus) correctValue(); }
onEditingFinished: { if(root.ready) correctValue(); }
}
Text {
id: btnAddNewListBlind
font.pixelSize: AppStyle.selectorBoxButtonFontSize
font.bold: true
width: Math.round(listControlsRow.width * 0.5)
text: qsTr("ADD BLIND")
MouseArea {
id: mouseAddNewListBlind
anchors.fill: parent
anchors.margins: AppStyle.selectorBoxButtonMouseAreaMargin
onClicked: {
textFieldAddListBlind.correctValue();
internalManualBlindsList.append({"value": textFieldAddListBlind.text.toString()})
}
Rectangle {
anchors.fill: parent
color: mouseAddNewListBlind.pressed ? "#55555555" : "#00ffffff"
}
}
}
}
Repeater {
id: manualBlindListRepeater
width: parent.width
model: internalManualBlindsList
delegate: RowLayout {
spacing: AppStyle.rowLayoutSpacing
Text {
id: blindInList
anchors.verticalCenter: parent.verticalCenter
font.pixelSize: AppStyle.radioButtonLabelFontSize
text: "$"+model.value
}
Text {
id: btnRemoveListBlind
anchors.verticalCenter: parent.verticalCenter
property int modelIndex: model.index
font.pixelSize: AppStyle.selectorBoxButtonFontSize
font.bold: true
width: Math.round(listControlsRow.width * 0.5)
text: qsTr("REMOVE")
MouseArea {
id: mouseRemoveListBlind
anchors.fill: parent
anchors.margins: AppStyle.selectorBoxButtonMouseAreaMargin
onClicked: {
internalManualBlindsList.remove(btnRemoveListBlind.modelIndex)
}
Rectangle {
anchors.fill: parent
color: mouseRemoveListBlind.pressed ? "#55555555" : "#00ffffff"
}
}
}
}
}
Text {
font.pixelSize: AppStyle.selectorBoxValueFontSize
text: qsTr("Afterwards:")
}
ExclusiveGroup { id: afterMBModeGroup }
RadioButton {
id: radioBtnAfterMBAlwaysDouble
exclusiveGroup: afterMBModeGroup
style: MyRadioButtonStyle {
myRadioBtn: radioBtnAfterMBAlwaysDouble
labelString: qsTr("always double blinds");
}
}
RadioButton {
id: radioBtnAfterMBAlwaysRaiseAbout
exclusiveGroup: afterMBModeGroup
style: MyRadioButtonStyle {
myRadioBtn: radioBtnAfterMBAlwaysRaiseAbout
labelString: qsTr("always raise about");
}
}
TextField {
id: textFieldAfterMBAlwaysRaiseAboutValue
//make space for the prefix
anchors.left: parent.left
anchors.leftMargin: AppStyle.spinBoxSelectorTextFieldPrefixExtraLeftMargin
width: radioBtnAfterMBAlwaysRaiseAbout.width
style: MyTextFieldStyle {
prefix: "$"
myTextField: textFieldAfterMBAlwaysRaiseAboutValue
}
function correctValue() {
text = GlobalTools.correctTextFieldIntegerValue(root, text, addBlindTextFieldMinValue, addBlindTextFieldMaxValue);
}
onFocusChanged: { if(root.ready && !focus) correctValue(); }
onEditingFinished: { if(root.ready) correctValue(); }
}
RadioButton {
id: radioBtnAfterMBKeepLastBlind
exclusiveGroup: afterMBModeGroup
style: MyRadioButtonStyle {
myRadioBtn: radioBtnAfterMBKeepLastBlind
labelString: qsTr("keep last blind");
}
}
}
}
}
Component.onCompleted: {
ready = true;
}
}
@@ -0,0 +1,90 @@
import QtQuick 2.5
import QtQuick.Controls 1.2
import QtGraphicalEffects 1.0
import QtQuick.Layouts 1.1
import QtQuick.Controls.Styles 1.2
import "../js/colors.js" as GlobalColors
import "styles"
Item {
id: root
anchors.fill: parent
property ListModel internalValuesList: ListModel {}
property string valueFromParent
property string titleString
property string returnValue
property bool valueIsIndex
signal accepted
function show(title, list, vl, valueIndex) {
titleString = title;
valueFromParent = vl;
returnValue = vl; // <-- initial the returnValue with the preselection to prevent a NULL return when pressing Cancel
valueIsIndex = valueIndex;
//fill the model
internalValuesList.clear();
for (var i=0; i < list.length; i++) {
internalValuesList.append({"value": list[i]});
}
mySelector.show()
}
function selected(newString, index) {
if(valueIsIndex) {
returnValue = index.toString();
}
else {
returnValue = newString
}
mySelector.hide()
root.accepted()
}
MyAbstractSelector {
id: mySelector
titleText: titleString
button1Text: qsTr("CANCEL")
onButton1Clicked: hide()
container: ScrollView {
id: scrollView
anchors.fill:parent
property int yOfCheckedRadioButton: 0
ListView {
id:listView
anchors.fill: parent
spacing: Math.round(appWindow.height*0.05)
model: internalValuesList
delegate: RadioButton {
id: radioBtn
//check of value is index type and do the corresponding checked? test
checked: valueIsIndex ? (parseInt(valueFromParent) == index ? true : false) : (valueFromParent == value ? true : false)
onClicked: {
root.selected(value, index)
}
style: MyRadioButtonStyle {
myRadioBtn: radioBtn
labelString: value
}
Component.onCompleted: {
//set the position of the checked RadioButton to scroll to it later onContentHeightChange
if(checked) {
var checkedRadioBtnPositionY = Math.round((radioBtn.height + listView.spacing) * index - radioBtn.height * 1.5)
if( checkedRadioBtnPositionY > 0)
scrollView.yOfCheckedRadioButton = checkedRadioBtnPositionY
else
scrollView.yOfCheckedRadioButton = 0
}
}
}
onContentHeightChanged: {
//scroll to the checked RadioButton
contentY = scrollView.yOfCheckedRadioButton
}
}
}
}
}
@@ -0,0 +1,399 @@
import QtQuick 2.2
import QtQuick.Layouts 1.1
import QtQuick.Window 2.0
import QtQuick.Dialogs 1.2
import QtQuick.Controls 1.2
import QtQuick.Controls.Styles 1.2
import "styles"
Item {
id: root
property int myListViewsHeight: 0
property int myListViewsWidth: 0
property var myListViewRoot
property var myListViewModel
property var componentMap: {
"ComboBox": myComboBox,
"SpinBox": mySpinBox,
"BlindsRaiseInterval": myBlindsRaiseInterval,
"BlindsRaiseMode": myBlindsRaiseMode
}
width: myListViewsWidth
Loader {
id: listViewFactoryLoader
function setSourceComponent(comp) {
sourceComponent = comp;
}
}
// ComboBox
Component {
id: myComboBox
Rectangle {
MyComboBoxSelector {
id: myComboBoxSelector
parent: myListViewRoot // this needs to be parent to display the selector over the whole ListView
onAccepted: myListViewModel[myComboBoxContent.modelIndex].myValue = myComboBoxSelector.returnValue;
}
id: myComboBoxContent
property int modelIndex: model.index
color: mouse.pressed ? "#11000000" : "white"
width: root.width
height: Math.round(textLayout.height*AppStyle.listViewDelegateHeightBasedOnContentFactor)
ColumnLayout {
id: textLayout
spacing: AppStyle.listViewDelegateTitleAndValueSpacing
anchors.verticalCenter: parent.verticalCenter
Text {
id: comboBoxTitle
anchors.left: parent.left
anchors.margins: AppStyle.listViewDelegateTitleAndValueMargins
color: "black"
font.pixelSize: AppStyle.listViewDelegateTitleFontSize
text: myTitle
Layout.preferredHeight: contentHeight
}
Text {
id: comboBoxValue
anchors.left: parent.left
anchors.margins: AppStyle.listViewDelegateTitleAndValueMargins
color: "grey"
font.pixelSize: myValue != "" ? AppStyle.listViewDelegateValueFontSize : 0
//setup value from Index if necessary
text: myValueIsIndex ? myValuesList[parseInt(myValue)].value : myValue
Layout.preferredHeight: contentHeight
}
}
Rectangle {
anchors.horizontalCenter: parent.horizontalCenter
anchors.bottom: parent.bottom
width: parent.width - AppStyle.listViewDelegateSeperatorLineIndent
height: AppStyle.listViewDelegateSeperatorLineHeight
color: "lightgrey"
}
MouseArea {
id: mouse
anchors.fill: parent
onClicked: {
//call selector overlay and set inital values
myComboBoxSelector.show(myTitle, myValuesList, myValue, myValueIsIndex)
}
}
Component.onCompleted: {
//after building the delegate content set the final height to the root item
root.height = Qt.binding(function() { return height })
}
}
}
// Spinbox
Component {
id: mySpinBox
Rectangle {
MySpinBoxSelector {
id: mySpinBoxSelector
parent: myListViewRoot // this needs to be parent to display the selector over the whole ListView
onAccepted: myListViewModel[mySpinBoxContent.modelIndex].myValue = mySpinBoxSelector.returnValue;
}
id: mySpinBoxContent
property int modelIndex: model.index
color: mouse.pressed ? "#11000000" : "white"
width: root.width
height: Math.round(textLayout.height*AppStyle.listViewDelegateHeightBasedOnContentFactor)
ColumnLayout {
id: textLayout
spacing: AppStyle.listViewDelegateTitleAndValueSpacing
anchors.verticalCenter: parent.verticalCenter
Text {
id: spinBoxTitle
anchors.left: parent.left
anchors.margins: AppStyle.listViewDelegateTitleAndValueMargins
color: "black"
font.pixelSize: AppStyle.listViewDelegateTitleFontSize
text: myTitle
Layout.preferredHeight: contentHeight
}
Text {
id: spinBoxValue
anchors.left: parent.left
anchors.margins: AppStyle.listViewDelegateTitleAndValueMargins
color: "grey"
font.pixelSize: myValue != "" ? AppStyle.listViewDelegateValueFontSize : 0
text: myPrefix+myValue
Layout.preferredHeight: contentHeight
}
}
Rectangle {
anchors.horizontalCenter: parent.horizontalCenter
anchors.bottom: parent.bottom
width: parent.width - AppStyle.listViewDelegateSeperatorLineIndent
height: AppStyle.listViewDelegateSeperatorLineHeight
color: "lightgrey"
}
MouseArea {
id: mouse
anchors.fill: parent
onClicked: {
//call selector overlay and set inital value
mySpinBoxSelector.show(myId, myTitle, myMinValue, myMaxValue, myValue, myPrefix)
}
}
Component.onCompleted: {
//after building the delegate content set the final height to the root item
root.height = Qt.binding(function() { return height })
}
}
}
// BlindsRaiseInterval
Component {
id: myBlindsRaiseInterval
Rectangle {
id: myBlindsRaiseIntervalContent
MyBlindsRaiseIntervalSelector {
id: myBlindsRaiseIntervalSelector
parent: myListViewRoot // this needs to be parent to display the selector over the whole ListView
onAccepted: {
//call update the currentItem with selection from the comboBox selector
myListViewModel[myBlindsRaiseIntervalContent.modelIndex].myRaiseOnHandsType = myBlindsRaiseIntervalSelector.raiseOnHandsType;
myListViewModel[myBlindsRaiseIntervalContent.modelIndex].myRaiseOnHandsInterval = myBlindsRaiseIntervalSelector.raiseOnHandsInterval;
myListViewModel[myBlindsRaiseIntervalContent.modelIndex].myRaiseOnMinutesInterval = myBlindsRaiseIntervalSelector.raiseOnMinutesInterval;
//here we also need to trigger the textStringBuild from the model again
blindsRaiseIntevalValue.buildTextString();
}
}
property int modelIndex: model.index
color: mouse.pressed ? "#11000000" : "white"
width: root.width
height: Math.round(textLayout.height*AppStyle.listViewDelegateHeightBasedOnContentFactor)
ColumnLayout {
id: textLayout
spacing: AppStyle.listViewDelegateTitleAndValueSpacing
anchors.verticalCenter: parent.verticalCenter
Text {
id: blindsRaiseIntevalTitle
anchors.left: parent.left
anchors.margins: AppStyle.listViewDelegateTitleAndValueMargins
color: "black"
font.pixelSize: AppStyle.listViewDelegateTitleFontSize
text: myTitle
Layout.preferredHeight: blindsRaiseIntevalTitle.contentHeight
}
Text {
id: blindsRaiseIntevalValue
anchors.left: parent.left
anchors.margins: AppStyle.listViewDelegateTitleAndValueMargins
color: "grey"
font.pixelSize: AppStyle.listViewDelegateValueFontSize
text: ""
Layout.preferredHeight: blindsRaiseIntevalValue.contentHeight
function buildTextString() {
if(myRaiseOnHandsType == "1") text = qsTr("Raise blinds every")+" "+myRaiseOnHandsInterval+" "+qsTr("hands");
else text = qsTr("Raise blinds every")+" "+myRaiseOnMinutesInterval+" "+qsTr("minutes");
}
Component.onCompleted: {
buildTextString();
}
}
}
Rectangle {
anchors.horizontalCenter: parent.horizontalCenter
anchors.bottom: parent.bottom
width: parent.width - AppStyle.listViewDelegateSeperatorLineIndent
height: AppStyle.listViewDelegateSeperatorLineHeight
color: "lightgrey"
}
MouseArea {
id: mouse
anchors.fill: parent
onClicked: {
//call selector overlay and set inital values
myBlindsRaiseIntervalSelector.show(myTitle, myRaiseOnHandsType, myRaiseOnHandsInterval, myRaiseOnMinutesInterval, myListViewModel)
}
}
Component.onCompleted: {
//after building the delegate content set the final height to the root item
root.height = Qt.binding(function() { return height })
}
}
}
Component {
id: myBlindsRaiseMode // Always double vs. Manual blinds List
Rectangle {
id: myBlindsRaiseModeContent
MyBlindsRaiseModeSelector {
id: myBlindsRaiseModeSelector
parent: myListViewRoot // this needs to be parent to display the selector over the whole ListView
onAccepted: {
//call update the currentItem with selection from the comboBox selector
myListViewModel[myBlindsRaiseModeContent.modelIndex].myAlwaysDoubleBlinds = (myBlindsRaiseModeSelector.alwaysDoubleBlinds ? "1" : "0");
myListViewModel[myBlindsRaiseModeContent.modelIndex].myManualBlindsList = (myBlindsRaiseModeSelector.manualBlindsList);
myListViewModel[myBlindsRaiseModeContent.modelIndex].myAfterMBAlwaysDoubleBlinds = (myBlindsRaiseModeSelector.afterMBAlwaysDoubleBlinds ? "1" : "0");
myListViewModel[myBlindsRaiseModeContent.modelIndex].myAfterMBAlwaysRaiseAbout = (myBlindsRaiseModeSelector.afterMBAlwaysRaiseAbout ? "1" : "0");
myListViewModel[myBlindsRaiseModeContent.modelIndex].myAfterMBAlwaysRaiseValue = (myBlindsRaiseModeSelector.afterMBAlwaysRaiseValue);
myListViewModel[myBlindsRaiseModeContent.modelIndex].myAfterMBStayAtLastBlind = (myBlindsRaiseModeSelector.afterMBStayAtLastBlind ? "1" : "0");
//here we also need to trigger the textStringBuild from the model again
blindsRaiseModeValue.buildTextString();
}
}
property int modelIndex: model.index
color: mouse.pressed ? "#11000000" : "white"
width: root.width
height: Math.round(textLayout.height*AppStyle.listViewDelegateHeightBasedOnContentFactor)
ColumnLayout {
id: textLayout
spacing: AppStyle.listViewDelegateTitleAndValueSpacing
anchors.verticalCenter: parent.verticalCenter
Text {
id: blindsRaiseModeTitle
anchors.left: parent.left
anchors.leftMargin: AppStyle.listViewDelegateTitleAndValueMargins
color: "black"
font.pixelSize: AppStyle.listViewDelegateTitleFontSize
text: myTitle
Layout.preferredHeight: contentHeight
}
Text {
id: blindsRaiseModeValue
anchors.left: parent.left
anchors.leftMargin: AppStyle.listViewDelegateTitleAndValueMargins
color: "grey"
font.pixelSize: AppStyle.listViewDelegateValueFontSize
text: ""
wrapMode: Text.WordWrap //maybe blinds list are too long
Layout.preferredHeight: contentHeight
function buildTextString() {
if(myAlwaysDoubleBlinds == "1") {
text = qsTr("Always double blinds");
}
else {
//build manual blindsList
var tempString = ""
for (var i=0; i < myManualBlindsList.length; i++) {
tempString = tempString + "$" + myManualBlindsList[i] + ", ";
}
text = tempString.substring(0, tempString.length - 2);
if(myAfterMBAlwaysDoubleBlinds == "1") {
text = text + "\n" + qsTr("afterwards always double blinds");
}
else if (myAfterMBAlwaysRaiseAbout == "1") {
text = text + "\n" + qsTr("afterwards always raise about $") + myAfterMBAlwaysRaiseValue;
}
else {
text = text + "\n" + qsTr("afterwards keep last blind")
}
}
}
Component.onCompleted: {
buildTextString();
}
}
}
Rectangle {
anchors.horizontalCenter: parent.horizontalCenter
anchors.bottom: parent.bottom
width: parent.width - AppStyle.listViewDelegateSeperatorLineIndent
height: AppStyle.listViewDelegateSeperatorLineHeight
color: "lightgrey"
}
MouseArea {
id: mouse
anchors.fill: parent
onClicked: {
//call selector overlay and set inital values
myBlindsRaiseModeSelector.show(myTitle, myAlwaysDoubleBlinds == "1", myManualBlindsList, myAfterMBAlwaysDoubleBlinds == "1", myAfterMBAlwaysRaiseAbout == "1", myAfterMBAlwaysRaiseValue, myAfterMBStayAtLastBlind == "1", myListViewModel, myListViewRoot);
}
}
Component.onCompleted: {
//after building the delegate content set the final height to the root item
root.height = Qt.binding(function() { return height })
}
}
}
Component.onCompleted: {
listViewFactoryLoader.setSourceComponent(componentMap[myType])
}
}
// Column {
// anchors.verticalCenter: parent.verticalCenter
// anchors.left: parent.left
// anchors.leftMargin: 30
// Text {
// id: comboBoxTitle
// color: "#0F0F0F"
// font.pixelSize: parent.height*0.30
// renderType: Text.NativeRendering
// text: title
// anchors.left: parent.left
// }
// Text {
// id: comboBoxValue
// color: "#0F0F0F"
// font.pixelSize: parent.height*0.30
// renderType: Text.NativeRendering
// text: value
// anchors.left: parent.left
// }
// }
// Rectangle { //seperator
// anchors.horizontalCenter: parent.horizontalCenter
// anchors.bottom: parent.bottom
// width: parent.width - 30
// height: 1
// color: "lightgrey"
// }
// MouseArea {
// id: mouse
// anchors.fill: parent
// onClicked: root.clicked()
// }
// Image {
// anchors.right: parent.right
// anchors.rightMargin: 20
// anchors.verticalCenter: parent.verticalCenter
// source: "../../images/navigation_next_item.png"
// }
//// CheckBox {
//// id: myCheckBox
//// anchors.verticalCenter: parent.verticalCenter
//// x: rect1.width-rect1.width*0.10
//// style: CheckBoxStyle {
//// indicator: Rectangle {
//// color: "#FAFAFA"
//// implicitWidth: rect1.width*0.04
//// implicitHeight: rect1.width*0.04
//// radius: 3
//// border.color: control.activeFocus ? "darkblue" : "gray"
//// border.width: 1
//// Rectangle {
//// visible: control.checked
//// color: "#555"
//// border.color: "#333"
//// radius: 1
//// anchors.margins: 4
//// anchors.fill: parent
//// }
//// }
//// }
//// }
@@ -0,0 +1,125 @@
import QtQuick 2.0
import QtQuick.Layouts 1.1
import QtQuick.Controls 1.2
import QtQuick.Controls.Styles 1.2
import "../js/colors.js" as GlobalColors
import "../js/tools.js" as GlobalTools
import "styles/"
Item {
id: root
anchors.fill: parent
property string titleString: ""
property string prefix: ""
property string returnValue: ""
property string myIdString: ""
property int minValue: 0
property int maxValue: 0
property int initialTextFieldValue: 0
property int initialSliderValue: 0
property bool ready: false
signal accepted
function show(myId, myTitle, myMinValue, myMaxValue, myValue, myPrefix) {
myIdString = myId;
titleString = myTitle;
minValue = myMinValue;
maxValue = myMaxValue;
returnValue = myValue;
textField.text = myValue;
prefix = myPrefix;
mySelector.show()
// textField.focus = true;
}
function selected(newSelection) {
returnValue = newSelection;
mySelector.hide()
root.accepted()
}
MyAbstractSelector {
id: mySelector
titleText: titleString
button1Text: qsTr("CANCEL")
onButton1Clicked: hide()
button2Text: qsTr("OK")
onButton2Clicked: {
textField.correctValue();
root.selected(textField.text);
}
container: ColumnLayout {
anchors.fill: parent
TextField {
id: textField
anchors.left: parent.left
anchors.right: parent.right
//make space for the prefix
anchors.leftMargin: AppStyle.spinBoxSelectorTextFieldPrefixExtraLeftMargin
validator: IntValidator{bottom: minValue; top: maxValue;}
function correctValue() {
text = GlobalTools.correctTextFieldIntegerValue(root, text, minValue);
}
onFocusChanged: { if(root.ready && !focus) correctValue(); }
onEditingFinished: { if(root.ready) correctValue(); }
style: MyTextFieldStyle {
prefix: root.prefix
myTextField: textField
}
}
Slider {
id: slider
width: parent.width
anchors.left: parent.left
anchors.right: parent.right
maximumValue: maxValue
minimumValue: minValue
//don't initialize the slider value to avoid the stepSize kills the preselection Value
//because of the binding to the TextField value
stepSize: minimumValue * 10
on__HandlePosChanged: {
if(root.ready) { //wait until the whole component is ready, otherwise setting min and max changes text field value
if (slider.value > minimumValue && slider.value < maximumValue)
textField.text = slider.value - minimumValue
else
textField.text = slider.value
}
}
style: SliderStyle {
handle: Rectangle {
width: AppStyle.sliderHandleWidth
height: width
radius: width
antialiasing: true
color: Qt.lighter(GlobalColors.accentColor, 1.2)
}
groove: Item {
implicitHeight: AppStyle.sliderGrooveHeight
implicitWidth: slider.width
Rectangle {
height: AppStyle.sliderGrooveRectHeight
width: slider.width
anchors.verticalCenter: parent.verticalCenter
color: "#666"
Rectangle {
antialiasing: true
radius: 1
color: GlobalColors.accentColor
height: parent.height
width: parent.width * control.value / control.maximumValue
}
}
}
}
}
}
}
Component.onCompleted: ready = true
}
@@ -0,0 +1,62 @@
pragma Singleton
import QtQuick 2.4
import QtQuick.Window 2.0
QtObject {
id: myAppStyle
property int appHeight: 0
property int appWidth: 0
property int fontSizeH1: Math.round(appHeight*0.10)
property int fontSizeH2: Math.round(appHeight*0.09)
property int fontSizeH3: Math.round(appHeight*0.08)
property int fontSizeH4: Math.round(appHeight*0.07)
property int fontSizeH5: Math.round(appHeight*0.06)
property int fontSizeH6: Math.round(appHeight*0.05)
property int radioButtonLabelFontSize: fontSizeH5
property int textFieldFontSize: fontSizeH3
property int rowLayoutSpacing: Math.round(appHeight*0.06)
property int columnLayoutSpacing: Math.round(appHeight*0.02)
//Selector Box (white on darken background)
property int selectorBoxHeight: Math.round(appHeight*0.8)
property int selectorBoxWidth: Math.round(appWidth*0.6)
property int selectorBoxRadius: Math.round(appWidth*0.01)
property int selectorBoxTitleFontSize: fontSizeH4
property bool selectorBoxTitleFontBold: false
property int selectorBoxTitleTopMargin: -Math.round(appHeight*0.02)
property int selectorBoxValueFontSize: fontSizeH5
property int selectorBoxButtonFontSize: fontSizeH5
property int selectorBoxButtonMouseAreaMargin: -Math.round(appHeight*0.02)
property int selectorBoxButtonRowLayoutSpacing: Math.round(appHeight*0.10)
property bool selectorBoxButtonFontBold: false
property int selectorBoxContentMargins: Math.round(appHeight*0.05)
property int selectorBoxRealContentLeftMargin: Math.round(appHeight*0.05)
property int selectorBoxRealContentRightMargin: Math.round(appHeight*0.05)
//SpinBoxSelector
property int spinBoxSelectorTextFieldPrefixExtraLeftMargin: Math.round(appHeight*0.03)
//SliderStyle
property int sliderHandleWidth: Math.round(appHeight*0.10)
property int sliderGrooveHeight: Math.round(appHeight*0.033)
property int sliderGrooveRectHeight: Math.round(appHeight*0.025)
//ListViewDelegate
property real listViewDelegateHeightBasedOnContentFactor: 1.5
property int listViewDelegateTitleAndValueMargins: 30
property int listViewDelegateTitleAndValueSpacing: -3
property int listViewDelegateTitleFontSize: fontSizeH5
property int listViewDelegateValueFontSize: fontSizeH6
property int listViewDelegateSeperatorLineIndent: 30
property int listViewDelegateSeperatorLineHeight: 1
Component.onCompleted: {
console.log("pixelDensity: "+Screen.pixelDensity);
console.log("logicalPixelDensity: " +Screen.logicalPixelDensity);
console.log("devicePixelRatio: " +Screen.devicePixelRatio);
}
}
@@ -0,0 +1,34 @@
import QtQuick 2.4
import QtQuick.Controls.Styles 1.2
import "../../js/colors.js" as GlobalColors
import "."
RadioButtonStyle {
property var myRadioBtn
property string labelString: ""
indicator: Rectangle {
implicitWidth: Math.round(appWindow.height*0.05)
implicitHeight: Math.round(appWindow.height*0.05)
radius: Math.round(appWindow.height*0.03)
border.color: myRadioBtn.checked ? GlobalColors.accentColor : "grey"
border.width: Math.round(appWindow.height*0.005)
Rectangle {
anchors.fill: parent
visible: control.checked
color: myRadioBtn.checked ? GlobalColors.accentColor : "grey"
radius: Math.round(appWindow.height*0.03)
anchors.margins: Math.round(appWindow.height*0.01)
}
}
label: Text {
anchors.left: parent.left
anchors.leftMargin: 10
font.pixelSize: AppStyle.radioButtonLabelFontSize
text: labelString
MouseArea {
anchors.fill: parent
onClicked: myRadioBtn.clicked()
}
}
}
@@ -0,0 +1,48 @@
import QtQuick 2.4
import QtQuick.Controls 1.2
import QtQuick.Controls.Styles 1.2
import "../../js/colors.js" as GlobalColors
import "."
TextFieldStyle {
property string prefix: ""
property int prefixIndent: prefix != "" ? AppStyle.textFieldFontSize*0.33 : 0
property var myTextField
textColor: "black"
font.pixelSize: AppStyle.textFieldFontSize
background: Item { //bottom line with colored focus indicator
implicitHeight: AppStyle.textFieldFontSize + Math.round(AppStyle.textFieldFontSize*0.25)
implicitWidth: myTextField.width
Text { //prefix
visible: prefix != "" ? true : false
color: "black"
font.pixelSize: AppStyle.textFieldFontSize
text: prefix
anchors.left: parent.left
anchors.leftMargin: -prefixIndent
anchors.bottom: parent.bottom
anchors.bottomMargin: Math.round(AppStyle.appHeight*0.008)
}
Rectangle {
color: GlobalColors.accentColor
opacity: myTextField.activeFocus ? 0.8 : 0
anchors.bottom: parent.bottom
anchors.left: parent.left
anchors.leftMargin: - prefixIndent
width: myTextField.width + prefixIndent
height: Math.round(AppStyle.appHeight*0.005)
}
Rectangle {
color: "black"
opacity: myTextField.activeFocus ? 0.6 : 0.4
anchors.bottom: parent.bottom
anchors.bottomMargin: Math.round(AppStyle.appHeight*0.005)
anchors.left: parent.left
anchors.leftMargin: - prefixIndent
width: myTextField.width + prefixIndent
height: Math.round(AppStyle.appHeight*0.005)
}
}
}
+1
View File
@@ -0,0 +1 @@
singleton AppStyle AppStyle.qml
+156
View File
@@ -0,0 +1,156 @@
#include "createlocalgameviewimpl.h"
#include "startviewimpl.h"
#include "configfile.h"
#include "mylistviewitemdata.h"
#include "gamedata.h"
#include <QtQml>
CreateLocalGameViewImpl::CreateLocalGameViewImpl(QObject *parent, QQmlApplicationEngine *e, boost::shared_ptr<ConfigFile> c, StartViewImpl *s )
: QObject(parent) ,myQmlEngine(e), myConfig(c), myStartView(s)
{
//Build the listView data structure
MyListViewItemData *item = NULL;
//ComboBox number of players
item = new MyListViewItemData;
item->setMyId("comboBox_NumberOfPlayers");
item->setMyTitle(tr("Number of players"));
item->setMyType("ComboBox");
const int n = 9;
for (int i = 10; i > (10-n); --i) item->appendToMyValuesList(QString::number(i));
item->setMyValueIsIndex(false);
myListData.append(item);
//SpinBox start cash-
item = new MyListViewItemData;
item->setMyId("spinBox_StartCash");
item->setMyTitle(tr("Start cash"));
item->setMyType("SpinBox");
item->setMyMaxValue("1000000");
item->setMyMinValue("1000");
item->setMyPrefix("$");
myListData.append(item);
//SpinBox start blind
item = new MyListViewItemData;
item->setMyId("spinBox_FirstSmallBlind");
item->setMyTitle(tr("First small blind"));
item->setMyType("SpinBox");
item->setMyMaxValue("20000");
item->setMyMinValue("5");
item->setMyPrefix("$");
myListData.append(item);
//Blinds raise interval selector
item = new MyListViewItemData;
item->setMyId("selector_BlindsRaiseInterval");
item->setMyTitle(tr("Blinds raise interval"));
item->setMyType("BlindsRaiseInterval");
myListData.append(item);
//Blinds raise mode selector
item = new MyListViewItemData;
item->setMyId("selector_BlindsRaiseMode");
item->setMyTitle(tr("Blinds raise mode"));
item->setMyType("BlindsRaiseMode");
myListData.append(item);
//ComboBox game speed
item = new MyListViewItemData;
item->setMyId("comboBox_GameSpeed");
item->setMyTitle(tr("Game speed"));
item->setMyType("ComboBox");
const int m = 11;
for (int i = 11; i > (11-m); --i) item->appendToMyValuesList(QString::number(i));
item->setMyValueIsIndex(false);
myListData.append(item);
myQmlEngine->rootContext()->setContextProperty("CreateLocalGameViewData", QVariant::fromValue(myListData));
}
CreateLocalGameViewImpl::~CreateLocalGameViewImpl()
{
}
MyListViewItemData* CreateLocalGameViewImpl::listItem(QString id)
{
for (int i = 0; i < myListData.size(); ++i) {
if (static_cast<MyListViewItemData*>(myListData.at(i))->myId() == id)
return static_cast<MyListViewItemData*>(myListData.at(i));
}
qDebug("ERROR: listItem in createLocalGameViewImpl could not be found");
return NULL;
}
void CreateLocalGameViewImpl::readConfigValues()
{
listItem("comboBox_NumberOfPlayers")->setMyValue(QString::number(myConfig->readConfigInt("NumberOfPlayers")));
listItem("spinBox_StartCash")->setMyValue(QString::number(myConfig->readConfigInt("StartCash")));
listItem("spinBox_FirstSmallBlind")->setMyValue(QString::number(myConfig->readConfigInt("FirstSmallBlind")));
listItem("selector_BlindsRaiseInterval")->setMyRaiseOnHandsType(QString::number(myConfig->readConfigInt("RaiseBlindsAtHands")));
listItem("selector_BlindsRaiseInterval")->setMyRaiseOnHandsInterval(QString::number(myConfig->readConfigInt("RaiseSmallBlindEveryHands")));
listItem("selector_BlindsRaiseInterval")->setMyRaiseOnMinutesInterval(QString::number(myConfig->readConfigInt("RaiseSmallBlindEveryMinutes")));
listItem("selector_BlindsRaiseMode")->setMyAlwaysDoubleBlinds(QString::number(myConfig->readConfigInt("AlwaysDoubleBlinds")));
std::list<int> myList = myConfig->readConfigIntList("ManualBlindsList");
std::list<int>::iterator it1;
listItem("selector_BlindsRaiseMode")->clearMyManualBlindsList();
for(it1= myList.begin(); it1 != myList.end(); ++it1) {
listItem("selector_BlindsRaiseMode")->appendToMyManualBlindsList(QString::number(*it1));
}
listItem("selector_BlindsRaiseMode")->setMyAfterMBAlwaysDoubleBlinds(QString::number(myConfig->readConfigInt("AfterMBAlwaysDoubleBlinds")));
listItem("selector_BlindsRaiseMode")->setMyAfterMBAlwaysRaiseAbout(QString::number(myConfig->readConfigInt("AfterMBAlwaysRaiseAbout")));
listItem("selector_BlindsRaiseMode")->setMyAfterMBAlwaysRaiseValue(QString::number(myConfig->readConfigInt("AfterMBAlwaysRaiseValue")));
listItem("selector_BlindsRaiseMode")->setMyAfterMBStayAtLastBlind(QString::number(myConfig->readConfigInt("AfterMBStayAtLastBlind")));
listItem("comboBox_GameSpeed")->setMyValue(QString::number(myConfig->readConfigInt("GameSpeed")));
}
void CreateLocalGameViewImpl::startGame()
{
qDebug() << "Start Game from CreateLocalGameViewImpl:";
qDebug() << "Number of players: " << listItem("comboBox_NumberOfPlayers")->myValue();
GameData gameData;
gameData.maxNumberOfPlayers = listItem("comboBox_NumberOfPlayers")->myValue().toInt();
gameData.startMoney = listItem("spinBox_StartCash")->myValue().toInt();
gameData.firstSmallBlind = listItem("spinBox_FirstSmallBlind")->myValue().toInt();
if(listItem("selector_BlindsRaiseInterval")->myRaiseOnHandsType() == "1") {
gameData.raiseIntervalMode = RAISE_ON_HANDNUMBER;
gameData.raiseSmallBlindEveryHandsValue = listItem("selector_BlindsRaiseInterval")->myRaiseOnHandsInterval().toInt();
} else {
gameData.raiseIntervalMode = RAISE_ON_MINUTES;
gameData.raiseSmallBlindEveryMinutesValue = listItem("selector_BlindsRaiseInterval")->myRaiseOnMinutesInterval().toInt();
}
if(listItem("selector_BlindsRaiseMode")->myAlwaysDoubleBlinds() == "1") {
gameData.raiseMode = DOUBLE_BLINDS;
} else {
gameData.raiseMode = MANUAL_BLINDS_ORDER;
std::list<int> tempBlindList;
int i;
bool ok = true;
for(i = 0; i < listItem("selector_BlindsRaiseMode")->myManualBlindsList().count(); i++) {
tempBlindList.push_back(listItem("selector_BlindsRaiseMode")->myManualBlindsList().at(i).toInt());
}
gameData.manualBlindsList = tempBlindList;
if(listItem("selector_BlindsRaiseMode")->myAfterMBAlwaysDoubleBlinds() == "1") {
gameData.afterManualBlindsMode = AFTERMB_DOUBLE_BLINDS;
} else {
if(listItem("selector_BlindsRaiseMode")->myAfterMBAlwaysRaiseAbout() == "1") {
gameData.afterManualBlindsMode = AFTERMB_RAISE_ABOUT;
gameData.afterMBAlwaysRaiseValue = listItem("selector_BlindsRaiseMode")->myAfterMBAlwaysRaiseValue().toInt();
} else {
gameData.afterManualBlindsMode = AFTERMB_STAY_AT_LAST_BLIND;
}
}
}
gameData.guiSpeed = listItem("comboBox_GameSpeed")->myValue().toInt();
gameData.delayBetweenHandsSec = 7;
gameData.playerActionTimeoutSec = 20;
myStartView->startLocalGame(gameData);
}
+34
View File
@@ -0,0 +1,34 @@
#ifndef CREATELOCALGAMEVIEWIMPL_H
#define CREATELOCALGAMEVIEWIMPL_H
#include "boost/shared_ptr.hpp"
#include <QtCore>
#include <QQmlListProperty>
#include <QQmlApplicationEngine>
class ConfigFile;
class MyListViewItemData;
class StartViewImpl;
class CreateLocalGameViewImpl : public QObject
{
Q_OBJECT
public:
Q_INVOKABLE void readConfigValues();
Q_INVOKABLE void startGame();
CreateLocalGameViewImpl(QObject *parent, QQmlApplicationEngine *engine, boost::shared_ptr<ConfigFile>, StartViewImpl*);
~CreateLocalGameViewImpl();
MyListViewItemData* listItem(QString id);
signals:
public slots:
private:
QQmlApplicationEngine *myQmlEngine;
QList<QObject*> myListData;
boost::shared_ptr<ConfigFile> myConfig;
StartViewImpl *myStartView;
};
#endif // CREATELOCALGAMEVIEWIMPL_H
+371
View File
@@ -0,0 +1,371 @@
#ifndef MYLISTVIEWITEMDATA_H
#define MYLISTVIEWITEMDATA_H
#include <QObject>
#include <QQmlListProperty>
class MyListViewItemData : public QObject
{
Q_OBJECT
Q_PROPERTY(QString myId READ myId WRITE setMyId NOTIFY myIdChanged)
Q_PROPERTY(QString myTitle READ myTitle WRITE setMyTitle NOTIFY myTitleChanged)
Q_PROPERTY(QString myType READ myType WRITE setMyType NOTIFY myTypeChanged)
Q_PROPERTY(QString myValue READ myValue WRITE setMyValue NOTIFY myValueChanged)
//ComboBox special
Q_PROPERTY(QStringList myValuesList READ myValuesList WRITE setMyValuesList NOTIFY myValuesListChanged)
Q_PROPERTY(bool myValueIsIndex READ myValueIsIndex WRITE setMyValueIsIndex NOTIFY myValueIsIndexChanged)
//SpinBox special
Q_PROPERTY(QString myMaxValue READ myMaxValue WRITE setMyMaxValue NOTIFY myMaxValueChanged)
Q_PROPERTY(QString myMinValue READ myMinValue WRITE setMyMinValue NOTIFY myMinValueChanged)
Q_PROPERTY(QString myPrefix READ myPrefix WRITE setMyPrefix NOTIFY myPrefixChanged)
//BlindsRaiseInterval-Selector special
Q_PROPERTY(QString myRaiseOnHandsType READ myRaiseOnHandsType WRITE setMyRaiseOnHandsType NOTIFY myRaiseOnHandsTypeChanged)
Q_PROPERTY(QString myRaiseOnHandsInterval READ myRaiseOnHandsInterval WRITE setMyRaiseOnHandsInterval NOTIFY myRaiseOnHandsIntervalChanged)
Q_PROPERTY(QString myRaiseOnMinutesInterval READ myRaiseOnMinutesInterval WRITE setMyRaiseOnMinutesInterval NOTIFY myRaiseOnMinutesIntervalChanged)
//BlindsRaiseMode-Selector special
Q_PROPERTY(QString myAlwaysDoubleBlinds READ myAlwaysDoubleBlinds WRITE setMyAlwaysDoubleBlinds NOTIFY myAlwaysDoubleBlindsChanged)
Q_PROPERTY(QStringList myManualBlindsList READ myManualBlindsList WRITE setMyManualBlindsList NOTIFY myManualBlindsListChanged)
Q_PROPERTY(QString myAfterMBAlwaysDoubleBlinds READ myAfterMBAlwaysDoubleBlinds WRITE setMyAfterMBAlwaysDoubleBlinds NOTIFY myAfterMBAlwaysDoubleBlindsChanged)
Q_PROPERTY(QString myAfterMBAlwaysRaiseAbout READ myAfterMBAlwaysRaiseAbout WRITE setMyAfterMBAlwaysRaiseAbout NOTIFY myAfterMBAlwaysRaiseAboutChanged)
Q_PROPERTY(QString myAfterMBAlwaysRaiseValue READ myAfterMBAlwaysRaiseValue WRITE setMyAfterMBAlwaysRaiseValue NOTIFY myAfterMBAlwaysRaiseValueChanged)
Q_PROPERTY(QString myAfterMBStayAtLastBlind READ myAfterMBStayAtLastBlind WRITE setMyAfterMBStayAtLastBlind NOTIFY myAfterMBStayAtLastBlindChanged)
QString m_myId;
QString m_myTitle;
QString m_myType;
QString m_myValue;
bool m_myValueIsIndex;
QString m_myMaxValue;
QString m_myMinValue;
QString m_myPrefix;
QString m_myRaiseOnHandsType;
QString m_myRaiseOnHandsInterval;
QString m_myRaiseOnMinutesInterval;
QString m_myAlwaysDoubleBlinds;
QString m_myAfterMBAlwaysDoubleBlinds;
QString m_myAfterMBAlwaysRaiseAbout;
QString m_myAfterMBStayAtLastBlind;
QString m_myAfterMBAlwaysRaiseValue;
QStringList m_myManualBlindsList;
QStringList m_myValuesList;
public:
inline MyListViewItemData(QObject *parent = 0) : QObject(parent) {}
inline ~MyListViewItemData() {}
QString myId() const
{
return m_myId;
}
QString myTitle() const
{
return m_myTitle;
}
QString myType() const
{
return m_myType;
}
QString myValue() const
{
return m_myValue;
}
bool myValueIsIndex() const
{
return m_myValueIsIndex;
}
QString myMaxValue() const
{
return m_myMaxValue;
}
QString myMinValue() const
{
return m_myMinValue;
}
QString myPrefix() const
{
return m_myPrefix;
}
QString myRaiseOnHandsType() const
{
return m_myRaiseOnHandsType;
}
QString myRaiseOnHandsInterval() const
{
return m_myRaiseOnHandsInterval;
}
QString myRaiseOnMinutesInterval() const
{
return m_myRaiseOnMinutesInterval;
}
QString myAlwaysDoubleBlinds() const
{
return m_myAlwaysDoubleBlinds;
}
QString myAfterMBAlwaysDoubleBlinds() const
{
return m_myAfterMBAlwaysDoubleBlinds;
}
QString myAfterMBAlwaysRaiseAbout() const
{
return m_myAfterMBAlwaysRaiseAbout;
}
QString myAfterMBStayAtLastBlind() const
{
return m_myAfterMBStayAtLastBlind;
}
QString myAfterMBAlwaysRaiseValue() const
{
return m_myAfterMBAlwaysRaiseValue;
}
QStringList myManualBlindsList() const
{
return m_myManualBlindsList;
}
void appendToMyManualBlindsList(QString str)
{
m_myManualBlindsList.append(str);
}
void clearMyManualBlindsList()
{
m_myManualBlindsList.clear();
}
QStringList myValuesList() const
{
return m_myValuesList;
}
void appendToMyValuesList(QString str)
{
m_myValuesList.append(str);
}
void clearMyValuesList()
{
m_myValuesList.clear();
}
signals:
void myIdChanged(QString myId);
void myTitleChanged(QString myTitle);
void myTypeChanged(QString myType);
void myValueChanged(QString myValue);
void myValueIsIndexChanged(bool myValueIsIndex);
void myMaxValueChanged(QString myMaxValue);
void myMinValueChanged(QString myMinValue);
void myPrefixChanged(QString myPrefix);
void myRaiseOnHandsTypeChanged(QString myRaiseOnHandsType);
void myRaiseOnHandsIntervalChanged(QString myRaiseOnHandsInterval);
void myRaiseOnMinutesIntervalChanged(QString myRaiseOnMinutesInterval);
void myAlwaysDoubleBlindsChanged(QString myAlwaysDoubleBlinds);
void myAfterMBAlwaysDoubleBlindsChanged(QString myAfterMBAlwaysDoubleBlinds);
void myAfterMBAlwaysRaiseAboutChanged(QString myAfterMBAlwaysRaiseAbout);
void myAfterMBAlwaysRaiseValueChanged(QString myAfterMBAlwaysRaiseValue);
void myAfterMBStayAtLastBlindChanged(QString myAfterMBStayAtLastBlind);
void myManualBlindsListChanged(QStringList myManualBlindsList);
void myValuesListChanged(QStringList myValuesList);
public slots:
void setMyId(QString myId)
{
if (m_myId == myId)
return;
m_myId = myId;
emit myIdChanged(myId);
}
void setMyTitle(QString myTitle)
{
if (m_myTitle == myTitle)
return;
m_myTitle = myTitle;
emit myTitleChanged(myTitle);
}
void setMyType(QString myType)
{
if (m_myType == myType)
return;
m_myType = myType;
emit myTypeChanged(myType);
}
void setMyValue(QString myValue)
{
if (m_myValue == myValue)
return;
m_myValue = myValue;
emit myValueChanged(myValue);
}
void setMyValueIsIndex(bool myValueIsIndex)
{
if (m_myValueIsIndex == myValueIsIndex)
return;
m_myValueIsIndex = myValueIsIndex;
emit myValueIsIndexChanged(myValueIsIndex);
}
void setMyMaxValue(QString myMaxValue)
{
if (m_myMaxValue == myMaxValue)
return;
m_myMaxValue = myMaxValue;
emit myMaxValueChanged(myMaxValue);
}
void setMyMinValue(QString myMinValue)
{
if (m_myMinValue == myMinValue)
return;
m_myMinValue = myMinValue;
emit myMinValueChanged(myMinValue);
}
void setMyPrefix(QString myPrefix)
{
if (m_myPrefix == myPrefix)
return;
m_myPrefix = myPrefix;
emit myPrefixChanged(myPrefix);
}
void setMyRaiseOnHandsType(QString myRaiseOnHandsType)
{
if (m_myRaiseOnHandsType == myRaiseOnHandsType)
return;
m_myRaiseOnHandsType = myRaiseOnHandsType;
emit myRaiseOnHandsTypeChanged(myRaiseOnHandsType);
}
void setMyRaiseOnHandsInterval(QString myRaiseOnHandsInterval)
{
if (m_myRaiseOnHandsInterval == myRaiseOnHandsInterval)
return;
m_myRaiseOnHandsInterval = myRaiseOnHandsInterval;
emit myRaiseOnHandsIntervalChanged(myRaiseOnHandsInterval);
}
void setMyRaiseOnMinutesInterval(QString myRaiseOnMinutesInterval)
{
if (m_myRaiseOnMinutesInterval == myRaiseOnMinutesInterval)
return;
m_myRaiseOnMinutesInterval = myRaiseOnMinutesInterval;
emit myRaiseOnMinutesIntervalChanged(myRaiseOnMinutesInterval);
}
void setMyAlwaysDoubleBlinds(QString myAlwaysDoubleBlinds)
{
if (m_myAlwaysDoubleBlinds == myAlwaysDoubleBlinds)
return;
m_myAlwaysDoubleBlinds = myAlwaysDoubleBlinds;
emit myAlwaysDoubleBlindsChanged(myAlwaysDoubleBlinds);
}
void setMyAfterMBAlwaysDoubleBlinds(QString myAfterMBAlwaysDoubleBlinds)
{
if (m_myAfterMBAlwaysDoubleBlinds == myAfterMBAlwaysDoubleBlinds)
return;
m_myAfterMBAlwaysDoubleBlinds = myAfterMBAlwaysDoubleBlinds;
emit myAfterMBAlwaysDoubleBlindsChanged(myAfterMBAlwaysDoubleBlinds);
}
void setMyAfterMBAlwaysRaiseAbout(QString myAfterMBAlwaysRaiseAbout)
{
if (m_myAfterMBAlwaysRaiseAbout == myAfterMBAlwaysRaiseAbout)
return;
m_myAfterMBAlwaysRaiseAbout = myAfterMBAlwaysRaiseAbout;
emit myAfterMBAlwaysRaiseAboutChanged(myAfterMBAlwaysRaiseAbout);
}
void setMyAfterMBAlwaysRaiseValue(QString myAfterMBAlwaysRaiseValue)
{
if (m_myAfterMBAlwaysRaiseValue == myAfterMBAlwaysRaiseValue)
return;
m_myAfterMBAlwaysRaiseValue = myAfterMBAlwaysRaiseValue;
emit myAfterMBAlwaysRaiseValueChanged(myAfterMBAlwaysRaiseValue);
} void setMyAfterMBStayAtLastBlind(QString myAfterMBStayAtLastBlind)
{
if (m_myAfterMBStayAtLastBlind == myAfterMBStayAtLastBlind)
return;
m_myAfterMBStayAtLastBlind = myAfterMBStayAtLastBlind;
emit myAfterMBStayAtLastBlindChanged(myAfterMBStayAtLastBlind);
}
void setMyManualBlindsList(QStringList myManualBlindsList)
{
if (m_myManualBlindsList == myManualBlindsList)
return;
m_myManualBlindsList = myManualBlindsList;
emit myManualBlindsListChanged(myManualBlindsList);
}
void setMyValuesList(QStringList myValuesList)
{
if (m_myValuesList == myValuesList)
return;
m_myValuesList = myValuesList;
emit myValuesListChanged(myValuesList);
}
};
#endif // MYLISTVIEWITEMDATA_H
+43
View File
@@ -0,0 +1,43 @@
#include "qmlconfig.h"
#include "configfile.h"
QmlConfig::QmlConfig(boost::shared_ptr<ConfigFile> c)
:QObject(), myConfig(c)
{
}
QmlConfig::~QmlConfig() {}
QmlConfig::QmlConfig(const QmlConfig&) :QObject() {}
QString QmlConfig::readConfigString(QString varName) {
return QString::fromUtf8(myConfig->readConfigString(varName.toStdString()).c_str());
}
QStringList QmlConfig::readConfigStringList(QString listName)
{
std::list<std::string> myList = myConfig->readConfigStringList(listName.toStdString());
std::list<std::string>::iterator it1;
QStringList returnList;
for(it1= myList.begin(); it1 != myList.end(); ++it1) {
returnList.append(QString::fromStdString(*it1));
}
return returnList;
}
QString QmlConfig::readConfigIntString(QString varName) {
return QString::number(myConfig->readConfigInt(varName.toStdString()));
}
QStringList QmlConfig::readConfigIntStringList(QString listName)
{
std::list<int> myList = myConfig->readConfigIntList(listName.toStdString());
std::list<int>::iterator it1;
QStringList returnList;
for(it1= myList.begin(); it1 != myList.end(); ++it1) {
returnList.append(QString::number(*it1,10));
}
return returnList;
}
+26
View File
@@ -0,0 +1,26 @@
#ifndef QMLCONFIG_H
#define QMLCONFIG_H
#include <QtCore>
#include <boost/shared_ptr.hpp>
class ConfigFile;
class QmlConfig: public QObject
{
Q_OBJECT
public:
Q_INVOKABLE QString readConfigString(QString);
Q_INVOKABLE QStringList readConfigStringList(QString);
Q_INVOKABLE QString readConfigIntString(QString);
Q_INVOKABLE QStringList readConfigIntStringList(QString);
QmlConfig(boost::shared_ptr<ConfigFile>);
~QmlConfig();
QmlConfig(const QmlConfig&);
private:
boost::shared_ptr<ConfigFile> myConfig;
};
#endif // QMLCONFIG_H
+42
View File
@@ -0,0 +1,42 @@
#include <QtCore>
#include <QtQml>
#include <QQmlApplicationEngine>
#include <QQmlContext>
#include <configfile.h>
#include "qmlconfig.h"
#include "qmlwrapper.h"
#include "startviewimpl.h"
#include "createlocalgameviewimpl.h"
QmlWrapper::QmlWrapper(boost::shared_ptr<ConfigFile> c)
:QObject(), myConfig(c)
{
myQmlEngine = new QQmlApplicationEngine;
myQmlConfig = new QmlConfig(myConfig);
//TODO create Session and Log here
myStartViewImpl = new StartViewImpl(this);
myCreateLocalGameViewImpl = new CreateLocalGameViewImpl(this, myQmlEngine, myConfig, myStartViewImpl);
//Add c++ content to QML here
myQmlEngine->rootContext()->setContextProperty("Config", myQmlConfig);
myQmlEngine->rootContext()->setContextProperty("StartViewImpl", myStartViewImpl);
myQmlEngine->rootContext()->setContextProperty("CreateLocalGameViewImpl", myCreateLocalGameViewImpl);
myQmlEngine->load(QUrl(QStringLiteral("qrc:/main.qml")));
}
QmlWrapper::~QmlWrapper()
{
myQmlEngine->deleteLater();
}
QmlWrapper::QmlWrapper(const QmlWrapper&)
:QObject()
{
}
+30
View File
@@ -0,0 +1,30 @@
#ifndef QMLWRAPPER_H
#define QMLWRAPPER_H
#include <QtCore>
#include "boost/shared_ptr.hpp"
class QQmlApplicationEngine;
class ConfigFile;
class QmlConfig;
class CreateLocalGameViewImpl;
class StartViewImpl;
class QmlWrapper: public QObject
{
Q_OBJECT
public:
QmlWrapper(boost::shared_ptr<ConfigFile>);
~QmlWrapper();
QmlWrapper(const QmlWrapper&);
public slots:
private:
QQmlApplicationEngine *myQmlEngine;
boost::shared_ptr<ConfigFile> myConfig;
QmlConfig *myQmlConfig;
CreateLocalGameViewImpl *myCreateLocalGameViewImpl;
StartViewImpl *myStartViewImpl;
};
#endif // QMLWRAPPER_H
+54
View File
@@ -0,0 +1,54 @@
#include "startviewimpl.h"
#include "mylistviewitemdata.h"
#include "gamedata.h"
StartViewImpl::StartViewImpl(QObject *parent) : QObject(parent)
{
}
StartViewImpl::~StartViewImpl()
{
}
void StartViewImpl::startLocalGame(GameData &gd)
{
// // Stop local game.
// myGuiInterface->getMyW()->stopTimer();
// Frage 1. Was ist nochmal ServerGuiInterface? Wofür? Was macht es?
// if (!myServerGuiInterface) {
// // Create pseudo Gui Wrapper for the server.
// myServerGuiInterface.reset(new ServerGuiWrapper(myConfig, mySession->getGui(), mySession->getGui(), mySession->getGui()));
// {
// boost::shared_ptr<Session> session(new Session(myServerGuiInterface.get(), myConfig, 0));
// session->init(mySession->getAvatarManager());
// myServerGuiInterface->setSession(session);
// }
// }
// // Terminate existing network games.
// mySession->terminateNetworkClient();
// myServerGuiInterface->getSession()->terminateNetworkServer();
// Frage 2. Warum an dieser Stelle die StartView-Session an Lobby und StartNetworkDialog?
// myGameLobbyDialog->setSession(getSession());
// myStartNetworkGameDialog->setSession(getSession());
// myServerGuiInterface->getSession()->startNetworkServer(false,true);
// mySession->startNetworkClientForLocalServer(gd);
// myGuiInterface->getMyW()->show();
// myGuiInterface->getMyW()->networkGameModification();
// assert(getSession());
// getSession()->sendStartEvent(true);
}
+24
View File
@@ -0,0 +1,24 @@
#ifndef STARTVIEWIMPL_H
#define STARTVIEWIMPL_H
#include <QtCore>
class CreateLocalGameViewImpl;
class GameData;
class StartViewImpl : public QObject
{
Q_OBJECT
public:
StartViewImpl(QObject *parent = 0);
~StartViewImpl();
signals:
public slots:
Q_INVOKABLE void startLocalGame(GameData &gd);
private:
};
#endif // STARTVIEWIMPL_H

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