Last active
February 6, 2019 00:06
-
-
Save goFrendiAsgard/bcde37dd6f53644360c686b89a23ad38 to your computer and use it in GitHub Desktop.
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
package main | |
import ( | |
"fmt" | |
"net/http" | |
) | |
type EventMessage struct { | |
Event string | |
Message interface{} | |
} | |
type Listener func(message interface{}) | |
func screamListener1(message interface{}) { | |
fmt.Println("[scream listener 1]", message) | |
} | |
func screamListener2(message interface{}) { | |
fmt.Println("[scream listener 2]", message) | |
} | |
func main() { | |
channel := make(chan EventMessage) | |
eventListeners := make(map[string][]Listener) | |
// register event listeners | |
eventListeners["scream"] = []Listener{ | |
screamListener1, screamListener2, | |
} | |
// catch event and trigger corresponding listener | |
go func() { | |
for { | |
fmt.Println("Receive messages") | |
eventMessage := <-channel | |
fmt.Println("Message received") | |
event, message := eventMessage.Event, eventMessage.Message | |
listeners := eventListeners[event] | |
for _, listener := range listeners { | |
listener(message) | |
} | |
} | |
}() | |
// emit event `scream Argh` | |
fmt.Println("Send messages Argh") | |
channel <- EventMessage{"scream", "Argh"} | |
// emit event `scream Hi` | |
fmt.Println("Send messages Hi") | |
channel <- EventMessage{"scream", "Hi"} | |
// create HTTP handler (i.e: our API Gateway) | |
handler := http.HandlerFunc(func (writer http.ResponseWriter, request *http.Request) { | |
fmt.Fprintf(writer, "hello, you've hit %s\n", request.URL.Path) | |
// emit event `scream whatever the url path is` | |
fmt.Println("Send messages", request.URL.Path) | |
channel <- EventMessage{"scream", request.URL.Path} | |
}) | |
// serve HTTP server | |
http.ListenAndServe(":9999", handler) | |
} |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment