コード例 #1
0
ファイル: main.go プロジェクト: e4x/glue
func onNewSocket(s *glue.Socket) {
	// Set a function which is triggered as soon as the socket is closed.
	s.OnClose(func() {
		log.Printf("socket closed with remote address: %s", s.RemoteAddr())
	})

	// Run the read loop in a new goroutine.
	go readLoop(s)

	// Send a welcome string to the client.
	s.Write("Hello Client")
}
コード例 #2
0
ファイル: main.go プロジェクト: e4x/glue
func onNewSocket(s *glue.Socket) {
	// Set a function which is triggered as soon as the socket is closed.
	s.OnClose(func() {
		log.Printf("socket closed with remote address: %s", s.RemoteAddr())
	})

	// Discard all reads.
	// If received data is not discarded, then the read buffer will block as soon
	// as it is full, which will also block the keep-alive mechanism of the socket.
	// The result would be a closed socket...
	s.DiscardRead()

	// Send a welcome string to the client.
	s.Write("Hello Client")
}
コード例 #3
0
ファイル: main.go プロジェクト: ljgago/glue
func onNewSocket(s *glue.Socket) {
	// Set a function which is triggered as soon as the socket is closed.
	s.OnClose(func() {
		log.Printf("socket closed with remote address: %s", s.RemoteAddr())
	})

	// Set a function which is triggered during each received message.
	s.OnRead(func(data string) {
		// Echo the received data back to the client.
		s.Write(data)
	})

	// Send a welcome string to the client.
	s.Write("Hello Client")
}
コード例 #4
0
ファイル: server.go プロジェクト: alecdwm/webtron
// ConnectPlayer handles connecting a new player to the game
func (s *Server) ConnectPlayer(socket *glue.Socket) {
	// Logging
	log15.Debug("socket connected", "address", socket.RemoteAddr())
	socket.OnClose(func() {
		log15.Debug("socket closed", "address", socket.RemoteAddr())
	})

	// Attempt to allocate free player Slot
	if slot := s.nextSlot(); slot != -1 {
		log15.Info("Accepting new player connection", "slot", slot)
		s.ConnectedPlayers[slot] = &Player{
			Server: s,
			Slot:   slot,
			Socket: socket,
		}
		s.ConnectedPlayers[slot].Socket.OnClose(func() {
			log15.Debug("socket closed", "address", socket.RemoteAddr())
			s.DisconnectPlayer(slot)
		})
		s.NumConnectedPlayers++
		s.ConnectedPlayers[slot].Socket.Write(msg.SConnected)
		s.ConnectedPlayers[slot].Socket.Write(msg.SDisplayMessage + ":Press [SPACEBAR] To Spawn!")
		go s.ConnectedPlayers[slot].ReadLoop()

	} else {
		// No free slots available
		log15.Info("Rejecting new player connection: Server is full!")
		socket.Write(msg.SGameFull)
	}
}
コード例 #5
0
ファイル: main.go プロジェクト: e4x/glue
func onNewSocket(s *glue.Socket) {
	// We won't read any data from the socket itself.
	// Discard received data!
	s.DiscardRead()

	// Set a function which is triggered as soon as the socket is closed.
	s.OnClose(func() {
		log.Printf("socket closed with remote address: %s", s.RemoteAddr())
	})

	// Create a channel.
	c := s.Channel("golang")

	// Set the channel on read event function.
	c.OnRead(func(data string) {
		// Echo the received data back to the client.
		c.Write("channel golang: " + data)
	})

	// Write to the channel.
	c.Write("Hello Gophers!")
}