// onNewSocket is triggered as soon as a new socket connects. func onNewSocket(s *glue.Socket) { // Create the BitMonster Socket value. socket := &Socket{ socket: s, chanCall: s.Channel(channelCall), chanEvent: s.Channel(channelEvent), values: make(map[interface{}]interface{}), valueTimeouts: make(map[interface{}]*time.Timer), } // Save itself to the glue Value. s.Value = socket // Set the emitter. // Create a new emitter, set the recover function and the max listeners. socket.emitter = emission.NewEmitter(). RecoverWith(recoverEmitter). SetMaxListeners(emitterMaxListeners) // We won't read any data from the socket itself. // Discard the received data! s.DiscardRead() // Set the function which is triggered as soon as the socket is closed. s.OnClose(func() { onCloseSocket(socket) }) // Prepare the call channel. socket.chanCall.OnRead(func(data string) { // Trigger the call request. handleCallRequest(socket, data) }) // Prepare the event channel. socket.chanEvent.OnRead(func(data string) { // Trigger the event request. handleEventRequest(socket, data) }) // Trigger the event. emitter.Emit(emitterOnNewSocket, socket) }
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!") }