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.