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 server side disconnect packet #45

Open
wants to merge 4 commits into
base: master
Choose a base branch
from
Open
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
31 changes: 31 additions & 0 deletions prudp_endpoint.go
Original file line number Diff line number Diff line change
Expand Up @@ -641,6 +641,37 @@ func (pep *PRUDPEndPoint) sendPing(connection *PRUDPConnection) {
pep.Server.sendPacket(ping)
}

// Disconnect sends a disconnect packet to the connection. The connection
// is cleaned up once it times out or acknowledges the disconnect.
func (pep *PRUDPEndPoint) Disconnect(connection *PRUDPConnection) {
var disconnect PRUDPPacketInterface

switch connection.DefaultPRUDPVersion {
case 0:
disconnect, _ = NewPRUDPPacketV0(pep.Server, connection, nil)
case 1:
disconnect, _ = NewPRUDPPacketV1(pep.Server, connection, nil)
case 2:
disconnect, _ = NewPRUDPPacketLite(pep.Server, connection, nil)
}

disconnect.SetType(constants.DisconnectPacket)
disconnect.SetSourceVirtualPortStreamType(connection.StreamType)
disconnect.SetSourceVirtualPortStreamID(pep.StreamID)
disconnect.SetDestinationVirtualPortStreamType(connection.StreamType)
disconnect.SetDestinationVirtualPortStreamID(connection.StreamID)
disconnect.SetSubstreamID(0)

pep.Server.sendPacket(disconnect)

discriminator := fmt.Sprintf("%s-%d-%d", connection.Address().String(), connection.StreamType, pep.StreamID)

connection.cleanup()
pep.Connections.Delete(discriminator)

pep.emit("disconnect", disconnect)
Copy link
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

I don't think we need this? We already have the "connection ended" event anyway

Copy link
Contributor Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

The emit? What's it's purpose anyways?

Copy link
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

The purpose of emit is to send event signals to listeners. We don't personally make use of all of them, but another developer may find them useful in their own servers (such as more detailed logging at the packet level). The syn, connect, disconnect and data events are emitted when packets of those types are received. Though looking at the code again, we only expose the disconnect and data packet events (in previous versions of the library the On method was exported and could be used to listen for any packet type, but this was removed in favor of specific OnData and OnDisconnect methods)

}

// FindConnectionByID returns the PRUDP client connected with the given connection ID
func (pep *PRUDPEndPoint) FindConnectionByID(connectedID uint32) *PRUDPConnection {
var connection *PRUDPConnection
Expand Down