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") }
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") }
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") }
// 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) } }
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!") }