Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Implement player network join/leave events #37

Open
wants to merge 3 commits into
base: master
Choose a base branch
from
Open
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
2 changes: 2 additions & 0 deletions client/connect/connectImpl.go
Original file line number Diff line number Diff line change
Expand Up @@ -85,6 +85,8 @@ func (this *ConnectImpl) HandlePacket(packet packet.Packet) (err error) {
this.DispatchEvent("redirect", WrapEventRedirect(packet.(*connect.PacketRedirectEvent)))
case connect.PACKET_SERVER_EVENT:
this.DispatchEvent("server", WrapEventServer(packet.(*connect.PacketServerEvent)))
case connect.PACKET_PLAYER_EVENT:
this.DispatchEvent("player", WrapEventPlayer(packet.(*connect.PacketPlayerEvent)))
}
return
}
Expand Down
20 changes: 20 additions & 0 deletions client/connect/eventPlayer.go
Original file line number Diff line number Diff line change
@@ -0,0 +1,20 @@
package connect

import (
"github.com/LilyPad/GoLilyPad/packet/connect"
"github.com/satori/go.uuid"
)

type EventPlayer struct {
Joining bool
PlayerName string
PlayerUUID uuid.UUID
}

func WrapEventPlayer(packet *connect.PacketPlayerEvent) (this *EventPlayer) {
this = new(EventPlayer)
this.Joining = packet.Joining
this.PlayerName = packet.PlayerName
this.PlayerUUID = packet.PlayerUUID
return
}
2 changes: 2 additions & 0 deletions packet/connect/constants.go
Original file line number Diff line number Diff line change
Expand Up @@ -26,6 +26,7 @@ const (
PACKET_MESSAGE_EVENT = 0x03
PACKET_REDIRECT_EVENT = 0x04
PACKET_SERVER_EVENT = 0x05
PACKET_PLAYER_EVENT = 0x06
)

var requestCodecs = []RequestCodec{
Expand Down Expand Up @@ -61,4 +62,5 @@ var PacketCodec = packet.NewPacketCodecRegistry([]packet.PacketCodec{
PACKET_MESSAGE_EVENT: new(packetMessageEventCodec),
PACKET_REDIRECT_EVENT: new(packetRedirectEventCodec),
PACKET_SERVER_EVENT: new(packetServerEventCodec),
PACKET_PLAYER_EVENT: new(packetPlayerEventCodec),
})
69 changes: 69 additions & 0 deletions packet/connect/packetPlayerEvent.go
Original file line number Diff line number Diff line change
@@ -0,0 +1,69 @@
package connect

import (
"github.com/LilyPad/GoLilyPad/packet"
"io"
"github.com/satori/go.uuid"
)

type PacketPlayerEvent struct {
Joining bool
PlayerName string
PlayerUUID uuid.UUID
}

func NewPacketPlayerEventJoin(playerName string, playerUUID uuid.UUID) (this *PacketPlayerEvent) {
this = new(PacketPlayerEvent)
this.Joining = true
this.PlayerName = playerName
this.PlayerUUID = playerUUID
return
}

func NewPacketPlayerEventLeave(playerName string, playerUUID uuid.UUID) (this *PacketPlayerEvent) {
this = new(PacketPlayerEvent)
this.Joining = false
this.PlayerName = playerName
this.PlayerUUID = playerUUID
return
}

func (this *PacketPlayerEvent) Id() int {
return PACKET_PLAYER_EVENT
}

type packetPlayerEventCodec struct {
}

func (this *packetPlayerEventCodec) Decode(reader io.Reader) (decode packet.Packet, err error) {
packetPlayerEvent := new(PacketPlayerEvent)
packetPlayerEvent.Joining, err = packet.ReadBool(reader)
if err != nil {
return
}
packetPlayerEvent.PlayerName, err = packet.ReadString(reader)
if err != nil {
return
}
packetPlayerEvent.PlayerUUID, err = packet.ReadUUID(reader)
if err != nil {
return
}
decode = packetPlayerEvent
return
}

func (this *packetPlayerEventCodec) Encode(writer io.Writer, encode packet.Packet) (err error) {
packetPlayerEvent := encode.(*PacketPlayerEvent)
err = packet.WriteBool(writer, packetPlayerEvent.Joining)
if err != nil {
return
}
err = packet.WriteString(writer, packetPlayerEvent.PlayerName)
if err != nil {
return
}
err = packet.WriteUUID(writer, packetPlayerEvent.PlayerUUID)
return
return
}
7 changes: 7 additions & 0 deletions server/connect/session.go
Original file line number Diff line number Diff line change
Expand Up @@ -270,6 +270,8 @@ func (this *Session) HandlePacket(packet packet.Packet) (err error) {
}
case connect.REQUEST_NOTIFY_PLAYER:
if this.Authorized() && this.role == ROLE_PROXY {
var playerPacket *connect.PacketPlayerEvent

add := request.(*connect.RequestNotifyPlayer).Add
player := request.(*connect.RequestNotifyPlayer).Player
uuid := request.(*connect.RequestNotifyPlayer).Uuid
Expand All @@ -279,12 +281,17 @@ func (this *Session) HandlePacket(packet packet.Packet) (err error) {
break
}
this.proxyPlayers[player] = uuid
playerPacket = connect.NewPacketPlayerEventJoin(player, uuid)
} else {
if uuid, ok := this.proxyPlayers[player]; ok {
this.server.networkCache.RemovePlayer(player, uuid)
delete(this.proxyPlayers, player)
playerPacket = connect.NewPacketPlayerEventLeave(player, uuid)
}
}
for _, session := range this.server.SessionRegistry(ROLE_AUTHORIZED).GetAll() {
session.Write(playerPacket)
}
result = connect.NewResultNotifyPlayer()
} else {
statusCode = connect.STATUS_ERROR_ROLE
Expand Down