Documentation
¶
Overview ¶
Example (ClientServer) ¶
// This example demonstrates some basic usage of the enet library.
// Here we set up a client & server, send a message between them, then
// disconnect & cleanup.
port := uint16(1234)
fmt.Printf("enet version: %s\n", enet.LinkedVersion())
// Initialize enet
enet.Initialize()
// Make our server.
server, err := enet.NewHost(enet.NewListenAddress(port), 32, 1, 0, 0)
if err != nil {
log.Fatal(fmt.Errorf("unable to create server: %w", err))
}
// For this example, we're going to wait until a disconnect event has been
// properly handled. Set this up here.
disconnected := make(chan bool, 0)
// Setup our server handling running in a separate goroutine.
go func() {
for true {
ev := server.Service(10)
switch ev.GetType() {
case enet.EventConnect:
fmt.Printf("[SERVER] new connection from client\n")
case enet.EventReceive:
fmt.Printf("[SERVER] received packet from client: %s\n", ev.GetPacket().GetData())
// We must destroy the packet when we're done with it
ev.GetPacket().Destroy()
// Send back a message to the client.
err := ev.GetPeer().SendString("message received!", 0, enet.PacketFlagReliable)
if err != nil {
log.Fatal(err)
}
case enet.EventDisconnect:
fmt.Printf("[SERVER] client disconnected")
close(disconnected)
}
}
}()
// Make a client that will speak to the server.
client, err := enet.NewHost(nil, 32, 1, 0, 0)
if err != nil {
log.Fatal(err)
}
// Connect to the server.
peer, err := client.Connect(enet.NewAddress("localhost", port), 1, 0)
if err != nil {
log.Fatal(err)
}
// Keep checking the client until we get a response from the server.
done := false
for !done {
ev := client.Service(10)
switch ev.GetType() {
case enet.EventReceive:
fmt.Printf("[CLIENT] received packet from server: %s\n", string(ev.GetPacket().GetData()))
ev.GetPacket().Destroy()
done = true
case enet.EventNone:
// If nothing else to do, send a packet.
fmt.Printf("[CLIENT] sending packet to server\n")
err = peer.SendString("hello world", 0, enet.PacketFlagReliable)
if err != nil {
log.Fatal(err)
}
}
}
// Immediately disconnect the client.
peer.DisconnectNow(0)
// Wait for the disconnection to be handled by the server.
<-disconnected
// Cleanup.
client.Destroy()
server.Destroy()
enet.Deinitialize()
Output: enet version: 1.3.17 [SERVER] new connection from client [CLIENT] sending packet to server [SERVER] received packet from client: hello world [CLIENT] received packet from server: message received! [SERVER] client disconnected
Index ¶
Examples ¶
Constants ¶
View Source
const ( // PacketFlagReliable packets must be received by the target peer and resend attempts // should be made until the packet is delivered PacketFlagReliable PacketFlags = C.ENET_PACKET_FLAG_RELIABLE // PacketFlagUnsequenced packets will not be sequenced with other packets not supported // for reliable packets PacketFlagUnsequenced = C.ENET_PACKET_FLAG_UNSEQUENCED // PacketFlagNoAllocate packets will not allocate data, and user must supply it instead PacketFlagNoAllocate = C.ENET_PACKET_FLAG_NO_ALLOCATE // PacketFlagUnreliableFragment packets will be fragmented using unreliable (instead of // reliable) sends if it exceeds the MTU PacketFlagUnreliableFragment = C.ENET_PACKET_FLAG_UNRELIABLE_FRAGMENT // PacketFlagSent specifies whether the packet has been sent from all queues it has been // entered into PacketFlagSent = C.ENET_PACKET_FLAG_SENT )
Variables ¶
This section is empty.
Functions ¶
func LinkedVersion ¶
func LinkedVersion() string
LinkedVersion returns the linked version of enet currently being used. Returns MAJOR.MINOR.PATCH as a string.
Types ¶
type Address ¶
type Address interface {
SetHostAny()
SetHost(ip string)
SetPort(port uint16)
String() string
GetPort() uint16
}
Address specifies a portable internet address structure.
func NewListenAddress ¶
NewListenAddress makes a new address ready for listening on ENET_HOST_ANY
type Event ¶
type Event interface {
GetType() EventType
GetPeer() Peer
GetChannelID() uint8
GetData() uint32
GetPacket() Packet
}
Event as returned by Host.Service()
type EventType ¶
type EventType int
EventType is a type of event
const ( // EventNone means that no event occurred within the specified time limit EventNone EventType = iota // EventConnect means that a connection request initiated by Host.Connect has completed // The peer field contains the peer which successfully connected EventConnect // EventDisconnect means that a peer has disconnected. This event is generated on a // successful completion of a disconnect initiated by Peer.Disconnect, if a peer has // timed out, or if a connection request intialized by Host.Connect has timed out. The // peer field contains the peer which disconnected. The data field contains user supplied // data describing the disconnection, or 0, if none is available. EventDisconnect // EventReceive means that a packet has been received from a peer. The peer field // specifies the peer which sent the packet. The channelID field specifies the channel // number upon which the packet was received. The packet field contains the packet that // was received; this packet must be destroyed with Packet.Destroy after use. EventReceive )
type Host ¶
type Host interface {
Destroy()
Service(timeout uint32) Event
Connect(addr Address, channelCount int, data uint32) (Peer, error)
CompressWithRangeCoder() error
BroadcastBytes(data []byte, channel uint8, flags PacketFlags) error
BroadcastPacket(packet Packet, channel uint8) error
BroadcastString(str string, channel uint8, flags PacketFlags) error
SetChecksumCRC32() error
UsingNewPacket() error
}
Host for communicating with peers
type Packet ¶
type Packet interface {
Destroy()
GetData() []byte
GetFlags() PacketFlags
}
Packet may be sent to or received from a peer
type Peer ¶
type Peer interface {
GetAddress() Address
Disconnect(data uint32)
DisconnectNow(data uint32)
DisconnectLater(data uint32)
SendBytes(data []byte, channel uint8, flags PacketFlags) error
SendString(str string, channel uint8, flags PacketFlags) error
SendPacket(packet Packet, channel uint8) error
// SetData sets an arbitrary value against a peer. This is useful to attach some
// application-specific data for future use, such as an identifier.
//
// http://enet.bespin.org/structENetPeer.html#a1873959810db7ac7a02da90469ee384e
//
// Note that due to the way the enet library works, if using this you are
// responsible for clearing this data when the peer is finished with.
// SetData(nil) will free underlying memory and avoid any leaks.
//
// See http://enet.bespin.org/Tutorial.html#ManageHost for an example of this
// in the underlying library.
SetData(data []byte)
// GetData returns an application-specific value that's been set
// against this peer. This returns nil if no data has been set.
//
// http://enet.bespin.org/structENetPeer.html#a1873959810db7ac7a02da90469ee384e
GetData() []byte
}
Peer is a peer which data packets may be sent or received from
Click to show internal directories.
Click to hide internal directories.