2017-02-15 07:40:43 +01:00
|
|
|
package main
|
|
|
|
|
|
|
|
import (
|
2019-06-25 21:10:10 +02:00
|
|
|
"log"
|
2017-02-15 07:40:43 +01:00
|
|
|
|
2019-10-25 00:27:02 +02:00
|
|
|
"github.com/kataras/iris/v12"
|
|
|
|
"github.com/kataras/iris/v12/websocket"
|
2017-02-15 07:40:43 +01:00
|
|
|
)
|
|
|
|
|
|
|
|
type clientPage struct {
|
|
|
|
Title string
|
|
|
|
Host string
|
|
|
|
}
|
|
|
|
|
|
|
|
func main() {
|
|
|
|
app := iris.New()
|
2017-06-11 22:07:50 +02:00
|
|
|
|
2017-08-27 19:35:23 +02:00
|
|
|
app.RegisterView(iris.HTML("./templates", ".html")) // select the html engine to serve templates
|
2017-02-15 07:40:43 +01:00
|
|
|
|
2019-06-25 21:10:10 +02:00
|
|
|
// Almost all features of neffos are disabled because no custom message can pass
|
|
|
|
// when app expects to accept and send only raw websocket native messages.
|
|
|
|
// When only allow native messages is a fact?
|
|
|
|
// When the registered namespace is just one and it's empty
|
|
|
|
// and contains only one registered event which is the `OnNativeMessage`.
|
|
|
|
// When `Events{...}` is used instead of `Namespaces{ "namespaceName": Events{...}}`
|
|
|
|
// then the namespace is empty "".
|
2019-07-11 11:59:11 +02:00
|
|
|
ws := websocket.New(websocket.DefaultGorillaUpgrader, websocket.Events{
|
|
|
|
websocket.OnNativeMessage: func(nsConn *websocket.NSConn, msg websocket.Message) error {
|
2019-06-25 21:10:10 +02:00
|
|
|
log.Printf("Server got: %s from [%s]", msg.Body, nsConn.Conn.ID())
|
|
|
|
|
|
|
|
nsConn.Conn.Server().Broadcast(nsConn, msg)
|
|
|
|
return nil
|
|
|
|
},
|
2017-02-15 07:40:43 +01:00
|
|
|
})
|
|
|
|
|
2019-07-11 11:59:11 +02:00
|
|
|
ws.OnConnect = func(c *websocket.Conn) error {
|
2019-06-25 21:10:10 +02:00
|
|
|
log.Printf("[%s] Connected to server!", c.ID())
|
|
|
|
return nil
|
|
|
|
}
|
2017-02-15 07:40:43 +01:00
|
|
|
|
2019-07-11 11:59:11 +02:00
|
|
|
ws.OnDisconnect = func(c *websocket.Conn) {
|
2019-06-25 21:10:10 +02:00
|
|
|
log.Printf("[%s] Disconnected from server", c.ID())
|
|
|
|
}
|
2017-02-15 07:40:43 +01:00
|
|
|
|
2020-07-24 12:03:49 +02:00
|
|
|
app.HandleDir("/js", iris.Dir("./static/js")) // serve our custom javascript code.
|
2017-02-15 07:40:43 +01:00
|
|
|
|
2019-06-25 21:10:10 +02:00
|
|
|
// register the server on an endpoint.
|
|
|
|
// see the inline javascript code i the websockets.html, this endpoint is used to connect to the server.
|
|
|
|
app.Get("/my_endpoint", websocket.Handler(ws))
|
2017-02-15 07:40:43 +01:00
|
|
|
|
2019-06-25 21:10:10 +02:00
|
|
|
app.Get("/", func(ctx iris.Context) {
|
2022-12-13 00:37:15 +01:00
|
|
|
if err := ctx.View("client.html", clientPage{"Client Page", "localhost:8080"}); err != nil {
|
|
|
|
ctx.HTML("<h3>%s</h3>", err.Error())
|
|
|
|
return
|
|
|
|
}
|
2017-02-15 07:40:43 +01:00
|
|
|
})
|
|
|
|
|
2019-06-25 21:10:10 +02:00
|
|
|
// Target some browser windows/tabs to http://localhost:8080 and send some messages,
|
|
|
|
// see the static/js/chat.js,
|
|
|
|
// note that the client is using only the browser's native WebSocket API instead of the neffos one.
|
2020-03-05 21:41:27 +01:00
|
|
|
app.Listen(":8080")
|
2017-02-15 07:40:43 +01:00
|
|
|
}
|