server

package
v0.0.0-...-34ce8e4 Latest Latest
Warning

This package is not in the latest version of its module.

Go to latest
Published: Nov 1, 2018 License: MIT Imports: 13 Imported by: 0

Documentation

Index

Constants

View Source
const (
	PermanentExpire = -1
)

Variables

This section is empty.

Functions

func BumpTriad

func BumpTriad(id *binary.Triad) (result binary.Triad)

func BumpUInt16

func BumpUInt16(id *uint16) (result uint16)

Types

type Expire

type Expire struct {
	Time     time.Time
	Duration time.Duration
}

func (*Expire) IsPermanent

func (exp *Expire) IsPermanent() bool

type Handler

type Handler interface {

	// Start is called when the server is started
	StartServer()

	// Close is called when the server is closed
	CloseServer()

	// HandlePing is called when a ping packet is received
	HandlePing(addr net.Addr)

	// OpenedPreConn is called when a new client is created before
	OpenedPreConn(addr net.Addr)

	// OpenedConn is called when a new client is created
	OpenedConn(uid int64, addr net.Addr)

	// ClosedPreConn is called when a client is closed before
	ClosedPreConn(uid int64)

	// ClosedConn is called when a client is closed
	ClosedConn(uid int64)

	// Timeout is called when a client is timed out
	Timedout(uid int64)

	// AddedBlockedAddress is called when a client is added blocked address
	AddedBlockedAddress(ip net.IP, reason string)

	// RemovedBlockedAddress is called when a client is removed blocked address
	RemovedBlockedAddress(ip net.IP)

	// HandleSendPacket handles a packet sent from the server to a client
	HandleSendPacket(addr net.Addr, pk raknet.Packet)

	// HandleRawPacket handles a raw packet no processed in Raknet server
	HandleRawPacket(addr net.Addr, pk raknet.Packet)

	// HandlePacket handles a message packet
	HandlePacket(uid int64, pk raknet.Packet)

	// HandleUnknownPacket handles a unknown packet
	HandleUnknownPacket(uid int64, pk raknet.Packet)
}

Handler handles processing from server

type Handlers

type Handlers []Handler

type Server

type Server struct {
	Logger          raknet.Logger
	Handlers        Handlers
	MaxConnections  int
	MTU             int
	Identifier      identifier.Identifier
	NetworkProtocol int

	UUID uuid.UUID

	// BroadcastingEnabled broadcast the server for the outside
	// if it enabled, the server send UnconnectedPong when received UnconnectPing.
	BroadcastingEnabled bool
	// contains filtered or unexported fields
}

func (*Server) AddBlockedAddress

func (ser *Server) AddBlockedAddress(ip net.IP, exp *Expire, reason string)

func (*Server) Cancel

func (s *Server) Cancel() context.CancelFunc

func (*Server) CloseSession

func (ser *Server) CloseSession(addr *net.UDPAddr, reason string) error

func (*Server) CloseSessionGUID

func (ser *Server) CloseSessionGUID(guid int64, reason string) error

func (*Server) Count

func (ser *Server) Count() int

func (*Server) GetSession

func (ser *Server) GetSession(addr *net.UDPAddr) (*Session, bool)

func (*Server) GetSessionGUID

func (ser *Server) GetSessionGUID(guid int64) (*Session, bool)

func (*Server) HasBlockedAddress

func (ser *Server) HasBlockedAddress(ip net.IP) bool

func (*Server) HasSession

func (ser *Server) HasSession(addr net.Addr) bool

func (*Server) HasSessionGUID

func (ser *Server) HasSessionGUID(guid int64) bool

func (*Server) IsClosed

func (ser *Server) IsClosed() bool

func (*Server) IsRunning

func (ser *Server) IsRunning() bool

func (*Server) ListenAndServe

func (ser *Server) ListenAndServe(ctx context.Context, addr *net.UDPAddr) error

func (*Server) RangeSessions

func (ser *Server) RangeSessions(f func(key string, value *Session) bool) error

