Skip to content

Commit

Permalink
Server Umbau zwischenversion.
Browse files Browse the repository at this point in the history
  • Loading branch information
lotodore committed Jul 13, 2014
1 parent 171d05f commit 7eaa23b
Show file tree
Hide file tree
Showing 12 changed files with 42,791 additions and 39,327 deletions.
29 changes: 19 additions & 10 deletions gocode/src/gameserver/dispatcher.go
Original file line number Diff line number Diff line change
Expand Up @@ -32,34 +32,43 @@ package gameserver

import (
"log"
"pokerth"
"sync/atomic"
)

type Dispatcher struct {
handler PacketHandler
receiver chan SessionPacket
receiver chan SessionPokerTHMessage
authChan chan SessionAuthMessage
lobbyChan chan SessionLobbyMessage
lastSessionId uint32
}

func NewDispatcher(handler PacketHandler) *Dispatcher {
return &Dispatcher{handler, make(chan SessionPacket, RECV_DISPATCHER_NUM_PACKET_BUF), 0}
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 SessionPacket {
return &d.receiver
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 sessionPacket SessionPacket
var sessionMsg SessionPokerTHMessage
for {
select {
case sessionPacket = <-d.receiver:
log.Printf("Packet in dispatcher session %d type %d", sessionPacket.session.id, sessionPacket.packet.GetMessageType())
d.handler.HandlePacket(sessionPacket.session, sessionPacket.packet)
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")
}
}
}
}
21 changes: 14 additions & 7 deletions gocode/src/gameserver/lobby.go
Original file line number Diff line number Diff line change
Expand Up @@ -37,16 +37,17 @@ import (
"pokerth"
)

type PacketHandler interface {
HandlePacket(session *Session, packet *pokerth.PokerTHMessage)
}

type Lobby struct {
receiver chan SessionLobbyMessage
sessions *list.List
}

