Skip to content
GitLab
Menu
Projects
Groups
Snippets
/
Help
Help
Support
Community forum
Keyboard shortcuts
?
Submit feedback
Contribute to GitLab
Sign in / Register
Toggle navigation
Menu
Open sidebar
Donald Haase
Cockatrice
Commits
69407072
Commit
69407072
authored
Nov 29, 2009
by
Max-Wilhelm Bruker
Browse files
restructured protocol code
parent
122f8ea9
Changes
32
Expand all
Hide whitespace changes
Inline
Side-by-side
cockatrice/cockatrice.pro
View file @
69407072
...
@@ -50,6 +50,7 @@ HEADERS += src/counter.h \
...
@@ -50,6 +50,7 @@ HEADERS += src/counter.h \
src
/
remotedecklist_treewidget
.
h
\
src
/
remotedecklist_treewidget
.
h
\
src
/
deckview
.
h
\
src
/
deckview
.
h
\
src
/
playerlistwidget
.
h
\
src
/
playerlistwidget
.
h
\
..
/
common
/
serializable_item
.
h
\
..
/
common
/
decklist
.
h
\
..
/
common
/
decklist
.
h
\
..
/
common
/
protocol
.
h
\
..
/
common
/
protocol
.
h
\
..
/
common
/
protocol_items
.
h
\
..
/
common
/
protocol_items
.
h
\
...
@@ -98,6 +99,7 @@ SOURCES += src/counter.cpp \
...
@@ -98,6 +99,7 @@ SOURCES += src/counter.cpp \
src
/
remotedecklist_treewidget
.
cpp
\
src
/
remotedecklist_treewidget
.
cpp
\
src
/
deckview
.
cpp
\
src
/
deckview
.
cpp
\
src
/
playerlistwidget
.
cpp
\
src
/
playerlistwidget
.
cpp
\
..
/
common
/
serializable_item
.
cpp
\
..
/
common
/
decklist
.
cpp
\
..
/
common
/
decklist
.
cpp
\
..
/
common
/
protocol
.
cpp
\
..
/
common
/
protocol
.
cpp
\
..
/
common
/
protocol_items
.
cpp
\
..
/
common
/
protocol_items
.
cpp
\
...
...
cockatrice/src/client.cpp
View file @
69407072
...
@@ -6,7 +6,7 @@
...
@@ -6,7 +6,7 @@
#include
"protocol_items.h"
#include
"protocol_items.h"
Client
::
Client
(
QObject
*
parent
)
Client
::
Client
(
QObject
*
parent
)
:
QObject
(
parent
),
current
Item
(
0
),
status
(
StatusDisconnected
)
:
QObject
(
parent
),
topLevel
Item
(
0
),
status
(
StatusDisconnected
)
{
{
ProtocolItem
::
initializeHash
();
ProtocolItem
::
initializeHash
();
...
@@ -58,44 +58,31 @@ void Client::readData()
...
@@ -58,44 +58,31 @@ void Client::readData()
qDebug
()
<<
data
;
qDebug
()
<<
data
;
xmlReader
->
addData
(
data
);
xmlReader
->
addData
(
data
);
if
(
currentItem
)
{
if
(
topLevelItem
)
if
(
!
currentItem
->
read
(
xmlReader
))
topLevelItem
->
read
(
xmlReader
);
return
;
else
{
currentItem
=
0
;
while
(
!
xmlReader
->
atEnd
())
{
}
xmlReader
->
readNext
();
while
(
!
xmlReader
->
atEnd
())
{
if
(
xmlReader
->
isStartElement
()
&&
(
xmlReader
->
name
().
toString
()
==
"cockatrice_server_stream"
))
{
xmlReader
->
readNext
();
if
(
xmlReader
->
isStartElement
())
{
QString
itemType
=
xmlReader
->
name
().
toString
();
if
(
itemType
==
"cockatrice_server_stream"
)
{
int
serverVersion
=
xmlReader
->
attributes
().
value
(
"version"
).
toString
().
toInt
();
int
serverVersion
=
xmlReader
->
attributes
().
value
(
"version"
).
toString
().
toInt
();
if
(
serverVersion
!=
ProtocolItem
::
protocolVersion
)
{
if
(
serverVersion
!=
ProtocolItem
::
protocolVersion
)
{
emit
protocolVersionMismatch
(
ProtocolItem
::
protocolVersion
,
serverVersion
);
emit
protocolVersionMismatch
(
ProtocolItem
::
protocolVersion
,
serverVersion
);
disconnectFromServer
();
disconnectFromServer
();
return
;
return
;
}
else
{
xmlWriter
->
writeStartDocument
();
xmlWriter
->
writeStartElement
(
"cockatrice_client_stream"
);
xmlWriter
->
writeAttribute
(
"version"
,
QString
::
number
(
ProtocolItem
::
protocolVersion
));
setStatus
(
StatusLoggingIn
);
Command_Login
*
cmdLogin
=
new
Command_Login
(
userName
,
password
);
connect
(
cmdLogin
,
SIGNAL
(
finished
(
ResponseCode
)),
this
,
SLOT
(
loginResponse
(
ResponseCode
)));
sendCommand
(
cmdLogin
);
continue
;
}
}
}
xmlWriter
->
writeStartDocument
();
QString
itemName
=
xmlReader
->
attributes
().
value
(
"name"
).
toString
();
xmlWriter
->
writeStartElement
(
"cockatrice_client_stream"
);
qDebug
()
<<
"parseXml: startElement: "
<<
"type ="
<<
itemType
<<
", name ="
<<
itemName
;
xmlWriter
->
writeAttribute
(
"version"
,
QString
::
number
(
ProtocolItem
::
protocolVersion
));
currentItem
=
ProtocolItem
::
getNewItem
(
itemType
+
itemName
);
if
(
!
currentItem
)
topLevelItem
=
new
TopLevelProtocolItem
;
continue
;
connect
(
topLevelItem
,
SIGNAL
(
protocolItemReceived
(
ProtocolItem
*
)),
this
,
SLOT
(
processProtocolItem
(
ProtocolItem
*
)));
if
(
!
currentItem
->
read
(
xmlReader
))
return
;
setStatus
(
StatusLoggingIn
);
else
{
Command_Login
*
cmdLogin
=
new
Command_Login
(
userName
,
password
);
processProtocolItem
(
currentItem
);
connect
(
cmdLogin
,
SIGNAL
(
finished
(
ResponseCode
)),
this
,
SLOT
(
loginResponse
(
ResponseCode
)));
currentItem
=
0
;
sendCommand
(
cmdLogin
);
topLevelItem
->
read
(
xmlReader
);
}
}
}
}
}
}
...
@@ -171,7 +158,9 @@ void Client::connectToServer(const QString &hostname, unsigned int port, const Q
...
@@ -171,7 +158,9 @@ void Client::connectToServer(const QString &hostname, unsigned int port, const Q
void
Client
::
disconnectFromServer
()
void
Client
::
disconnectFromServer
()
{
{
currentItem
=
0
;
delete
topLevelItem
;
topLevelItem
=
0
;
xmlReader
->
clear
();
xmlReader
->
clear
();
timer
->
stop
();
timer
->
stop
();
...
...
cockatrice/src/client.h
View file @
69407072
...
@@ -14,6 +14,7 @@ class QXmlStreamWriter;
...
@@ -14,6 +14,7 @@ class QXmlStreamWriter;
class
ProtocolItem
;
class
ProtocolItem
;
class
ProtocolResponse
;
class
ProtocolResponse
;
class
TopLevelProtocolItem
;
class
ChatEvent
;
class
ChatEvent
;
class
GameEvent
;
class
GameEvent
;
class
Event_ListGames
;
class
Event_ListGames
;
...
@@ -56,6 +57,7 @@ private slots:
...
@@ -56,6 +57,7 @@ private slots:
void
slotSocketError
(
QAbstractSocket
::
SocketError
error
);
void
slotSocketError
(
QAbstractSocket
::
SocketError
error
);
void
ping
();
void
ping
();
void
loginResponse
(
ResponseCode
response
);
void
loginResponse
(
ResponseCode
response
);
void
processProtocolItem
(
ProtocolItem
*
item
);
private:
private:
static
const
int
maxTimeout
=
10
;
static
const
int
maxTimeout
=
10
;
...
@@ -64,11 +66,10 @@ private:
...
@@ -64,11 +66,10 @@ private:
QTcpSocket
*
socket
;
QTcpSocket
*
socket
;
QXmlStreamReader
*
xmlReader
;
QXmlStreamReader
*
xmlReader
;
QXmlStreamWriter
*
xmlWriter
;
QXmlStreamWriter
*
xmlWriter
;
ProtocolItem
*
current
Item
;
TopLevel
ProtocolItem
*
topLevel
Item
;
ClientStatus
status
;
ClientStatus
status
;
QString
userName
,
password
;
QString
userName
,
password
;
void
setStatus
(
ClientStatus
_status
);
void
setStatus
(
ClientStatus
_status
);
void
processProtocolItem
(
ProtocolItem
*
item
);
public:
public:
Client
(
QObject
*
parent
=
0
);
Client
(
QObject
*
parent
=
0
);
~
Client
();
~
Client
();
...
...
cockatrice/src/decklistmodel.cpp
View file @
69407072
...
@@ -14,7 +14,7 @@
...
@@ -14,7 +14,7 @@
DeckListModel
::
DeckListModel
(
QObject
*
parent
)
DeckListModel
::
DeckListModel
(
QObject
*
parent
)
:
QAbstractItemModel
(
parent
)
:
QAbstractItemModel
(
parent
)
{
{
deckList
=
new
DeckList
(
this
)
;
deckList
=
new
DeckList
;
connect
(
deckList
,
SIGNAL
(
deckLoaded
()),
this
,
SLOT
(
rebuildTree
()));
connect
(
deckList
,
SIGNAL
(
deckLoaded
()),
this
,
SLOT
(
rebuildTree
()));
root
=
new
InnerDecklistNode
;
root
=
new
InnerDecklistNode
;
}
}
...
@@ -22,6 +22,7 @@ DeckListModel::DeckListModel(QObject *parent)
...
@@ -22,6 +22,7 @@ DeckListModel::DeckListModel(QObject *parent)
DeckListModel
::~
DeckListModel
()
DeckListModel
::~
DeckListModel
()
{
{
delete
root
;
delete
root
;
delete
deckList
;
}
}
...
...
cockatrice/src/gamesmodel.cpp
View file @
69407072
#include
"gamesmodel.h"
#include
"gamesmodel.h"
#include
"protocol_datastructures.h"
GamesModel
::~
GamesModel
()
GamesModel
::~
GamesModel
()
{
{
if
(
!
gameList
.
isEmpty
())
{
if
(
!
gameList
.
isEmpty
())
{
beginRemoveRows
(
QModelIndex
(),
0
,
gameList
.
size
()
-
1
);
beginRemoveRows
(
QModelIndex
(),
0
,
gameList
.
size
()
-
1
);
for
(
int
i
=
0
;
i
<
gameList
.
size
();
++
i
)
delete
gameList
[
i
];
gameList
.
clear
();
gameList
.
clear
();
endRemoveRows
();
endRemoveRows
();
}
}
...
@@ -20,13 +23,13 @@ QVariant GamesModel::data(const QModelIndex &index, int role) const
...
@@ -20,13 +23,13 @@ QVariant GamesModel::data(const QModelIndex &index, int role) const
if
((
index
.
row
()
>=
gameList
.
size
())
||
(
index
.
column
()
>=
columnCount
()))
if
((
index
.
row
()
>=
gameList
.
size
())
||
(
index
.
column
()
>=
columnCount
()))
return
QVariant
();
return
QVariant
();
const
ServerGameInfo
&
g
=
gameList
[
index
.
row
()];
ServerInfo_Game
*
g
=
gameList
[
index
.
row
()];
switch
(
index
.
column
())
{
switch
(
index
.
column
())
{
case
0
:
return
g
.
getDescription
();
case
0
:
return
g
->
getDescription
();
case
1
:
return
g
.
getCreatorName
();
case
1
:
return
g
->
getCreatorName
();
case
2
:
return
g
.
getHasPassword
()
?
tr
(
"yes"
)
:
tr
(
"no"
);
case
2
:
return
g
->
getHasPassword
()
?
tr
(
"yes"
)
:
tr
(
"no"
);
case
3
:
return
QString
(
"%1/%2"
).
arg
(
g
.
getPlayerCount
()).
arg
(
g
.
getMaxPlayers
());
case
3
:
return
QString
(
"%1/%2"
).
arg
(
g
->
getPlayerCount
()).
arg
(
g
->
getMaxPlayers
());
case
4
:
return
g
.
getSpectatorsAllowed
()
?
QVariant
(
g
.
getSpectatorCount
())
:
QVariant
(
tr
(
"not allowed"
));
case
4
:
return
g
->
getSpectatorsAllowed
()
?
QVariant
(
g
->
getSpectatorCount
())
:
QVariant
(
tr
(
"not allowed"
));
default:
return
QVariant
();
default:
return
QVariant
();
}
}
}
}
...
@@ -45,30 +48,32 @@ QVariant GamesModel::headerData(int section, Qt::Orientation orientation, int ro
...
@@ -45,30 +48,32 @@ QVariant GamesModel::headerData(int section, Qt::Orientation orientation, int ro
}
}
}
}
const
ServerGameInfo
&
GamesModel
::
getGame
(
int
row
)
ServerInfo_Game
*
GamesModel
::
getGame
(
int
row
)
{
{
Q_ASSERT
(
row
<
gameList
.
size
());
Q_ASSERT
(
row
<
gameList
.
size
());
return
gameList
[
row
];
return
gameList
[
row
];
}
}
void
GamesModel
::
updateGameList
(
const
ServerGameInfo
&
game
)
void
GamesModel
::
updateGameList
(
ServerInfo_Game
*
_
game
)
{
{
ServerInfo_Game
*
game
=
new
ServerInfo_Game
(
_game
->
getGameId
(),
_game
->
getDescription
(),
_game
->
getHasPassword
(),
_game
->
getPlayerCount
(),
_game
->
getMaxPlayers
(),
_game
->
getCreatorName
(),
_game
->
getSpectatorsAllowed
(),
_game
->
getSpectatorCount
());
for
(
int
i
=
0
;
i
<
gameList
.
size
();
i
++
)
for
(
int
i
=
0
;
i
<
gameList
.
size
();
i
++
)
if
(
gameList
[
i
]
.
getGameId
()
==
game
.
getGameId
())
{
if
(
gameList
[
i
]
->
getGameId
()
==
game
->
getGameId
())
{
if
(
game
.
getPlayerCount
()
==
0
)
{
if
(
game
->
getPlayerCount
()
==
0
)
{
beginRemoveRows
(
QModelIndex
(),
i
,
i
);
beginRemoveRows
(
QModelIndex
(),
i
,
i
);
gameList
.
remov
eAt
(
i
);
delete
gameList
.
tak
eAt
(
i
);
endRemoveRows
();
endRemoveRows
();
}
else
{
}
else
{
delete
gameList
[
i
];
gameList
[
i
]
=
game
;
gameList
[
i
]
=
game
;
emit
dataChanged
(
index
(
i
,
0
),
index
(
i
,
4
));
emit
dataChanged
(
index
(
i
,
0
),
index
(
i
,
4
));
}
}
return
;
return
;
}
}
if
(
game
.
getPlayerCount
()
==
0
)
if
(
game
->
getPlayerCount
()
==
0
)
return
;
return
;
beginInsertRows
(
QModelIndex
(),
gameList
.
size
(),
gameList
.
size
());
beginInsertRows
(
QModelIndex
(),
gameList
.
size
(),
gameList
.
size
());
gameList
<<
game
;
gameList
.
append
(
game
)
;
endInsertRows
();
endInsertRows
();
}
}
...
@@ -93,8 +98,8 @@ bool GamesProxyModel::filterAcceptsRow(int sourceRow, const QModelIndex &/*sourc
...
@@ -93,8 +98,8 @@ bool GamesProxyModel::filterAcceptsRow(int sourceRow, const QModelIndex &/*sourc
if
(
!
model
)
if
(
!
model
)
return
false
;
return
false
;
const
ServerGameInfo
&
game
=
model
->
getGame
(
sourceRow
);
ServerInfo_Game
*
game
=
model
->
getGame
(
sourceRow
);
if
(
game
.
getPlayerCount
()
==
game
.
getMaxPlayers
())
if
(
game
->
getPlayerCount
()
==
game
->
getMaxPlayers
())
return
false
;
return
false
;
return
true
;
return
true
;
...
...
cockatrice/src/gamesmodel.h
View file @
69407072
...
@@ -4,7 +4,8 @@
...
@@ -4,7 +4,8 @@
#include
<QAbstractTableModel>
#include
<QAbstractTableModel>
#include
<QSortFilterProxyModel>
#include
<QSortFilterProxyModel>
#include
<QList>
#include
<QList>
#include
"protocol_datastructures.h"
class
ServerInfo_Game
;
class
GamesModel
:
public
QAbstractTableModel
{
class
GamesModel
:
public
QAbstractTableModel
{
Q_OBJECT
Q_OBJECT
...
@@ -16,10 +17,10 @@ public:
...
@@ -16,10 +17,10 @@ public:
QVariant
data
(
const
QModelIndex
&
index
,
int
role
)
const
;
QVariant
data
(
const
QModelIndex
&
index
,
int
role
)
const
;
QVariant
headerData
(
int
section
,
Qt
::
Orientation
orientation
,
int
role
=
Qt
::
DisplayRole
)
const
;
QVariant
headerData
(
int
section
,
Qt
::
Orientation
orientation
,
int
role
=
Qt
::
DisplayRole
)
const
;
const
ServerGameInfo
&
getGame
(
int
row
);
ServerInfo_Game
*
getGame
(
int
row
);
void
updateGameList
(
const
ServerGameInfo
&
game
);
void
updateGameList
(
ServerInfo_Game
*
game
);
private:
private:
QList
<
Server
Game
Info
>
gameList
;
QList
<
ServerInfo
_Game
*
>
gameList
;
};
};
class
GamesProxyModel
:
public
QSortFilterProxyModel
{
class
GamesProxyModel
:
public
QSortFilterProxyModel
{
...
...
cockatrice/src/player.cpp
View file @
69407072
...
@@ -373,7 +373,7 @@ void Player::actDrawCards()
...
@@ -373,7 +373,7 @@ void Player::actDrawCards()
void
Player
::
actUntapAll
()
void
Player
::
actUntapAll
()
{
{
// client->s
etCardAttr("table", -1, "tapped", "
false"
);
sendGameCommand
(
new
Command_S
etCardAttr
(
-
1
,
"table"
,
-
1
,
"tapped"
,
"
0"
)
);
}
}
void
Player
::
actRollDie
()
void
Player
::
actRollDie
()
...
@@ -448,12 +448,15 @@ void Player::eventRollDie(Event_RollDie *event)
...
@@ -448,12 +448,15 @@ void Player::eventRollDie(Event_RollDie *event)
emit
logRollDie
(
this
,
event
->
getSides
(),
event
->
getValue
());
emit
logRollDie
(
this
,
event
->
getSides
(),
event
->
getValue
());
}
}
void
Player
::
eventCreateArrow
(
Event_CreateArrow
*
event
)
void
Player
::
eventCreateArrow
s
(
Event_CreateArrow
s
*
event
)
{
{
ArrowItem
*
arrow
=
addArrow
(
event
->
getArrow
());
const
QList
<
ServerInfo_Arrow
*>
eventArrowList
=
event
->
getArrowList
();
if
(
!
arrow
)
for
(
int
i
=
0
;
i
<
eventArrowList
.
size
();
++
i
)
{
return
;
ArrowItem
*
arrow
=
addArrow
(
eventArrowList
[
i
]);
emit
logCreateArrow
(
this
,
arrow
->
getStartItem
()
->
getOwner
(),
arrow
->
getStartItem
()
->
getName
(),
arrow
->
getTargetItem
()
->
getOwner
(),
arrow
->
getTargetItem
()
->
getName
());
if
(
!
arrow
)
return
;
emit
logCreateArrow
(
this
,
arrow
->
getStartItem
()
->
getOwner
(),
arrow
->
getStartItem
()
->
getName
(),
arrow
->
getTargetItem
()
->
getOwner
(),
arrow
->
getTargetItem
()
->
getName
());
}
}
}
void
Player
::
eventDeleteArrow
(
Event_DeleteArrow
*
event
)
void
Player
::
eventDeleteArrow
(
Event_DeleteArrow
*
event
)
...
@@ -492,9 +495,11 @@ void Player::eventSetCardAttr(Event_SetCardAttr *event)
...
@@ -492,9 +495,11 @@ void Player::eventSetCardAttr(Event_SetCardAttr *event)
}
}
}
}
void
Player
::
eventCreateCounter
(
Event_CreateCounter
*
event
)
void
Player
::
eventCreateCounter
s
(
Event_CreateCounter
s
*
event
)
{
{
addCounter
(
event
->
getCounter
());
const
QList
<
ServerInfo_Counter
*>
&
eventCounterList
=
event
->
getCounterList
();
for
(
int
i
=
0
;
i
<
eventCounterList
.
size
();
++
i
)
addCounter
(
eventCounterList
[
i
]);
}
}
void
Player
::
eventSetCounter
(
Event_SetCounter
*
event
)
void
Player
::
eventSetCounter
(
Event_SetCounter
*
event
)
...
@@ -612,11 +617,11 @@ void Player::processGameEvent(GameEvent *event)
...
@@ -612,11 +617,11 @@ void Player::processGameEvent(GameEvent *event)
case
ItemId_Event_ReadyStart
:
eventReadyStart
(
qobject_cast
<
Event_ReadyStart
*>
(
event
));
break
;
case
ItemId_Event_ReadyStart
:
eventReadyStart
(
qobject_cast
<
Event_ReadyStart
*>
(
event
));
break
;
case
ItemId_Event_Shuffle
:
eventShuffle
(
qobject_cast
<
Event_Shuffle
*>
(
event
));
break
;
case
ItemId_Event_Shuffle
:
eventShuffle
(
qobject_cast
<
Event_Shuffle
*>
(
event
));
break
;
case
ItemId_Event_RollDie
:
eventRollDie
(
qobject_cast
<
Event_RollDie
*>
(
event
));
break
;
case
ItemId_Event_RollDie
:
eventRollDie
(
qobject_cast
<
Event_RollDie
*>
(
event
));
break
;
case
ItemId_Event_CreateArrow
:
eventCreateArrow
(
qobject_cast
<
Event_CreateArrow
*>
(
event
));
break
;
case
ItemId_Event_CreateArrow
s
:
eventCreateArrow
s
(
qobject_cast
<
Event_CreateArrow
s
*>
(
event
));
break
;
case
ItemId_Event_DeleteArrow
:
eventDeleteArrow
(
qobject_cast
<
Event_DeleteArrow
*>
(
event
));
break
;
case
ItemId_Event_DeleteArrow
:
eventDeleteArrow
(
qobject_cast
<
Event_DeleteArrow
*>
(
event
));
break
;
case
ItemId_Event_CreateToken
:
eventCreateToken
(
qobject_cast
<
Event_CreateToken
*>
(
event
));
break
;
case
ItemId_Event_CreateToken
:
eventCreateToken
(
qobject_cast
<
Event_CreateToken
*>
(
event
));
break
;
case
ItemId_Event_SetCardAttr
:
eventSetCardAttr
(
qobject_cast
<
Event_SetCardAttr
*>
(
event
));
break
;
case
ItemId_Event_SetCardAttr
:
eventSetCardAttr
(
qobject_cast
<
Event_SetCardAttr
*>
(
event
));
break
;
case
ItemId_Event_CreateCounter
:
eventCreateCounter
(
qobject_cast
<
Event_CreateCounter
*>
(
event
));
break
;
case
ItemId_Event_CreateCounter
s
:
eventCreateCounter
s
(
qobject_cast
<
Event_CreateCounter
s
*>
(
event
));
break
;
case
ItemId_Event_SetCounter
:
eventSetCounter
(
qobject_cast
<
Event_SetCounter
*>
(
event
));
break
;
case
ItemId_Event_SetCounter
:
eventSetCounter
(
qobject_cast
<
Event_SetCounter
*>
(
event
));
break
;
case
ItemId_Event_DelCounter
:
eventDelCounter
(
qobject_cast
<
Event_DelCounter
*>
(
event
));
break
;
case
ItemId_Event_DelCounter
:
eventDelCounter
(
qobject_cast
<
Event_DelCounter
*>
(
event
));
break
;
case
ItemId_Event_DumpZone
:
eventDumpZone
(
qobject_cast
<
Event_DumpZone
*>
(
event
));
break
;
case
ItemId_Event_DumpZone
:
eventDumpZone
(
qobject_cast
<
Event_DumpZone
*>
(
event
));
break
;
...
...
cockatrice/src/player.h
View file @
69407072
...
@@ -27,11 +27,11 @@ class Event_Say;
...
@@ -27,11 +27,11 @@ class Event_Say;
class
Event_ReadyStart
;
class
Event_ReadyStart
;
class
Event_Shuffle
;
class
Event_Shuffle
;
class
Event_RollDie
;
class
Event_RollDie
;
class
Event_CreateArrow
;
class
Event_CreateArrow
s
;
class
Event_DeleteArrow
;
class
Event_DeleteArrow
;
class
Event_CreateToken
;
class
Event_CreateToken
;
class
Event_SetCardAttr
;
class
Event_SetCardAttr
;
class
Event_CreateCounter
;
class
Event_CreateCounter
s
;
class
Event_SetCounter
;
class
Event_SetCounter
;
class
Event_DelCounter
;
class
Event_DelCounter
;
class
Event_DumpZone
;
class
Event_DumpZone
;
...
@@ -118,11 +118,11 @@ private:
...
@@ -118,11 +118,11 @@ private:
void
eventReadyStart
(
Event_ReadyStart
*
event
);
void
eventReadyStart
(
Event_ReadyStart
*
event
);
void
eventShuffle
(
Event_Shuffle
*
event
);
void
eventShuffle
(
Event_Shuffle
*
event
);
void
eventRollDie
(
Event_RollDie
*
event
);
void
eventRollDie
(
Event_RollDie
*
event
);
void
eventCreateArrow
(
Event_CreateArrow
*
event
);
void
eventCreateArrow
s
(
Event_CreateArrow
s
*
event
);
void
eventDeleteArrow
(
Event_DeleteArrow
*
event
);
void
eventDeleteArrow
(
Event_DeleteArrow
*
event
);
void
eventCreateToken
(
Event_CreateToken
*
event
);
void
eventCreateToken
(
Event_CreateToken
*
event
);
void
eventSetCardAttr
(
Event_SetCardAttr
*
event
);
void
eventSetCardAttr
(
Event_SetCardAttr
*
event
);
void
eventCreateCounter
(
Event_CreateCounter
*
event
);
void
eventCreateCounter
s
(
Event_CreateCounter
s
*
event
);
void
eventSetCounter
(
Event_SetCounter
*
event
);
void
eventSetCounter
(
Event_SetCounter
*
event
);
void
eventDelCounter
(
Event_DelCounter
*
event
);
void
eventDelCounter
(
Event_DelCounter
*
event
);
void
eventDumpZone
(
Event_DumpZone
*
event
);
void
eventDumpZone
(
Event_DumpZone
*
event
);
...
...
cockatrice/src/remotedecklist_treewidget.cpp
View file @
69407072
...
@@ -54,12 +54,13 @@ void RemoteDeckList_TreeWidget::addFolderToTree(DeckList_Directory *folder, QTre
...
@@ -54,12 +54,13 @@ void RemoteDeckList_TreeWidget::addFolderToTree(DeckList_Directory *folder, QTre
newItem
->
setData
(
0
,
Qt
::
UserRole
,
QString
());
newItem
->
setData
(
0
,
Qt
::
UserRole
,
QString
());
}
}
for
(
int
i
=
0
;
i
<
folder
->
size
();
++
i
)
{
const
QList
<
DeckList_TreeItem
*>
&
folderItems
=
folder
->
getTreeItems
();
DeckList_Directory
*
subFolder
=
dynamic_cast
<
DeckList_Directory
*>
(
folder
->
at
(
i
));
for
(
int
i
=
0
;
i
<
folderItems
.
size
();
++
i
)
{
DeckList_Directory
*
subFolder
=
dynamic_cast
<
DeckList_Directory
*>
(
folderItems
[
i
]);
if
(
subFolder
)
if
(
subFolder
)
addFolderToTree
(
subFolder
,
newItem
);
addFolderToTree
(
subFolder
,
newItem
);
else
else
addFileToTree
(
dynamic_cast
<
DeckList_File
*>
(
folder
->
at
(
i
)
),
newItem
);
addFileToTree
(
dynamic_cast
<
DeckList_File
*>
(
folder
Items
[
i
]
),
newItem
);
}
}
}
}
...
...
cockatrice/src/tab_chatchannel.cpp
View file @
69407072
...
@@ -51,9 +51,9 @@ void TabChatChannel::processChatEvent(ChatEvent *event)
...
@@ -51,9 +51,9 @@ void TabChatChannel::processChatEvent(ChatEvent *event)
void
TabChatChannel
::
processListPlayersEvent
(
Event_ChatListPlayers
*
event
)
void
TabChatChannel
::
processListPlayersEvent
(
Event_ChatListPlayers
*
event
)
{
{
const
QList
<
ServerChatUser
Info
>
&
players
=
event
->
getPlayerList
();
const
QList
<
Server
Info_
ChatUser
*
>
&
players
=
event
->
getPlayerList
();
for
(
int
i
=
0
;
i
<
players
.
size
();
++
i
)
for
(
int
i
=
0
;
i
<
players
.
size
();
++
i
)
playerList
->
addItem
(
players
[
i
]
.
getName
());
playerList
->
addItem
(
players
[
i
]
->
getName
());
}
}
void
TabChatChannel
::
processJoinChannelEvent
(
Event_ChatJoinChannel
*
event
)
void
TabChatChannel
::
processJoinChannelEvent
(
Event_ChatJoinChannel
*
event
)
...
...
cockatrice/src/tab_deck_storage.cpp
View file @
69407072
...
@@ -121,7 +121,6 @@ void TabDeckStorage::uploadFinished(ProtocolResponse *r)
...
@@ -121,7 +121,6 @@ void TabDeckStorage::uploadFinished(ProtocolResponse *r)
if
(
!
resp
)
if
(
!
resp
)
return
;
return
;
Command_DeckUpload
*
cmd
=
static_cast
<
Command_DeckUpload
*>
(
sender
());
Command_DeckUpload
*
cmd
=
static_cast
<
Command_DeckUpload
*>
(
sender
());
delete
cmd
->
getDeck
();
QTreeWidgetItemIterator
it
(
serverDirView
);
QTreeWidgetItemIterator
it
(
serverDirView
);
while
(
*
it
)
{
while
(
*
it
)
{
...
...
cockatrice/src/tab_game.cpp
View file @
69407072
...
@@ -324,11 +324,9 @@ void TabGame::deckSelectFinished(ProtocolResponse *r)
...
@@ -324,11 +324,9 @@ void TabGame::deckSelectFinished(ProtocolResponse *r)
Response_DeckDownload
*
resp
=
qobject_cast
<
Response_DeckDownload
*>
(
r
);
Response_DeckDownload
*
resp
=
qobject_cast
<
Response_DeckDownload
*>
(
r
);
if
(
!
resp
)
if
(
!
resp
)
return
;
return
;
Command_DeckSelect
*
cmd
=
static_cast
<
Command_DeckSelect
*>
(
sender
());
delete
cmd
->
getDeck
();
Deck_PictureCacher
::
cachePictures
(
resp
->
getDeck
(),
this
);
Deck_PictureCacher
::
cachePictures
(
resp
->
getDeck
(),
this
);
deckView
->
setDeck
(
resp
->
getDeck
());
deckView
->
setDeck
(
new
DeckList
(
resp
->
getDeck
())
)
;
}
}
void
TabGame
::
readyStart
()
void
TabGame
::
readyStart
()
...
...
cockatrice/src/tab_server.cpp
View file @
69407072
...
@@ -78,16 +78,16 @@ void GameSelector::actJoin()
...
@@ -78,16 +78,16 @@ void GameSelector::actJoin()
QModelIndex
ind
=
gameListView
->
currentIndex
();
QModelIndex
ind
=
gameListView
->
currentIndex
();
if
(
!
ind
.
isValid
())
if
(
!
ind
.
isValid
())
return
;
return
;
const
ServerGameInfo
&
game
=
gameListModel
->
getGame
(
ind
.
data
(
Qt
::
UserRole
).
toInt
());
ServerInfo_Game
*
game
=
gameListModel
->
getGame
(
ind
.
data
(
Qt
::
UserRole
).
toInt
());
QString
password
;
QString
password
;
if
(
game
.
getHasPassword
())
{
if
(
game
->
getHasPassword
())
{
bool
ok
;
bool
ok
;
password
=
QInputDialog
::
getText
(
this
,
tr
(
"Join game"
),
tr
(
"Password:"
),
QLineEdit
::
Password
,
QString
(),
&
ok
);
password
=
QInputDialog
::
getText
(
this
,
tr
(
"Join game"
),
tr
(
"Password:"
),
QLineEdit
::
Password
,
QString
(),
&
ok
);
if
(
!
ok
)
if
(
!
ok
)
return
;
return
;
}
}
Command_JoinGame
*
commandJoinGame
=
new
Command_JoinGame
(
game
.
getGameId
(),
password
,
spectator
);
Command_JoinGame
*
commandJoinGame
=
new
Command_JoinGame
(
game
->
getGameId
(),
password
,
spectator
);
connect
(
commandJoinGame
,
SIGNAL
(
finished
(
ResponseCode
)),
this
,
SLOT
(
checkResponse
(
ResponseCode
)));
connect
(
commandJoinGame
,
SIGNAL
(
finished
(
ResponseCode
)),
this
,
SLOT
(
checkResponse
(
ResponseCode
)));
client
->
sendCommand
(
commandJoinGame
);
client
->
sendCommand
(
commandJoinGame
);
...
@@ -107,7 +107,7 @@ void GameSelector::retranslateUi()
...
@@ -107,7 +107,7 @@ void GameSelector::retranslateUi()
void
GameSelector
::
processListGamesEvent
(
Event_ListGames
*
event
)
void
GameSelector
::
processListGamesEvent
(
Event_ListGames
*
event
)
{
{
const
QList
<
Server
Game
Info
>
&
gamesToUpdate
=
event
->
getGameList
();
const
QList
<
ServerInfo
_Game
*
>
&
gamesToUpdate
=
event
->
getGameList
();
for
(
int
i
=
0
;
i
<
gamesToUpdate
.
size
();
++
i
)
for
(
int
i
=
0
;
i
<
gamesToUpdate
.
size
();
++
i
)
gameListModel
->
updateGameList
(
gamesToUpdate
[
i
]);
gameListModel
->
updateGameList
(
gamesToUpdate
[
i
]);
}
}
...
@@ -148,26 +148,26 @@ void ChatChannelSelector::retranslateUi()
...
@@ -148,26 +148,26 @@ void ChatChannelSelector::retranslateUi()
void
ChatChannelSelector
::
processListChatChannelsEvent
(
Event_ListChatChannels
*
event
)
void
ChatChannelSelector
::
processListChatChannelsEvent
(
Event_ListChatChannels
*
event
)
{
{
const
QList
<
ServerChatChannel
Info
>
&
channelsToUpdate
=
event
->
getChannelList
();
const
QList
<
Server
Info_
ChatChannel
*
>
&
channelsToUpdate
=
event
->
getChannelList
();
for
(
int
i
=
0
;
i
<
channelsToUpdate
.
size
();
++
i
)
{
for
(
int
i
=
0
;
i
<
channelsToUpdate
.
size
();
++
i
)
{
const
ServerChatChannel
Info
&
channel
=
channelsToUpdate
[
i
];
Server
Info_
ChatChannel
*
channel
=
channelsToUpdate
[
i
];
for
(
int
j
=
0
;
j
<
channelList
->
topLevelItemCount
();
++
j
)
{
for
(
int
j
=
0
;
j
<
channelList
->
topLevelItemCount
();
++
j
)
{
QTreeWidgetItem
*
twi
=
channelList
->
topLevelItem
(
j
);
QTreeWidgetItem
*
twi
=
channelList
->
topLevelItem
(
j
);
if
(
twi
->
text
(
0
)
==
channel
.
getName
())
{
if
(
twi
->
text
(
0
)
==
channel
->
getName
())
{
twi
->
setText
(
1
,
channel
.
getDescription
());
twi
->
setText
(
1
,
channel
->
getDescription
());
twi
->
setText
(
2
,
QString
::
number
(
channel
.
getPlayerCount
()));
twi
->
setText
(
2
,
QString
::
number
(
channel
->
getPlayerCount
()));
return
;
return
;
}
}
}
}
QTreeWidgetItem
*
twi
=
new
QTreeWidgetItem
(
QStringList
()
<<
channel
.
getName
()
<<
channel
.
getDescription
()
<<
QString
::
number
(
channel
.
getPlayerCount
()));
QTreeWidgetItem
*
twi
=
new
QTreeWidgetItem
(
QStringList
()
<<
channel
->
getName
()
<<
channel
->
getDescription
()
<<
QString
::
number
(
channel
->
getPlayerCount
()));
twi
->
setTextAlignment
(
2
,
Qt
::
AlignRight
);
twi
->
setTextAlignment
(
2
,
Qt
::
AlignRight
);
channelList
->
addTopLevelItem
(
twi
);
channelList
->
addTopLevelItem
(
twi
);
channelList
->
resizeColumnToContents
(
0
);
channelList
->
resizeColumnToContents
(
0
);
channelList
->
resizeColumnToContents
(
1
);
channelList
->
resizeColumnToContents
(
1
);
channelList
->
resizeColumnToContents
(
2
);
channelList
->
resizeColumnToContents
(
2
);
if
(
channel
.
getAutoJoin
())
if
(
channel
->
getAutoJoin
())
joinChannel
(
channel
.
getName
());
joinChannel
(
channel
->
getName
());
}
}
}
}
...
...
cockatrice/src/zoneviewzone.cpp
View file @
69407072
...
@@ -42,7 +42,7 @@ void ZoneViewZone::initializeCards()
...
@@ -42,7 +42,7 @@ void ZoneViewZone::initializeCards()
}
}
}
}
void
ZoneViewZone
::
zoneDumpReceived
(
QList
<
ServerInfo_Card
>
cards
)
/*
void ZoneViewZone::zoneDumpReceived(QList<ServerInfo_Card
*
> cards)
{
{
for (int i = 0; i < cards.size(); i++) {
for (int i = 0; i < cards.size(); i++) {
CardItem *card = new CardItem(player, cards[i].getName(), i, this);
CardItem *card = new CardItem(player, cards[i].getName(), i, this);
...
@@ -52,7 +52,7 @@ void ZoneViewZone::zoneDumpReceived(QList<ServerInfo_Card> cards)
...
@@ -52,7 +52,7 @@ void ZoneViewZone::zoneDumpReceived(QList<ServerInfo_Card> cards)
emit contentsChanged();
emit contentsChanged();
reorganizeCards();
reorganizeCards();
}
}
*/
// Because of boundingRect(), this function must not be called before the zone was added to a scene.
// Because of boundingRect(), this function must not be called before the zone was added to a scene.
void
ZoneViewZone
::
reorganizeCards
()
void
ZoneViewZone
::
reorganizeCards
()
{
{
...
...
cockatrice/src/zoneviewzone.h
View file @
69407072
...
@@ -29,7 +29,7 @@ public:
...
@@ -29,7 +29,7 @@ public:
public
slots
:
public
slots
:
void
setSortingEnabled
(
int
_sortingEnabled
);
void
setSortingEnabled
(
int
_sortingEnabled
);
private
slots
:
private
slots
:
void
zoneDumpReceived
(
QList
<
ServerInfo_Card
>
cards
);
//
void zoneDumpReceived(QList<ServerInfo_Card> cards);
protected:
protected:
void
addCardImpl
(
CardItem
*
card
,
int
x
,
int
y
);
void
addCardImpl
(
CardItem
*
card
,
int
x
,
int
y
);
QSizeF
sizeHint
(
Qt
::
SizeHint
which
,
const
QSizeF
&
constraint
=
QSizeF
())
const
;
QSizeF
sizeHint
(
Qt
::
SizeHint
which
,
const
QSizeF
&
constraint
=
QSizeF
())
const
;
...
...
common/decklist.cpp
View file @
69407072
...
@@ -21,6 +21,18 @@ int AbstractDecklistNode::depth() const
...
@@ -21,6 +21,18 @@ int AbstractDecklistNode::depth() const
return
0
;
return
0
;
}
}
InnerDecklistNode
::
InnerDecklistNode
(
InnerDecklistNode
*
other
,
InnerDecklistNode
*
_parent
)
:
AbstractDecklistNode
(
_parent
),
name
(
other
->
getName
())
{
for
(
int
i
=
0
;
i
<
other
->
size
();
++
i
)
{
InnerDecklistNode
*
inner
=
dynamic_cast
<
InnerDecklistNode
*>
(
other
->
at
(
i
));
if
(
inner
)
new
InnerDecklistNode
(
inner
,
this
);
else
new
DecklistCardNode
(
dynamic_cast
<
DecklistCardNode
*>
(
other
->
at
(
i
)),
this
);
}
}
InnerDecklistNode
::~
InnerDecklistNode
()
InnerDecklistNode
::~
InnerDecklistNode
()
{
{
clearTree
();
clearTree
();
...
@@ -48,6 +60,11 @@ void InnerDecklistNode::clearTree()
...
@@ -48,6 +60,11 @@ void InnerDecklistNode::clearTree()
clear
();
clear
();
}
}
DecklistCardNode
::
DecklistCardNode
(
DecklistCardNode
*
other
,
InnerDecklistNode
*
_parent
)
:
AbstractDecklistCardNode
(
_parent
),
name
(
other
->
getName
()),
number
(
other
->
getNumber
())
{
}
AbstractDecklistNode
*
InnerDecklistNode
::
findChild
(
const
QString
&
name
)
AbstractDecklistNode
*
InnerDecklistNode
::
findChild
(
const
QString
&
name
)
{
{
for
(
int
i
=
0
;
i
<
size
();
i
++
)
for
(
int
i
=
0
;
i
<
size
();
i
++
)
...
@@ -178,76 +195,71 @@ const QStringList DeckList::fileNameFilters = QStringList()
...
@@ -178,76 +195,71 @@ const QStringList DeckList::fileNameFilters = QStringList()
<<
QObject
::
tr
(
"Plain text decks (*.dec *.mwDeck)"
)
<<
QObject
::
tr
(
"Plain text decks (*.dec *.mwDeck)"
)
<<
QObject
::
tr
(
"All files (*.*)"
);
<<
QObject
::
tr
(
"All files (*.*)"
);
DeckList
::
DeckList
(
QObject
*
parent
)
DeckList
::
DeckList
()
:
QObject
(
parent
),
currentZone
(
0
)
:
SerializableItem
(
"cockatrice_deck"
),
currentZone
(
0
)
{
{
root
=
new
InnerDecklistNode
;
root
=
new
InnerDecklistNode
;
}
}
DeckList
::
DeckList
(
DeckList
*
other
)
:
SerializableItem
(
"cockatrice_deck"
),
currentZone
(
0
)
{
root
=
new
InnerDecklistNode
(
other
->
getRoot
());
}
DeckList
::~
DeckList
()
DeckList
::~
DeckList
()
{
{
delete
root
;
delete
root
;
}
}
bool
DeckList
::
readElement
(
QXmlStreamReader
*
xml
)
void
DeckList
::
readElement
(
QXmlStreamReader
*
xml
)
{
{
if
(
currentZone
)
{
if
(
currentZone
)
{
if
(
currentZone
->
readElement
(
xml
))
if
(
currentZone
->
readElement
(
xml
))
currentZone
=
0
;
currentZone
=
0
;
return
false
;
}
else
if
(
xml
->
isEndElement
())
{
}
if
(
xml
->
isEndElement
())
{
if
(
xml
->
name
()
==
"deckname"
)
if
(
xml
->
name
()
==
"deckname"
)
name
=
currentElementText
;
name
=
currentElementText
;
else
if
(
xml
->
name
()
==
"comments"
)
else
if
(
xml
->
name
()
==
"comments"
)
comments
=
currentElementText
;
comments
=
currentElementText
;
else
if
(
xml
->
name
()
==
"cockatrice_deck"
)
return
true
;
currentElementText
.
clear
();
currentElementText
.
clear
();
}
else
if
(
xml
->
isStartElement
()
&&
(
xml
->
name
()
==
"zone"
))
}
else
if
(
xml
->
isStartElement
()
&&
(
xml
->
name
()
==
"zone"
))
currentZone
=
new
InnerDecklistNode
(
xml
->
attributes
().
value
(
"name"
).
toString
(),
root
);
currentZone
=
new
InnerDecklistNode
(
xml
->
attributes
().
value
(
"name"
).
toString
(),
root
);
else
if
(
xml
->
isCharacters
()
&&
!
xml
->
isWhitespace
())
else
if
(
xml
->
isCharacters
()
&&
!
xml
->
isWhitespace
())
currentElementText
=
xml
->
text
().
toString
();
currentElementText
=
xml
->
text
().
toString
();
return
false
;
}
}
void
DeckList
::
writeElement
(
QXmlStreamWriter
*
xml
)
void
DeckList
::
writeElement
(
QXmlStreamWriter
*
xml
)
{
{
xml
->
writeStartElement
(
"cockatrice_deck"
);
xml
->
writeAttribute
(
"version"
,
"1"
);
xml
->
writeAttribute
(
"version"
,
"1"
);
xml
->
writeTextElement
(
"deckname"
,
name
);
xml
->
writeTextElement
(
"deckname"
,
name
);
xml
->
writeTextElement
(
"comments"
,
comments
);
xml
->
writeTextElement
(
"comments"
,
comments
);
for
(
int
i
=
0
;
i
<
root
->
size
();
i
++
)
for
(
int
i
=
0
;
i
<
root
->
size
();
i
++
)
root
->
at
(
i
)
->
writeElement
(
xml
);
root
->
at
(
i
)
->
writeElement
(
xml
);
xml
->
writeEndElement
();
// cockatrice_deck
}
}
bool
DeckList
::
loadFromXml
(
QXmlStreamReader
*
xml
)
void
DeckList
::
loadFromXml
(
QXmlStreamReader
*
xml
)
{
{
while
(
!
xml
->
atEnd
())
{
while
(
!
xml
->
atEnd
())
{
xml
->
readNext
();
xml
->
readNext
();
if
(
xml
->
isStartElement
())
{
if
(
xml
->
isStartElement
())
{
if
(
xml
->
name
()
!=
"cockatrice_deck"
)
if
(
xml
->
name
()
!=
"cockatrice_deck"
)
return
false
;
return
;
while
(
!
xml
->
atEnd
())
{
while
(
!
xml
->
atEnd
())
{
xml
->
readNext
();
xml
->
readNext
();
if
(
readElement
(
xml
))
readElement
(
xml
);
return
true
;
}
}
}
}
}
}
return
false
;
}
}
bool
DeckList
::
loadFromFile_Native
(
QIODevice
*
device
)
bool
DeckList
::
loadFromFile_Native
(
QIODevice
*
device
)
{
{
QXmlStreamReader
xml
(
device
);
QXmlStreamReader
xml
(
device
);
return
loadFromXml
(
&
xml
);
loadFromXml
(
&
xml
);
return
true
;
}
}
bool
DeckList
::
saveToFile_Native
(
QIODevice
*
device
)
bool
DeckList
::
saveToFile_Native
(
QIODevice
*
device
)
...
@@ -256,7 +268,7 @@ bool DeckList::saveToFile_Native(QIODevice *device)
...
@@ -256,7 +268,7 @@ bool DeckList::saveToFile_Native(QIODevice *device)
xml
.
setAutoFormatting
(
true
);
xml
.
setAutoFormatting
(
true
);
xml
.
writeStartDocument
();
xml
.
writeStartDocument
();
write
Element
(
&
xml
);
write
(
&
xml
);
xml
.
writeEndDocument
();
xml
.
writeEndDocument
();
return
true
;
return
true
;
...
...
common/decklist.h
View file @
69407072
...
@@ -5,6 +5,7 @@
...
@@ -5,6 +5,7 @@
#include
<QVector>
#include
<QVector>
#include
<QPair>
#include
<QPair>
#include
<QObject>
#include
<QObject>
#include
"serializable_item.h"
class
CardDatabase
;
class
CardDatabase
;
class
QIODevice
;
class
QIODevice
;
...
@@ -36,6 +37,7 @@ private:
...
@@ -36,6 +37,7 @@ private:
class
compareFunctor
;
class
compareFunctor
;
public:
public:
InnerDecklistNode
(
const
QString
&
_name
=
QString
(),
InnerDecklistNode
*
_parent
=
0
)
:
AbstractDecklistNode
(
_parent
),
name
(
_name
)
{
}
InnerDecklistNode
(
const
QString
&
_name
=
QString
(),
InnerDecklistNode
*
_parent
=
0
)
:
AbstractDecklistNode
(
_parent
),
name
(
_name
)
{
}
InnerDecklistNode
(
InnerDecklistNode
*
other
,
InnerDecklistNode
*
_parent
=
0
);
virtual
~
InnerDecklistNode
();
virtual
~
InnerDecklistNode
();
QString
getName
()
const
{
return
name
;
}
QString
getName
()
const
{
return
name
;
}
void
setName
(
const
QString
&
_name
)
{
name
=
_name
;
}
void
setName
(
const
QString
&
_name
)
{
name
=
_name
;
}
...
@@ -72,13 +74,14 @@ private:
...
@@ -72,13 +74,14 @@ private:
int
number
;
int
number
;
public:
public:
DecklistCardNode
(
const
QString
&
_name
=
QString
(),
int
_number
=
1
,
InnerDecklistNode
*
_parent
=
0
)
:
AbstractDecklistCardNode
(
_parent
),
name
(
_name
),
number
(
_number
)
{
}
DecklistCardNode
(
const
QString
&
_name
=
QString
(),
int
_number
=
1
,
InnerDecklistNode
*
_parent
=
0
)
:
AbstractDecklistCardNode
(
_parent
),
name
(
_name
),
number
(
_number
)
{
}
DecklistCardNode
(
DecklistCardNode
*
other
,
InnerDecklistNode
*
_parent
);
int
getNumber
()
const
{
return
number
;
}
int
getNumber
()
const
{
return
number
;
}
void
setNumber
(
int
_number
)
{
number
=
_number
;
}
void
setNumber
(
int
_number
)
{
number
=
_number
;
}
QString
getName
()
const
{
return
name
;
}
QString
getName
()
const
{
return
name
;
}
void
setName
(
const
QString
&
_name
)
{
name
=
_name
;
}
void
setName
(
const
QString
&
_name
)
{
name
=
_name
;
}
};
};
class
DeckList
:
public
QObject
{
class
DeckList
:
public
SerializableItem
{
Q_OBJECT
Q_OBJECT
public:
public:
enum
FileFormat
{
PlainTextFormat
,
CockatriceFormat
};
enum
FileFormat
{
PlainTextFormat
,
CockatriceFormat
};
...
@@ -96,16 +99,17 @@ public slots:
...
@@ -96,16 +99,17 @@ public slots:
void
setComments
(
const
QString
&
_comments
=
QString
())
{
comments
=
_comments
;
}
void
setComments
(
const
QString
&
_comments
=
QString
())
{
comments
=
_comments
;
}
public:
public:
static
const
QStringList
fileNameFilters
;
static
const
QStringList
fileNameFilters
;
DeckList
(
QObject
*
parent
=
0
);
DeckList
();
DeckList
(
DeckList
*
other
);
~
DeckList
();
~
DeckList
();
QString
getName
()
const
{
return
name
;
}
QString
getName
()
const
{
return
name
;
}
QString
getComments
()
const
{
return
comments
;
}
QString
getComments
()
const
{
return
comments
;
}
QString
getLastFileName
()
const
{
return
lastFileName
;
}
QString
getLastFileName
()
const
{
return
lastFileName
;
}
FileFormat
getLastFileFormat
()
const
{
return
lastFileFormat
;
}
FileFormat
getLastFileFormat
()
const
{
return
lastFileFormat
;
}
bool
readElement
(
QXmlStreamReader
*
xml
);
void
readElement
(
QXmlStreamReader
*
xml
);
void
writeElement
(
QXmlStreamWriter
*
xml
);
void
writeElement
(
QXmlStreamWriter
*
xml
);
bool
loadFromXml
(
QXmlStreamReader
*
xml
);
void
loadFromXml
(
QXmlStreamReader
*
xml
);
bool
loadFromFile_Native
(
QIODevice
*
device
);
bool
loadFromFile_Native
(
QIODevice
*
device
);
bool
saveToFile_Native
(
QIODevice
*
device
);
bool
saveToFile_Native
(
QIODevice
*
device
);
...
...
common/protocol.cpp
View file @
69407072
This diff is collapsed.
Click to expand it.
common/protocol.h
View file @
69407072
...
@@ -23,43 +23,44 @@ enum ItemId {
...
@@ -23,43 +23,44 @@ enum ItemId {
ItemId_Event_ChatListPlayers
=
ItemId_Other
+
201
,
ItemId_Event_ChatListPlayers
=
ItemId_Other
+
201
,
ItemId_Event_ListGames
=
ItemId_Other
+
202
,
ItemId_Event_ListGames
=
ItemId_Other
+
202
,
ItemId_Event_GameStateChanged
=
ItemId_Other
+
203
,
ItemId_Event_GameStateChanged
=
ItemId_Other
+
203
,
ItemId_Event_CreateArrow
=
ItemId_Other
+
204
,
ItemId_Event_CreateArrow
s
=
ItemId_Other
+
204
,
ItemId_Event_CreateCounter
=
ItemId_Other
+
205
,
ItemId_Event_CreateCounter
s
=
ItemId_Other
+
205
,
ItemId_Event_DrawCards
=
ItemId_Other
+
206
,
ItemId_Event_DrawCards
=
ItemId_Other
+
206
,
ItemId_Response_DeckList
=
ItemId_Other
+
300
,
ItemId_Response_DeckList
=
ItemId_Other
+
300
,
ItemId_Response_DeckDownload
=
ItemId_Other
+
301
,
ItemId_Response_DeckDownload
=
ItemId_Other
+
301
,
ItemId_Response_DeckUpload
=
ItemId_Other
+
302
ItemId_Response_DeckUpload
=
ItemId_Other
+
302
,
ItemId_Invalid
=
ItemId_Other
+
1000
};
};
class
ProtocolItem
:
public
QObject
{
class
ProtocolItem
:
public
SerializableItem_Map
{
Q_OBJECT
Q_OBJECT
private:
QString
currentElementText
;
protected:
typedef
ProtocolItem
*
(
*
NewItemFunction
)();
static
QHash
<
QString
,
NewItemFunction
>
itemNameHash
;
QString
itemName
;
QMap
<
QString
,
QString
>
parameters
;
void
setParameter
(
const
QString
&
name
,
const
QString
&
value
)
{
parameters
[
name
]
=
value
;
}
void
setParameter
(
const
QString
&
name
,
bool
value
)
{
parameters
[
name
]
=
(
value
?
"1"
:
"0"
);
}
void
setParameter
(
const
QString
&
name
,
int
value
)
{
parameters
[
name
]
=
QString
::
number
(
value
);
}
void
setParameter
(
const
QString
&
name
,
const
QColor
&
value
)
{
parameters
[
name
]
=
QString
::
number
(
ColorConverter
::
colorToInt
(
value
));
}
virtual
void
extractParameters
()
{
}
virtual
QString
getItemType
()
const
=
0
;
virtual
bool
readElement
(
QXmlStreamReader
*
/*xml*/
)
{
return
false
;
}
virtual
void
writeElement
(
QXmlStreamWriter
*
/*xml*/
)
{
}
private:
private:
static
void
initializeHashAuto
();
static
void
initializeHashAuto
();
public:
public:
static
const
int
protocolVersion
=
4
;
static
const
int
protocolVersion
=
5
;
virtual
int
getItemId
()
const
=
0
;
ProtocolItem
(
const
QString
&
_itemName
);
static
void
initializeHash
();
static
void
initializeHash
();
static
ProtocolItem
*
getNewItem
(
const
QString
&
name
);
virtual
int
getItemId
()
const
=
0
;
bool
read
(
QXmlStreamReader
*
xml
);
ProtocolItem
(
const
QString
&
_itemType
,
const
QString
&
_itemSubType
);
void
write
(
QXmlStreamWriter
*
xml
);
};
class
ProtocolItem_Invalid
:
public
ProtocolItem
{
public:
ProtocolItem_Invalid
()
:
ProtocolItem
(
QString
(),
QString
())
{
}
int
getItemId
()
const
{
return
ItemId_Invalid
;
}
};
class
TopLevelProtocolItem
:
public
SerializableItem
{
Q_OBJECT
signals:
void
protocolItemReceived
(
ProtocolItem
*
item
);
private:
ProtocolItem
*
currentItem
;
bool
readCurrentItem
(
QXmlStreamReader
*
xml
);
protected:
void
readElement
(
QXmlStreamReader
*
xml
);
void
writeElement
(
QXmlStreamWriter
*
xml
);
public:
TopLevelProtocolItem
();
};
};
// ----------------
// ----------------
...
@@ -72,106 +73,59 @@ signals:
...
@@ -72,106 +73,59 @@ signals:
void
finished
(
ProtocolResponse
*
response
);
void
finished
(
ProtocolResponse
*
response
);
void
finished
(
ResponseCode
response
);
void
finished
(
ResponseCode
response
);
private:
private:
int
cmdId
;
int
ticks
;
int
ticks
;
static
int
lastCmdId
;
static
int
lastCmdId
;
QVariant
extraData
;
QVariant
extraData
;
protected:
QString
getItemType
()
const
{
return
"cmd"
;
}
void
extractParameters
();
public:
public:
Command
(
const
QString
&
_itemName
=
QString
(),
int
_cmdId
=
-
1
);
Command
(
const
QString
&
_itemName
=
QString
(),
int
_cmdId
=
-
1
);
int
getCmdId
()
const
{
return
cmdId
;
}
int
getCmdId
()
const
{
return
static_cast
<
SerializableItem_Int
*>
(
itemMap
.
value
(
"cmd_id"
))
->
getData
()
;
}
int
tick
()
{
return
++
ticks
;
}
int
tick
()
{
return
++
ticks
;
}
void
processResponse
(
ProtocolResponse
*
response
);
void
processResponse
(
ProtocolResponse
*
response
);
void
setExtraData
(
const
QVariant
&
_extraData
)
{
extraData
=
_extraData
;
}
void
setExtraData
(
const
QVariant
&
_extraData
)
{
extraData
=
_extraData
;
}
QVariant
getExtraData
()
const
{
return
extraData
;
}
QVariant
getExtraData
()
const
{
return
extraData
;
}
};
};
class
InvalidCommand
:
public
Command
{
Q_OBJECT
public:
InvalidCommand
()
:
Command
()
{
}
int
getItemId
()
const
{
return
ItemId_Other
;
}
};
class
ChatCommand
:
public
Command
{
class
ChatCommand
:
public
Command
{
Q_OBJECT
Q_OBJECT
private:
QString
channel
;
protected:
void
extractParameters
()
{
Command
::
extractParameters
();
channel
=
parameters
[
"channel"
];
}
public:
public:
ChatCommand
(
const
QString
&
_cmdName
,
const
QString
&
_channel
)
ChatCommand
(
const
QString
&
_cmdName
,
const
QString
&
_channel
)
:
Command
(
_cmdName
)
,
channel
(
_channel
)
:
Command
(
_cmdName
)
{
{
setParameter
(
"channel"
,
channel
);
insertItem
(
new
SerializableItem_String
(
"channel"
,
_
channel
)
)
;
}
}
QString
getChannel
()
const
{
return
channel
;
}
QString
getChannel
()
const
{
return
static_cast
<
SerializableItem_String
*>
(
itemMap
.
value
(
"channel"
))
->
getData
()
;
}
};
};
class
GameCommand
:
public
Command
{
class
GameCommand
:
public
Command
{
Q_OBJECT
Q_OBJECT
private:
int
gameId
;
protected:
void
extractParameters
()
{
Command
::
extractParameters
();
gameId
=
parameters
[
"game_id"
].
toInt
();
}
public:
public:
GameCommand
(
const
QString
&
_cmdName
,
int
_gameId
)
GameCommand
(
const
QString
&
_cmdName
,
int
_gameId
)
:
Command
(
_cmdName
),
gameId
(
_gameId
)
:
Command
(
_cmdName
)
{
setParameter
(
"game_id"
,
gameId
);
}
int
getGameId
()
const
{
return
gameId
;
}
void
setGameId
(
int
_gameId
)
{
{
gameId
=
_gameId
;
insertItem
(
new
SerializableItem_Int
(
"game_id"
,
_gameId
));
setParameter
(
"game_id"
,
gameId
);
}
}
int
getGameId
()
const
{
return
static_cast
<
SerializableItem_Int
*>
(
itemMap
.
value
(
"game_id"
))
->
getData
();
}
void
setGameId
(
int
_gameId
)
{
static_cast
<
SerializableItem_Int
*>
(
itemMap
.
value
(
"game_id"
))
->
setData
(
_gameId
);
}
};
};
class
Command_DeckUpload
:
public
Command
{
class
Command_DeckUpload
:
public
Command
{
Q_OBJECT
Q_OBJECT
private:
DeckList
*
deck
;
QString
path
;
bool
readFinished
;
protected:
void
extractParameters
();
bool
readElement
(
QXmlStreamReader
*
xml
);
void
writeElement
(
QXmlStreamWriter
*
xml
);
public:
public:
Command_DeckUpload
(
DeckList
*
_deck
=
0
,
const
QString
&
_path
=
QString
());
Command_DeckUpload
(
DeckList
*
_deck
=
0
,
const
QString
&
_path
=
QString
());
static
Protocol
Item
*
newItem
()
{
return
new
Command_DeckUpload
;
}
static
Serializable
Item
*
newItem
()
{
return
new
Command_DeckUpload
;
}
int
getItemId
()
const
{
return
ItemId_Command_DeckUpload
;
}
int
getItemId
()
const
{
return
ItemId_Command_DeckUpload
;
}
DeckList
*
getDeck
()
const
{
return
deck
;
}
DeckList
*
getDeck
()
const
;
QString
getPath
()
const
{
return
path
;
}
QString
getPath
()
const
{
return
static_cast
<
SerializableItem_String
*>
(
itemMap
.
value
(
"path"
))
->
getData
()
;
}
};
};
class
Command_DeckSelect
:
public
GameCommand
{
class
Command_DeckSelect
:
public
GameCommand
{
Q_OBJECT
Q_OBJECT
private:
DeckList
*
deck
;
int
deckId
;
bool
readFinished
;
protected:
void
extractParameters
();
bool
readElement
(
QXmlStreamReader
*
xml
);
void
writeElement
(
QXmlStreamWriter
*
xml
);
public:
public:
Command_DeckSelect
(
int
_gameId
=
-
1
,
DeckList
*
_deck
=
0
,
int
_deckId
=
-
1
);
Command_DeckSelect
(
int
_gameId
=
-
1
,
DeckList
*
_deck
=
0
,
int
_deckId
=
-
1
);
static
Protocol
Item
*
newItem
()
{
return
new
Command_DeckSelect
;
}
static
Serializable
Item
*
newItem
()
{
return
new
Command_DeckSelect
;
}
int
getItemId
()
const
{
return
ItemId_Command_DeckSelect
;
}
int
getItemId
()
const
{
return
ItemId_Command_DeckSelect
;
}
DeckList
*
getDeck
()
const
{
return
deck
;
}
DeckList
*
getDeck
()
const
;
int
getDeckId
()
const
{
return
deckId
;
}
int
getDeckId
()
const
{
return
static_cast
<
SerializableItem_Int
*>
(
itemMap
.
value
(
"deck_id"
))
->
getData
()
;
}
};
};
// -----------------
// -----------------
...
@@ -181,66 +135,41 @@ public:
...
@@ -181,66 +135,41 @@ public:
class
ProtocolResponse
:
public
ProtocolItem
{
class
ProtocolResponse
:
public
ProtocolItem
{
Q_OBJECT
Q_OBJECT
private:
private:
int
cmdId
;
ResponseCode
responseCode
;
static
QHash
<
QString
,
ResponseCode
>
responseHash
;
static
QHash
<
QString
,
ResponseCode
>
responseHash
;
protected:
QString
getItemType
()
const
{
return
"resp"
;
}
void
extractParameters
();
public:
public:
ProtocolResponse
(
int
_cmdId
=
-
1
,
ResponseCode
_responseCode
=
RespOk
,
const
QString
&
_itemName
=
QString
());
ProtocolResponse
(
int
_cmdId
=
-
1
,
ResponseCode
_responseCode
=
RespOk
,
const
QString
&
_itemName
=
QString
());
int
getItemId
()
const
{
return
ItemId_Other
;
}
int
getItemId
()
const
{
return
ItemId_Other
;
}
static
void
initializeHash
();
static
void
initializeHash
();
static
Protocol
Item
*
newItem
()
{
return
new
ProtocolResponse
;
}
static
Serializable
Item
*
newItem
()
{
return
new
ProtocolResponse
;
}
int
getCmdId
()
const
{
return
cmdId
;
}
int
getCmdId
()
const
{
return
static_cast
<
SerializableItem_Int
*>
(
itemMap
.
value
(
"cmd_id"
))
->
getData
()
;
}
ResponseCode
getResponseCode
()
const
{
return
response
Code
;
}
ResponseCode
getResponseCode
()
const
{
return
response
Hash
.
value
(
static_cast
<
SerializableItem_String
*>
(
itemMap
.
value
(
"response_code"
))
->
getData
(),
RespOk
)
;
}
};
};
class
Response_DeckList
:
public
ProtocolResponse
{
class
Response_DeckList
:
public
ProtocolResponse
{
Q_OBJECT
Q_OBJECT
private:
DeckList_Directory
*
root
;
bool
readFinished
;
protected:
bool
readElement
(
QXmlStreamReader
*
xml
);
void
writeElement
(
QXmlStreamWriter
*
xml
);
public:
public:
Response_DeckList
(
int
_cmdId
=
-
1
,
ResponseCode
_responseCode
=
RespOk
,
DeckList_Directory
*
_root
=
0
);
Response_DeckList
(
int
_cmdId
=
-
1
,
ResponseCode
_responseCode
=
RespOk
,
DeckList_Directory
*
_root
=
0
);
~
Response_DeckList
();
int
getItemId
()
const
{
return
ItemId_Response_DeckList
;
}
int
getItemId
()
const
{
return
ItemId_Response_DeckList
;
}
static
Protocol
Item
*
newItem
()
{
return
new
Response_DeckList
;
}
static
Serializable
Item
*
newItem
()
{
return
new
Response_DeckList
;
}
DeckList_Directory
*
getRoot
()
const
{
return
root
;
}
DeckList_Directory
*
getRoot
()
const
{
return
static_cast
<
DeckList_Directory
*>
(
itemMap
.
value
(
"directory"
))
;
}
};
};
class
Response_DeckDownload
:
public
ProtocolResponse
{
class
Response_DeckDownload
:
public
ProtocolResponse
{
Q_OBJECT
Q_OBJECT
private:
DeckList
*
deck
;
bool
readFinished
;
protected:
bool
readElement
(
QXmlStreamReader
*
xml
);
void
writeElement
(
QXmlStreamWriter
*
xml
);
public:
public:
Response_DeckDownload
(
int
_cmdId
=
-
1
,
ResponseCode
_responseCode
=
RespOk
,
DeckList
*
_deck
=
0
);
Response_DeckDownload
(
int
_cmdId
=
-
1
,
ResponseCode
_responseCode
=
RespOk
,
DeckList
*
_deck
=
0
);
int
getItemId
()
const
{
return
ItemId_Response_DeckDownload
;
}
int
getItemId
()
const
{
return
ItemId_Response_DeckDownload
;
}
static
Protocol
Item
*
newItem
()
{
return
new
Response_DeckDownload
;
}
static
Serializable
Item
*
newItem
()
{
return
new
Response_DeckDownload
;
}
DeckList
*
getDeck
()
const
{
return
deck
;
}
DeckList
*
getDeck
()
const
;
};
};
class
Response_DeckUpload
:
public
ProtocolResponse
{
class
Response_DeckUpload
:
public
ProtocolResponse
{
Q_OBJECT
Q_OBJECT
private:
DeckList_File
*
file
;
bool
readFinished
;
protected:
bool
readElement
(
QXmlStreamReader
*
xml
);
void
writeElement
(
QXmlStreamWriter
*
xml
);
public:
public:
Response_DeckUpload
(
int
_cmdId
=
-
1
,
ResponseCode
_responseCode
=
RespOk
,
DeckList_File
*
_file
=
0
);
Response_DeckUpload
(
int
_cmdId
=
-
1
,
ResponseCode
_responseCode
=
RespOk
,
DeckList_File
*
_file
=
0
);
~
Response_DeckUpload
();
int
getItemId
()
const
{
return
ItemId_Response_DeckUpload
;
}
int
getItemId
()
const
{
return
ItemId_Response_DeckUpload
;
}
static
Protocol
Item
*
newItem
()
{
return
new
Response_DeckUpload
;
}
static
Serializable
Item
*
newItem
()
{
return
new
Response_DeckUpload
;
}
DeckList_File
*
getFile
()
const
{
return
file
;
}
DeckList_File
*
getFile
()
const
{
return
static_cast
<
DeckList_File
*>
(
itemMap
.
value
(
"
file
"
))
;
}
};
};
// --------------
// --------------
...
@@ -249,162 +178,89 @@ public:
...
@@ -249,162 +178,89 @@ public:
class
GenericEvent
:
public
ProtocolItem
{
class
GenericEvent
:
public
ProtocolItem
{
Q_OBJECT
Q_OBJECT
protected:
QString
getItemType
()
const
{
return
"generic_event"
;
}
public:
public:
GenericEvent
(
const
QString
&
_eventName
);
GenericEvent
(
const
QString
&
_eventName
)
:
ProtocolItem
(
"generic_event"
,
_eventName
)
{
}
};
};
class
GameEvent
:
public
ProtocolItem
{
class
GameEvent
:
public
ProtocolItem
{
Q_OBJECT
Q_OBJECT
private:
int
gameId
;
int
playerId
;
protected:
QString
getItemType
()
const
{
return
"game_event"
;
}
void
extractParameters
();
public:
public:
GameEvent
(
const
QString
&
_eventName
,
int
_gameId
,
int
_playerId
);
GameEvent
(
const
QString
&
_eventName
,
int
_gameId
,
int
_playerId
);
int
getGameId
()
const
{
return
gameId
;
}
int
getGameId
()
const
{
return
static_cast
<
SerializableItem_Int
*>
(
itemMap
.
value
(
"game_id"
))
->
getData
();
}
int
getPlayerId
()
const
{
return
playerId
;
}
int
getPlayerId
()
const
{
return
static_cast
<
SerializableItem_Int
*>
(
itemMap
.
value
(
"player_id"
))
->
getData
();
}
void
setGameId
(
int
_gameId
)
void
setGameId
(
int
_gameId
)
{
static_cast
<
SerializableItem_Int
*>
(
itemMap
.
value
(
"game_id"
))
->
setData
(
_gameId
);
}
{
gameId
=
_gameId
;
setParameter
(
"game_id"
,
gameId
);
}
};
};
class
ChatEvent
:
public
ProtocolItem
{
class
ChatEvent
:
public
ProtocolItem
{
Q_OBJECT
Q_OBJECT
private:
QString
channel
;
protected:
QString
getItemType
()
const
{
return
"chat_event"
;
}
void
extractParameters
();
public:
public:
ChatEvent
(
const
QString
&
_eventName
,
const
QString
&
_channel
);
ChatEvent
(
const
QString
&
_eventName
,
const
QString
&
_channel
);
QString
getChannel
()
const
{
return
channel
;
}
QString
getChannel
()
const
{
return
static_cast
<
SerializableItem_String
*>
(
itemMap
.
value
(
"channel"
))
->
getData
()
;
}
};
};
class
Event_ListChatChannels
:
public
GenericEvent
{
class
Event_ListChatChannels
:
public
GenericEvent
{
Q_OBJECT
Q_OBJECT
private:
QList
<
ServerChatChannelInfo
>
channelList
;
public:
public:
Event_ListChatChannels
(
)
:
GenericEvent
(
"list_c
hat
_c
hannel
s"
)
{
}
Event_ListChatChannels
(
const
QList
<
ServerInfo_ChatChannel
*>
&
_channelList
=
QList
<
ServerInfo_C
hat
C
hannel
*>
());
int
getItemId
()
const
{
return
ItemId_Event_ListChatChannels
;
}
int
getItemId
()
const
{
return
ItemId_Event_ListChatChannels
;
}
static
ProtocolItem
*
newItem
()
{
return
new
Event_ListChatChannels
;
}
static
SerializableItem
*
newItem
()
{
return
new
Event_ListChatChannels
;
}
void
addChannel
(
const
QString
&
_name
,
const
QString
&
_description
,
int
_playerCount
,
bool
_autoJoin
)
QList
<
ServerInfo_ChatChannel
*>
getChannelList
()
const
{
return
typecastItemList
<
ServerInfo_ChatChannel
*>
();
}
{
channelList
.
append
(
ServerChatChannelInfo
(
_name
,
_description
,
_playerCount
,
_autoJoin
));
}
const
QList
<
ServerChatChannelInfo
>
&
getChannelList
()
const
{
return
channelList
;
}
bool
readElement
(
QXmlStreamReader
*
xml
);
void
writeElement
(
QXmlStreamWriter
*
xml
);
};
};
class
Event_ChatListPlayers
:
public
ChatEvent
{
class
Event_ChatListPlayers
:
public
ChatEvent
{
Q_OBJECT
Q_OBJECT
private:
QList
<
ServerChatUserInfo
>
playerList
;
public:
public:
Event_ChatListPlayers
(
const
QString
&
_channel
=
QString
()
)
:
ChatEvent
(
"chat_list_players"
,
_channel
)
{
}
Event_ChatListPlayers
(
const
QString
&
_channel
=
QString
()
,
const
QList
<
ServerInfo_ChatUser
*>
&
_playerList
=
QList
<
ServerInfo_ChatUser
*>
());
int
getItemId
()
const
{
return
ItemId_Event_ChatListPlayers
;
}
int
getItemId
()
const
{
return
ItemId_Event_ChatListPlayers
;
}
static
ProtocolItem
*
newItem
()
{
return
new
Event_ChatListPlayers
;
}
static
SerializableItem
*
newItem
()
{
return
new
Event_ChatListPlayers
;
}
void
addPlayer
(
const
QString
&
_name
)
QList
<
ServerInfo_ChatUser
*>
getPlayerList
()
const
{
return
typecastItemList
<
ServerInfo_ChatUser
*>
();
}
{
playerList
.
append
(
ServerChatUserInfo
(
_name
));
}
const
QList
<
ServerChatUserInfo
>
&
getPlayerList
()
const
{
return
playerList
;
}
bool
readElement
(
QXmlStreamReader
*
xml
);
void
writeElement
(
QXmlStreamWriter
*
xml
);
};
};
class
Event_ListGames
:
public
GenericEvent
{
class
Event_ListGames
:
public
GenericEvent
{
Q_OBJECT
Q_OBJECT
private:
QList
<
ServerGameInfo
>
gameList
;
public:
public:
Event_ListGames
(
)
:
GenericEvent
(
"list_games"
)
{
}
Event_ListGames
(
const
QList
<
ServerInfo_Game
*>
&
_gameList
=
QList
<
ServerInfo_Game
*>
());
int
getItemId
()
const
{
return
ItemId_Event_ListGames
;
}
int
getItemId
()
const
{
return
ItemId_Event_ListGames
;
}
static
ProtocolItem
*
newItem
()
{
return
new
Event_ListGames
;
}
static
SerializableItem
*
newItem
()
{
return
new
Event_ListGames
;
}
void
addGame
(
int
_gameId
,
const
QString
&
_description
,
bool
_hasPassword
,
int
_playerCount
,
int
_maxPlayers
,
const
QString
&
_creatorName
,
bool
_spectatorsAllowed
,
int
_spectatorCount
)
QList
<
ServerInfo_Game
*>
getGameList
()
const
{
return
typecastItemList
<
ServerInfo_Game
*>
();
}
{
gameList
.
append
(
ServerGameInfo
(
_gameId
,
_description
,
_hasPassword
,
_playerCount
,
_maxPlayers
,
_creatorName
,
_spectatorsAllowed
,
_spectatorCount
));
}
const
QList
<
ServerGameInfo
>
&
getGameList
()
const
{
return
gameList
;
}
bool
readElement
(
QXmlStreamReader
*
xml
);
void
writeElement
(
QXmlStreamWriter
*
xml
);
};
};
class
Event_GameStateChanged
:
public
GameEvent
{
class
Event_GameStateChanged
:
public
GameEvent
{
Q_OBJECT
Q_OBJECT
private:
SerializableItem
*
currentItem
;
QList
<
ServerInfo_Player
*>
playerList
;
public:
public:
Event_GameStateChanged
(
int
_gameId
=
-
1
,
const
QList
<
ServerInfo_Player
*>
&
_playerList
=
QList
<
ServerInfo_Player
*>
());
Event_GameStateChanged
(
int
_gameId
=
-
1
,
const
QList
<
ServerInfo_Player
*>
&
_playerList
=
QList
<
ServerInfo_Player
*>
());
~
Event_GameStateChanged
();
static
SerializableItem
*
newItem
()
{
return
new
Event_GameStateChanged
;
}
const
QList
<
ServerInfo_Player
*>
&
getPlayerList
()
const
{
return
playerList
;
}
static
ProtocolItem
*
newItem
()
{
return
new
Event_GameStateChanged
;
}
int
getItemId
()
const
{
return
ItemId_Event_GameStateChanged
;
}
int
getItemId
()
const
{
return
ItemId_Event_GameStateChanged
;
}
QList
<
ServerInfo_Player
*>
getPlayerList
()
const
{
return
typecastItemList
<
ServerInfo_Player
*>
();
}
bool
readElement
(
QXmlStreamReader
*
xml
);
void
writeElement
(
QXmlStreamWriter
*
xml
);
};
};
class
Event_CreateArrow
:
public
GameEvent
{
class
Event_CreateArrow
s
:
public
GameEvent
{
Q_OBJECT
Q_OBJECT
private:
ServerInfo_Arrow
*
arrow
;
bool
readFinished
;
protected:
bool
readElement
(
QXmlStreamReader
*
xml
);
void
writeElement
(
QXmlStreamWriter
*
xml
);
public:
public:
Event_CreateArrow
(
int
_gameId
=
-
1
,
int
_playerId
=
-
1
,
ServerInfo_Arrow
*
_arrow
=
0
);
Event_CreateArrows
(
int
_gameId
=
-
1
,
int
_playerId
=
-
1
,
const
QList
<
ServerInfo_Arrow
*>
&
_arrowList
=
QList
<
ServerInfo_Arrow
*>
());
~
Event_CreateArrow
();
int
getItemId
()
const
{
return
ItemId_Event_CreateArrows
;
}
int
getItemId
()
const
{
return
ItemId_Event_CreateArrow
;
}
static
SerializableItem
*
newItem
()
{
return
new
Event_CreateArrows
;
}
static
ProtocolItem
*
newItem
()
{
return
new
Event_CreateArrow
;
}
QList
<
ServerInfo_Arrow
*>
getArrowList
()
const
{
return
typecastItemList
<
ServerInfo_Arrow
*>
();
}
ServerInfo_Arrow
*
getArrow
()
const
{
return
arrow
;
}
};
};
class
Event_CreateCounter
:
public
GameEvent
{
class
Event_CreateCounter
s
:
public
GameEvent
{
Q_OBJECT
Q_OBJECT
private:
ServerInfo_Counter
*
counter
;
bool
readFinished
;
protected:
bool
readElement
(
QXmlStreamReader
*
xml
);
void
writeElement
(
QXmlStreamWriter
*
xml
);
public:
public:
Event_CreateCounter
(
int
_gameId
=
-
1
,
int
_playerId
=
-
1
,
ServerInfo_Counter
*
_counter
=
0
);
Event_CreateCounters
(
int
_gameId
=
-
1
,
int
_playerId
=
-
1
,
const
QList
<
ServerInfo_Counter
*>
&
_counterList
=
QList
<
ServerInfo_Counter
*>
());
~
Event_CreateCounter
();
int
getItemId
()
const
{
return
ItemId_Event_CreateCounters
;
}
int
getItemId
()
const
{
return
ItemId_Event_CreateCounter
;
}
static
SerializableItem
*
newItem
()
{
return
new
Event_CreateCounters
;
}
static
ProtocolItem
*
newItem
()
{
return
new
Event_CreateCounter
;
}
QList
<
ServerInfo_Counter
*>
getCounterList
()
const
{
return
typecastItemList
<
ServerInfo_Counter
*>
();
}
ServerInfo_Counter
*
getCounter
()
const
{
return
counter
;
}
};
};
class
Event_DrawCards
:
public
GameEvent
{
class
Event_DrawCards
:
public
GameEvent
{
Q_OBJECT
Q_OBJECT
private:
SerializableItem
*
currentItem
;
int
numberCards
;
QList
<
ServerInfo_Card
*>
cardList
;
protected:
void
extractParameters
();
bool
readElement
(
QXmlStreamReader
*
xml
);
void
writeElement
(
QXmlStreamWriter
*
xml
);
public:
public:
Event_DrawCards
(
int
_gameId
=
-
1
,
int
_playerId
=
-
1
,
int
numberCards
=
-
1
,
const
QList
<
ServerInfo_Card
*>
&
_cardList
=
QList
<
ServerInfo_Card
*>
());
Event_DrawCards
(
int
_gameId
=
-
1
,
int
_playerId
=
-
1
,
int
numberCards
=
-
1
,
const
QList
<
ServerInfo_Card
*>
&
_cardList
=
QList
<
ServerInfo_Card
*>
());
~
Event_DrawCards
();
int
getItemId
()
const
{
return
ItemId_Event_DrawCards
;
}
int
getItemId
()
const
{
return
ItemId_Event_DrawCards
;
}
static
Protocol
Item
*
newItem
()
{
return
new
Event_DrawCards
;
}
static
Serializable
Item
*
newItem
()
{
return
new
Event_DrawCards
;
}
int
getNumberCards
()
const
{
return
number
C
ards
;
}
int
getNumberCards
()
const
{
return
static_cast
<
SerializableItem_Int
*>
(
itemMap
.
value
(
"
number
_c
ards
"
))
->
getData
()
;
}
const
QList
<
ServerInfo_Card
*>
&
getCardList
()
const
{
return
cardList
;
}
QList
<
ServerInfo_Card
*>
getCardList
()
const
{
return
typecastItemList
<
ServerInfo_Card
*>
()
;
}
};
};
#endif
#endif
common/protocol_datastructures.cpp
View file @
69407072
...
@@ -2,244 +2,154 @@
...
@@ -2,244 +2,154 @@
#include
<QXmlStreamReader>
#include
<QXmlStreamReader>
#include
<QXmlStreamWriter>
#include
<QXmlStreamWriter>
ServerInfo_Player
::~
ServerInfo_Player
()
ServerInfo_ChatChannel
::
ServerInfo_ChatChannel
(
const
QString
&
_name
,
const
QString
&
_description
,
int
_playerCount
,
bool
_autoJoin
)
:
SerializableItem_Map
(
"chat_channel"
)
{
{
for
(
int
i
=
0
;
i
<
zoneList
.
size
();
++
i
)
insertItem
(
new
SerializableItem_String
(
"name"
,
_name
));
delete
zoneList
[
i
];
insertItem
(
new
SerializableItem_String
(
"description"
,
_description
));
for
(
int
i
=
0
;
i
<
arrowList
.
size
();
++
i
)
insertItem
(
new
SerializableItem_Int
(
"player_count"
,
_playerCount
));
delete
arrowList
[
i
];
insertItem
(
new
SerializableItem_Bool
(
"auto_join"
,
_autoJoin
));
for
(
int
i
=
0
;
i
<
counterList
.
size
();
++
i
)
delete
counterList
[
i
];
}
}
ServerInfo_Zone
::~
ServerInfo_Zone
()
ServerInfo_ChatUser
::
ServerInfo_ChatUser
(
const
QString
&
_name
)
:
SerializableItem_Map
(
"chat_user"
)
{
{
for
(
int
i
=
0
;
i
<
cardList
.
size
();
++
i
)
insertItem
(
new
SerializableItem_String
(
"name"
,
_name
));
delete
cardList
[
i
];
}
}
bool
ServerInfo_Arrow
::
readElement
(
QXmlStreamReader
*
xml
)
ServerInfo_Game
::
ServerInfo_Game
(
int
_gameId
,
const
QString
&
_description
,
bool
_hasPassword
,
int
_playerCount
,
int
_maxPlayers
,
const
QString
&
_creatorName
,
bool
_spectatorsAllowed
,
int
_spectatorCount
)
:
SerializableItem_Map
(
"game"
)
{
{
if
(
xml
->
isStartElement
()
&&
(
xml
->
name
()
==
"arrow"
))
{
insertItem
(
new
SerializableItem_Int
(
"game_id"
,
_gameId
));
id
=
xml
->
attributes
().
value
(
"id"
).
toString
().
toInt
();
insertItem
(
new
SerializableItem_String
(
"description"
,
_description
));
startPlayerId
=
xml
->
attributes
().
value
(
"start_player_id"
).
toString
().
toInt
();
insertItem
(
new
SerializableItem_Bool
(
"has_password"
,
_hasPassword
));
startZone
=
xml
->
attributes
().
value
(
"start_zone"
).
toString
();
insertItem
(
new
SerializableItem_Int
(
"player_count"
,
_playerCount
));
startCardId
=
xml
->
attributes
().
value
(
"start_card_id"
).
toString
().
toInt
();
insertItem
(
new
SerializableItem_Int
(
"max_players"
,
_maxPlayers
));
targetPlayerId
=
xml
->
attributes
().
value
(
"target_player_id"
).
toString
().
toInt
();
insertItem
(
new
SerializableItem_String
(
"creator_name"
,
_creatorName
));
targetZone
=
xml
->
attributes
().
value
(
"target_zone"
).
toString
();
insertItem
(
new
SerializableItem_Bool
(
"spectators_allowed"
,
_spectatorsAllowed
));
targetCardId
=
xml
->
attributes
().
value
(
"target_card_id"
).
toString
().
toInt
();
insertItem
(
new
SerializableItem_Int
(
"spectator_count"
,
_spectatorCount
));
color
=
ColorConverter
::
colorFromInt
(
xml
->
attributes
().
value
(
"color"
).
toString
().
toInt
());
}
else
if
(
xml
->
isEndElement
()
&&
(
xml
->
name
()
==
"arrow"
))
return
true
;
return
false
;
}
}
void
ServerInfo_Arrow
::
writeElement
(
QXmlStreamWriter
*
xml
)
ServerInfo_Card
::
ServerInfo_Card
(
int
_id
,
const
QString
&
_name
,
int
_x
,
int
_y
,
int
_counters
,
bool
_tapped
,
bool
_attacking
,
const
QString
&
_annotation
)
:
SerializableItem_Map
(
"card"
)
{
{
xml
->
writeStartElement
(
"arrow"
);
insertItem
(
new
SerializableItem_Int
(
"id"
,
_id
));
xml
->
writeAttribute
(
"id"
,
QString
::
number
(
id
));
insertItem
(
new
SerializableItem_String
(
"name"
,
_name
));
xml
->
writeAttribute
(
"start_player_id"
,
QString
::
number
(
startPlayerId
));
insertItem
(
new
SerializableItem_Int
(
"x"
,
_x
));
xml
->
writeAttribute
(
"start_zone"
,
startZone
);
insertItem
(
new
SerializableItem_Int
(
"y"
,
_y
));
xml
->
writeAttribute
(
"start_card_id"
,
QString
::
number
(
startCardId
));
insertItem
(
new
SerializableItem_Int
(
"counters"
,
_counters
));
xml
->
writeAttribute
(
"target_player_id"
,
QString
::
number
(
targetPlayerId
));
insertItem
(
new
SerializableItem_Bool
(
"tapped"
,
_tapped
));
xml
->
writeAttribute
(
"target_zone"
,
targetZone
);
insertItem
(
new
SerializableItem_Bool
(
"attacking"
,
_attacking
));
xml
->
writeAttribute
(
"target_card_id"
,
QString
::
number
(
targetCardId
));
insertItem
(
new
SerializableItem_String
(
"annotation"
,
_annotation
));
xml
->
writeAttribute
(
"color"
,
QString
::
number
(
ColorConverter
::
colorToInt
(
color
)));
xml
->
writeEndElement
();
}
}
bool
ServerInfo_Counter
::
readElement
(
QXmlStreamReader
*
xml
)
ServerInfo_Zone
::
ServerInfo_Zone
(
const
QString
&
_name
,
ZoneType
_type
,
bool
_hasCoords
,
int
_cardCount
,
const
QList
<
ServerInfo_Card
*>
&
_cardList
)
:
SerializableItem_Map
(
"zone"
)
{
{
if
(
xml
->
isStartElement
()
&&
(
xml
->
name
()
==
"counter"
))
{
insertItem
(
new
SerializableItem_String
(
"name"
,
_name
));
id
=
xml
->
attributes
().
value
(
"id"
).
toString
().
toInt
();
insertItem
(
new
SerializableItem_String
(
"zone_type"
,
typeToString
(
_type
)));
name
=
xml
->
attributes
().
value
(
"name"
).
toString
();
insertItem
(
new
SerializableItem_Bool
(
"has_coords"
,
_hasCoords
));
color
=
ColorConverter
::
colorFromInt
(
xml
->
attributes
().
value
(
"color"
).
toString
().
toInt
());
insertItem
(
new
SerializableItem_Int
(
"card_count"
,
_cardCount
));
radius
=
xml
->
attributes
().
value
(
"radius"
).
toString
().
toInt
();
count
=
xml
->
attributes
().
value
(
"count"
).
toString
().
toInt
();
for
(
int
i
=
0
;
i
<
_cardList
.
size
();
++
i
)
}
else
if
(
xml
->
isEndElement
()
&&
(
xml
->
name
()
==
"counter"
))
itemList
.
append
(
_cardList
[
i
]);
return
true
;
return
false
;
}
}
void
ServerInfo_
Counter
::
writeElement
(
QXmlStreamWriter
*
xml
)
ZoneType
ServerInfo_
Zone
::
typeFromString
(
const
QString
&
type
)
const
{
{
xml
->
writeStartElement
(
"counter"
);
if
(
type
==
"private"
)
xml
->
writeAttribute
(
"id"
,
QString
::
number
(
id
));
return
PrivateZone
;
xml
->
writeAttribute
(
"name"
,
name
);
else
if
(
type
==
"hidden"
)
xml
->
writeAttribute
(
"color"
,
QString
::
number
(
ColorConverter
::
colorToInt
(
color
)));
return
HiddenZone
;
xml
->
writeAttribute
(
"radius"
,
QString
::
number
(
radius
));
return
PublicZone
;
xml
->
writeAttribute
(
"count"
,
QString
::
number
(
count
));
xml
->
writeEndElement
();
}
}
bool
ServerInfo_
Card
::
readElement
(
QXmlStreamReader
*
xml
)
QString
ServerInfo_
Zone
::
typeToString
(
ZoneType
type
)
const
{
{
if
(
xml
->
isStartElement
()
&&
(
xml
->
name
()
==
"card"
))
{
id
=
xml
->
attributes
().
value
(
"id"
).
toString
().
toInt
();
name
=
xml
->
attributes
().
value
(
"name"
).
toString
();
x
=
xml
->
attributes
().
value
(
"x"
).
toString
().
toInt
();
y
=
xml
->
attributes
().
value
(
"y"
).
toString
().
toInt
();
counters
=
xml
->
attributes
().
value
(
"counters"
).
toString
().
toInt
();
tapped
=
xml
->
attributes
().
value
(
"tapped"
).
toString
().
toInt
();
attacking
=
xml
->
attributes
().
value
(
"attacking"
).
toString
().
toInt
();
annotation
=
xml
->
attributes
().
value
(
"annotation"
).
toString
();
}
else
if
(
xml
->
isEndElement
()
&&
(
xml
->
name
()
==
"card"
))
return
true
;
return
false
;
}
void
ServerInfo_Card
::
writeElement
(
QXmlStreamWriter
*
xml
)
{
xml
->
writeStartElement
(
"card"
);
xml
->
writeAttribute
(
"id"
,
QString
::
number
(
id
));
xml
->
writeAttribute
(
"name"
,
name
);
xml
->
writeAttribute
(
"x"
,
QString
::
number
(
x
));
xml
->
writeAttribute
(
"y"
,
QString
::
number
(
y
));
xml
->
writeAttribute
(
"counters"
,
QString
::
number
(
counters
));
xml
->
writeAttribute
(
"tapped"
,
tapped
?
"1"
:
"0"
);
xml
->
writeAttribute
(
"attacking"
,
attacking
?
"1"
:
"0"
);
xml
->
writeAttribute
(
"annotation"
,
annotation
);
xml
->
writeEndElement
();
}
bool
ServerInfo_Zone
::
readElement
(
QXmlStreamReader
*
xml
)
{
if
(
currentItem
)
{
if
(
currentItem
->
readElement
(
xml
))
currentItem
=
0
;
return
false
;
}
if
(
xml
->
isStartElement
()
&&
(
xml
->
name
()
==
"zone"
))
{
name
=
xml
->
attributes
().
value
(
"name"
).
toString
();
type
=
(
ZoneType
)
xml
->
attributes
().
value
(
"type"
).
toString
().
toInt
();
hasCoords
=
xml
->
attributes
().
value
(
"has_coords"
).
toString
().
toInt
();
cardCount
=
xml
->
attributes
().
value
(
"card_count"
).
toString
().
toInt
();
}
else
if
(
xml
->
isStartElement
()
&&
(
xml
->
name
()
==
"card"
))
{
ServerInfo_Card
*
card
=
new
ServerInfo_Card
;
cardList
.
append
(
card
);
currentItem
=
card
;
}
else
if
(
xml
->
isEndElement
()
&&
(
xml
->
name
()
==
"zone"
))
return
true
;
if
(
currentItem
)
if
(
currentItem
->
readElement
(
xml
))
currentItem
=
0
;
return
false
;
}
void
ServerInfo_Zone
::
writeElement
(
QXmlStreamWriter
*
xml
)
{
xml
->
writeStartElement
(
"zone"
);
xml
->
writeAttribute
(
"name"
,
name
);
QString
typeStr
;
switch
(
type
)
{
switch
(
type
)
{
case
PrivateZone
:
typeStr
=
"private"
;
break
;
case
PrivateZone
:
return
"private"
;
case
HiddenZone
:
typeStr
=
"hidden"
;
break
;
case
HiddenZone
:
return
"hidden"
;
case
PublicZone
:
typeStr
=
"public"
;
break
;
default:
return
"public"
;
}
}
xml
->
writeAttribute
(
"type"
,
typeStr
);
xml
->
writeAttribute
(
"has_coords"
,
hasCoords
?
"1"
:
"0"
);
xml
->
writeAttribute
(
"card_count"
,
QString
::
number
(
cardCount
));
for
(
int
i
=
0
;
i
<
cardList
.
size
();
++
i
)
cardList
[
i
]
->
writeElement
(
xml
);
xml
->
writeEndElement
();
}
}
bool
ServerInfo_
Player
::
readElement
(
QXmlStreamReader
*
xml
)
QList
<
ServerInfo_
Card
*>
ServerInfo_Zone
::
getCardList
()
const
{
{
if
(
currentItem
)
{
QList
<
ServerInfo_Card
*>
result
;
if
(
currentItem
->
readElement
(
xml
))
for
(
int
i
=
0
;
i
<
itemList
.
size
();
++
i
)
{
currentItem
=
0
;
ServerInfo_Card
*
card
=
dynamic_cast
<
ServerInfo_Card
*>
(
itemList
[
i
]);
return
false
;
if
(
card
)
result
.
append
(
card
);
}
return
result
;
}
ServerInfo_Counter
::
ServerInfo_Counter
(
int
_id
,
const
QString
&
_name
,
const
QColor
&
_color
,
int
_radius
,
int
_count
)
:
SerializableItem_Map
(
"counter"
)
{
insertItem
(
new
SerializableItem_Int
(
"id"
,
_id
));
insertItem
(
new
SerializableItem_String
(
"name"
,
_name
));
insertItem
(
new
SerializableItem_Color
(
"color"
,
_color
));
insertItem
(
new
SerializableItem_Int
(
"radius"
,
_radius
));
insertItem
(
new
SerializableItem_Int
(
"count"
,
_count
));
}
ServerInfo_Arrow
::
ServerInfo_Arrow
(
int
_id
,
int
_startPlayerId
,
const
QString
&
_startZone
,
int
_startCardId
,
int
_targetPlayerId
,
const
QString
&
_targetZone
,
int
_targetCardId
,
const
QColor
&
_color
)
:
SerializableItem_Map
(
"arrow"
)
{
insertItem
(
new
SerializableItem_Int
(
"id"
,
_id
));
insertItem
(
new
SerializableItem_Int
(
"start_player_id"
,
_startPlayerId
));
insertItem
(
new
SerializableItem_String
(
"start_zone"
,
_startZone
));
insertItem
(
new
SerializableItem_Int
(
"start_card_id"
,
_startCardId
));
insertItem
(
new
SerializableItem_Int
(
"target_player_id"
,
_targetPlayerId
));
insertItem
(
new
SerializableItem_String
(
"target_zone"
,
_targetZone
));
insertItem
(
new
SerializableItem_Int
(
"target_card_id"
,
_targetCardId
));
insertItem
(
new
SerializableItem_Color
(
"color"
,
_color
));
}
ServerInfo_Player
::
ServerInfo_Player
(
int
_playerId
,
const
QString
&
_name
,
const
QList
<
ServerInfo_Zone
*>
&
_zoneList
,
const
QList
<
ServerInfo_Counter
*>
&
_counterList
,
const
QList
<
ServerInfo_Arrow
*>
&
_arrowList
)
:
SerializableItem_Map
(
"player"
),
zoneList
(
_zoneList
),
counterList
(
_counterList
),
arrowList
(
_arrowList
)
{
insertItem
(
new
SerializableItem_Int
(
"player_id"
,
_playerId
));
insertItem
(
new
SerializableItem_String
(
"name"
,
_name
));
for
(
int
i
=
0
;
i
<
_zoneList
.
size
();
++
i
)
itemList
.
append
(
_zoneList
[
i
]);
for
(
int
i
=
0
;
i
<
_counterList
.
size
();
++
i
)
itemList
.
append
(
_counterList
[
i
]);
for
(
int
i
=
0
;
i
<
_arrowList
.
size
();
++
i
)
itemList
.
append
(
_arrowList
[
i
]);
}
void
ServerInfo_Player
::
extractData
()
{
for
(
int
i
=
0
;
i
<
itemList
.
size
();
++
i
)
{
ServerInfo_Zone
*
zone
=
dynamic_cast
<
ServerInfo_Zone
*>
(
itemList
[
i
]);
ServerInfo_Counter
*
counter
=
dynamic_cast
<
ServerInfo_Counter
*>
(
itemList
[
i
]);
ServerInfo_Arrow
*
arrow
=
dynamic_cast
<
ServerInfo_Arrow
*>
(
itemList
[
i
]);
if
(
zone
)
zoneList
.
append
(
zone
);
else
if
(
counter
)
counterList
.
append
(
counter
);
else
if
(
arrow
)
arrowList
.
append
(
arrow
);
}
}
if
(
xml
->
isStartElement
()
&&
(
xml
->
name
()
==
"player"
))
{
playerId
=
xml
->
attributes
().
value
(
"player_id"
).
toString
().
toInt
();
name
=
xml
->
attributes
().
value
(
"name"
).
toString
();
}
else
if
(
xml
->
isStartElement
()
&&
(
xml
->
name
()
==
"zone"
))
{
ServerInfo_Zone
*
zone
=
new
ServerInfo_Zone
;
zoneList
.
append
(
zone
);
currentItem
=
zone
;
}
else
if
(
xml
->
isStartElement
()
&&
(
xml
->
name
()
==
"counter"
))
{
ServerInfo_Counter
*
counter
=
new
ServerInfo_Counter
;
counterList
.
append
(
counter
);
currentItem
=
counter
;
}
else
if
(
xml
->
isStartElement
()
&&
(
xml
->
name
()
==
"arrow"
))
{
ServerInfo_Arrow
*
arrow
=
new
ServerInfo_Arrow
;
arrowList
.
append
(
arrow
);
currentItem
=
arrow
;
}
else
if
(
xml
->
isEndElement
()
&&
(
xml
->
name
()
==
"player"
))
return
true
;
if
(
currentItem
)
if
(
currentItem
->
readElement
(
xml
))
currentItem
=
0
;
return
false
;
}
void
ServerInfo_Player
::
writeElement
(
QXmlStreamWriter
*
xml
)
{
xml
->
writeStartElement
(
"player"
);
xml
->
writeAttribute
(
"player_id"
,
QString
::
number
(
playerId
));
xml
->
writeAttribute
(
"name"
,
name
);
for
(
int
i
=
0
;
i
<
zoneList
.
size
();
++
i
)
zoneList
[
i
]
->
writeElement
(
xml
);
for
(
int
i
=
0
;
i
<
counterList
.
size
();
++
i
)
counterList
[
i
]
->
writeElement
(
xml
);
for
(
int
i
=
0
;
i
<
arrowList
.
size
();
++
i
)
arrowList
[
i
]
->
writeElement
(
xml
);
xml
->
writeEndElement
();
}
bool
DeckList_File
::
readElement
(
QXmlStreamReader
*
xml
)
{
if
(
xml
->
isEndElement
())
return
true
;
else
return
false
;
}
void
DeckList_File
::
writeElement
(
QXmlStreamWriter
*
xml
)
{
xml
->
writeStartElement
(
"file"
);
xml
->
writeAttribute
(
"name"
,
name
);
xml
->
writeAttribute
(
"id"
,
QString
::
number
(
id
));
xml
->
writeAttribute
(
"upload_time"
,
QString
::
number
(
uploadTime
.
toTime_t
()));
xml
->
writeEndElement
();
}
}
DeckList_Directory
::~
DeckList_Directory
()
DeckList_TreeItem
::
DeckList_TreeItem
(
const
QString
&
_itemType
,
const
QString
&
_name
,
int
_id
)
:
SerializableItem_Map
(
_itemType
)
{
{
for
(
int
i
=
0
;
i
<
size
();
++
i
)
insertItem
(
new
SerializableItem_String
(
"name"
,
_name
));
delete
at
(
i
);
insertItem
(
new
SerializableItem_Int
(
"id"
,
_id
)
);
}
}
bool
DeckList_Directory
::
readElement
(
QXmlStreamReader
*
xml
)
DeckList_File
::
DeckList_File
(
const
QString
&
_name
,
int
_id
,
QDateTime
_uploadTime
)
:
DeckList_TreeItem
(
"file"
,
_name
,
_id
)
{
{
if
(
currentItem
)
{
insertItem
(
new
SerializableItem_DateTime
(
"upload_time"
,
_uploadTime
));
if
(
currentItem
->
readElement
(
xml
))
currentItem
=
0
;
return
false
;
}
if
(
xml
->
isStartElement
()
&&
(
xml
->
name
()
==
"directory"
))
{
DeckList_Directory
*
newItem
=
new
DeckList_Directory
(
xml
->
attributes
().
value
(
"name"
).
toString
());
append
(
newItem
);
currentItem
=
newItem
;
}
else
if
(
xml
->
isStartElement
()
&&
(
xml
->
name
()
==
"file"
))
{
DeckList_File
*
newItem
=
new
DeckList_File
(
xml
->
attributes
().
value
(
"name"
).
toString
(),
xml
->
attributes
().
value
(
"id"
).
toString
().
toInt
(),
QDateTime
::
fromTime_t
(
xml
->
attributes
().
value
(
"upload_time"
).
toString
().
toUInt
()));
append
(
newItem
);
currentItem
=
newItem
;
}
else
if
(
xml
->
isEndElement
()
&&
(
xml
->
name
()
==
"directory"
))
return
true
;
return
false
;
}
}
void
DeckList_Directory
::
writeElement
(
QXmlStreamWriter
*
xml
)
DeckList_Directory
::
DeckList_Directory
(
const
QString
&
_name
,
int
_id
)
:
DeckList_TreeItem
(
"directory"
,
_name
,
_id
)
{
{
xml
->
writeStartElement
(
"directory"
);
xml
->
writeAttribute
(
"name"
,
name
);
for
(
int
i
=
0
;
i
<
size
();
++
i
)
at
(
i
)
->
writeElement
(
xml
);
xml
->
writeEndElement
();
}
}
Prev
1
2
Next
Write
Preview
Supports
Markdown
0%
Try again
or
attach a new file
.
Cancel
You are about to add
0
people
to the discussion. Proceed with caution.
Finish editing this message first!
Cancel
Please
register
or
sign in
to comment