RangeSessions processes for the sessions instead of "for range". if f returns false, stops the loop.

key is string(returned net.Addr.String()), value is *Session returns errors if key and value is invalid.

func (*Server) RemoveBlockedAddress

func (ser *Server) RemoveBlockedAddress(ip net.IP)

func (*Server) SendPacket

func (ser *Server) SendPacket(guid int64, b []byte, reliability raknet.Reliability, channel int) error

func (*Server) SendRawPacket

func (ser *Server) SendRawPacket(addr *net.UDPAddr, b []byte)

func (*Server) Serve

func (ser *Server) Serve(ctx context.Context, l *net.UDPConn) error

Serve serves a Raknet server

func (*Server) SetCancel

func (s *Server) SetCancel(cancel context.CancelFunc)

func (*Server) Shutdown

func (s *Server) Shutdown()

func (*Server) Start

func (ser *Server) Start(ip string, port int)

func (*Server) State

func (ser *Server) State() ServerState

type ServerState

type ServerState int

ServerState is a server state

const (
	StateNew ServerState = iota
	StateRunning
	StateClosed
)

type Session

type Session struct {
	// Addr is the client's address to connect
	Addr *net.UDPAddr

	// Conn is a connection for the client
	Conn *net.UDPConn

	// Logger is a logger
	Logger raknet.Logger

	// Server is the server instance.
	Server *Server

	// GUID is session's GUID
	GUID int64

	// MTU is the max packet size to receive and send
	MTU int

	State SessionState

	// Latency is the average latency time data
	Latency *raknet.Latency

	// PacketReceivedCount is sent a packet counter
	// It's used to check packets count on every second
	PacketSentCount int

	// PacketReceivedCount is received a packet counter
	// It's used to check packets count on every second
	PacketReceivedCount int

	// LastPacketSendTime is the last time sent a packet
	LastPacketSendTime time.Time

	// LastPacketReceiveTime is the last time received a packet
	LastPacketReceiveTime time.Time

	// LastRecoverySendTime is the last time sent a lost packet
	LastRecoverySendTime time.Time

	// LastKeepAliveSendTime is the last time sent DetectLostConnection packet
	LastKeepAliveSendTime time.Time

	// LastPacketCounterResetTime is the last time reset packet counters
	LastPacketCounterResetTime time.Time

	// LastPingSendTime is the last time sent a ping packet
	LastPingSendTime time.Time
	// contains filtered or unexported fields
}

Session

func (*Session) Close

func (session *Session) Close() error

Close closes the session

func (*Session) Init

func (session *Session) Init()

func (*Session) SendCustomPacket

func (session *Session) SendCustomPacket(epks []*protocol.EncapsulatedPacket, updateRecoveryQueue bool) (int, error)

func (*Session) SendPacket

func (session *Session) SendPacket(pk raknet.Packet, reliability raknet.Reliability, channel int) (protocol.EncapsulatedPacket, error)

func (*Session) SendPacketBytes

func (session *Session) SendPacketBytes(b []byte, reliability raknet.Reliability, channel int) (protocol.EncapsulatedPacket, error)

func (*Session) SendRawPacket

func (session *Session) SendRawPacket(pk raknet.Packet)

func (*Session) SystemAddress

func (session *Session) SystemAddress() *raknet.SystemAddress

func (*Session) Timestamp

func (session *Session) Timestamp() int64

Timestamp returns a time from a time connected used for Ping and Pong packets

type SessionState

type SessionState int
const (
	StateDisconected SessionState = iota
	StateHandshaking
	StateConnected
)

type SplitPacket

type SplitPacket struct {
	SplitID     int
	SplitCount  int
	Reliability raknet.Reliability

	Payloads map[int][]byte
}

SplitPacket is used to easily assemble split packets

func (*SplitPacket) Update

func (spk *SplitPacket) Update(epk *protocol.EncapsulatedPacket) (b []byte)

Jump to

Keyboard shortcuts

? : This menu
/ : Search site
f or F : Jump to
y or Y : Canonical URL