func NewLobby() *Lobby {
return &Lobby{list.New()}
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) {
Expand All @@ -71,6 +72,12 @@ func (l *Lobby) AddSession(session *Session) {
session.sender <- announce
}

func (l *Lobby) HandlePacket(session *Session, packet *pokerth.PokerTHMessage) {
log.Print("packet")
func (l *Lobby) Run() {
var lobbyMsg SessionLobbyMessage
for {
select {
case lobbyMsg = <-l.receiver:
log.Printf("Lobby packet %d", lobbyMsg.packet.GetMessageType())
}
}
}
24 changes: 20 additions & 4 deletions gocode/src/gameserver/session.go
Original file line number Diff line number Diff line change
Expand Up @@ -47,21 +47,37 @@ 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 SessionPacket
receiver chan SessionPokerTHMessage
}

type SessionPacket struct {
type SessionPokerTHMessage struct {
session *Session
packet *pokerth.PokerTHMessage
}

func NewSession(id uint32, serializer PacketSerializer, conn net.Conn, receiver *chan SessionPacket) *Session {
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}
}

Expand Down Expand Up @@ -93,7 +109,7 @@ func (s *Session) handleReceive() {
log.Print("Invalid packet")
} else {
log.Printf("Packet in: %d\n", packet.GetMessageType())
*s.receiver <- SessionPacket{s, packet}
s.receiver <- SessionPokerTHMessage{s, packet}
remainingBytes := bufPos - bytesScanned
if remainingBytes > 0 {
copy(buf[0:], buf[bytesScanned:remainingBytes])
Expand Down
3 changes: 2 additions & 1 deletion gocode/src/main/main.go
Original file line number Diff line number Diff line change
Expand Up @@ -43,7 +43,8 @@ var dispatcher *gameserver.Dispatcher

func main() {
lobby = gameserver.NewLobby()
dispatcher = gameserver.NewDispatcher(lobby)
dispatcher = gameserver.NewDispatcher(nil, lobby.GetReceiver())
go lobby.Run()
go dispatcher.Run()

listener, err := net.Listen("tcp", ":7234")
Expand Down
14 changes: 4 additions & 10 deletions pokerth.proto
Original file line number Diff line number Diff line change
Expand Up @@ -29,16 +29,10 @@
* as that of the covered work. *
*****************************************************************************/

import "src/third_party/gogoprotobuf/gogo.proto";

option java_package = "de.pokerth.protocol";
option java_outer_classname = "ProtoBuf";
option optimize_for = LITE_RUNTIME;

option (gogoproto.marshaler_all) = true;
option (gogoproto.unmarshaler_all) = true;
option (gogoproto.sizer_all) = true;

// Enumerations used by several messages.

enum NetGameMode {
Expand Down Expand Up @@ -166,6 +160,7 @@ message AuthClientRequestMessage {
optional string nickName = 5;
// Authenticated login data is according to SCRAM SHA-1
optional bytes clientUserData = 6;
optional bytes myLastSessionId = 7;
}

message AuthServerChallengeMessage {
Expand All @@ -183,14 +178,13 @@ message AuthServerVerificationMessage {
}

message InitMessage {
optional bytes myLastSessionId = 1;
// Ignored for guest login.
optional bytes avatarHash = 2;
optional bytes avatarHash = 1;
}

message InitAckMessage {
optional bytes yourAvatarHash = 3;
optional uint32 rejoinGameId = 4;
optional bytes yourAvatarHash = 1;
optional uint32 rejoinGameId = 2;
}

message AvatarRequestMessage {
Expand Down
30 changes: 19 additions & 11 deletions src/core/common/avatarmanager.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -195,13 +195,17 @@ AvatarManager::AvatarFileToNetPackets(const string &fileName, unsigned requestId
AvatarFileType fileType;
boost::shared_ptr<AvatarFileState> tmpState = OpenAvatarFileForChunkRead(fileName, fileSize, fileType);
if (tmpState.get() && fileSize && fileType != AVATAR_FILE_TYPE_UNKNOWN) {
boost::shared_ptr<NetPacket> avatarHeader(new NetPacket);
avatarHeader->GetMsg()->set_messagetype(PokerTHMessage::Type_AvatarHeaderMessage);
AvatarHeaderMessage *netHeader = avatarHeader->GetMsg()->mutable_avatarheadermessage();
netHeader->set_requestid(requestId);
netHeader->set_avatartype(static_cast<NetAvatarType>(fileType));
netHeader->set_avatarsize(fileSize);
packets.push_back(avatarHeader);
{
boost::shared_ptr<NetPacket> avatarHeader(new NetPacket);
avatarHeader->GetMsg()->set_messagetype(PokerTHMessage::Type_LobbyMessage);
LobbyMessage *netLobby = avatarHeader->GetMsg()->mutable_lobbymessage();
netLobby->set_messagetype(LobbyMessage::Type_AvatarHeaderMessage);
AvatarHeaderMessage *netHeader = netLobby->mutable_avatarheadermessage();
netHeader->set_requestid(requestId);
netHeader->set_avatartype(static_cast<NetAvatarType>(fileType));
netHeader->set_avatarsize(fileSize);
packets.push_back(avatarHeader);
}

unsigned numBytes = 0;
unsigned totalBytesRead = 0;
Expand All @@ -212,8 +216,10 @@ AvatarManager::AvatarFileToNetPackets(const string &fileName, unsigned requestId
totalBytesRead += numBytes;

boost::shared_ptr<NetPacket> avatarFile(new NetPacket);
avatarFile->GetMsg()->set_messagetype(PokerTHMessage::Type_AvatarDataMessage);
AvatarDataMessage *netFile = avatarFile->GetMsg()->mutable_avatardatamessage();
avatarFile->GetMsg()->set_messagetype(PokerTHMessage::Type_LobbyMessage);
LobbyMessage *netLobby = avatarFile->GetMsg()->mutable_lobbymessage();
netLobby->set_messagetype(LobbyMessage::Type_AvatarDataMessage);
AvatarDataMessage *netFile = netLobby->mutable_avatardatamessage();
netFile->set_requestid(requestId);
netFile->set_avatarblock((const char *)&tmpData[0], numBytes);
packets.push_back(avatarFile);
Expand All @@ -224,8 +230,10 @@ AvatarManager::AvatarFileToNetPackets(const string &fileName, unsigned requestId
retVal = ERR_NET_WRONG_AVATAR_SIZE;
else {
boost::shared_ptr<NetPacket> avatarEnd(new NetPacket);
avatarEnd->GetMsg()->set_messagetype(PokerTHMessage::Type_AvatarEndMessage);
AvatarEndMessage *netEnd = avatarEnd->GetMsg()->mutable_avatarendmessage();
avatarEnd->GetMsg()->set_messagetype(PokerTHMessage::Type_LobbyMessage);
LobbyMessage *netLobby = avatarEnd->GetMsg()->mutable_lobbymessage();
netLobby->set_messagetype(LobbyMessage::Type_AvatarEndMessage);
AvatarEndMessage *netEnd = netLobby->mutable_avatarendmessage();
netEnd->set_requestid(requestId);
packets.push_back(avatarEnd);
retVal = 0;
Expand Down
Loading

0 comments on commit 7eaa23b

Please sign in to comment.