package main

// GECICI protokol testi (is bitince silinir): fiko_socket_io.go ile AYNI kutuphane
// (zishang520 socket.io/engine.io v2.5.0) ve ayni ayarlar (AllowEIO3, upgrade, polling+websocket).
// Kisaltilmis kalp atisi: pingInterval 3 sn + pingTimeout 2 sn = 5 sn.

import (
	"fmt"
	"net/http"
	"time"

	"github.com/zishang520/engine.io/v2/types"
	"github.com/zishang520/socket.io/v2/socket"
)

func main() {
	o := socket.DefaultServerOptions()
	o.SetAllowEIO3(true)
	o.SetAllowUpgrades(true)
	o.SetTransports(types.NewSet("polling", "websocket"))
	o.SetPingInterval(3000 * time.Millisecond)
	o.SetPingTimeout(2000 * time.Millisecond)
	io := socket.NewServer(nil, o)

	io.On("connection", func(c ...interface{}) {
		cl := c[0].(*socket.Socket)
		id := string(cl.Id())
		fmt.Printf("SUNUCU> connection id=%s cihaz-header=%v\n", id, cl.Handshake().Headers["Cihaz_kimlik"])
		cl.On("FikoYT.sistem.io.cihaz.baglandi", func(a ...interface{}) {
			fmt.Printf("SUNUCU> BAGLANDI handler tetiklendi: %v\n", a)
			go func() {
				time.Sleep(400 * time.Millisecond)
				cl.Emit("FikoYT.sistem.io.cihaz.komut", map[string]interface{}{
					"cihaz_kimlik": "TESTCIHAZ", "komut_kodu": "gorunum.on",
					"mesaj": "a&b<c>", "komutId": "id-1", "imza": "SIG==",
				})
				fmt.Println("SUNUCU> komut Emit edildi")
			}()
		})
		cl.On("FikoYT.sistem.io.cihaz.komut-cevap", func(a ...interface{}) {
			fmt.Printf("SUNUCU> KOMUT-CEVAP alindi: %v\n", a)
		})
		cl.On("disconnect", func(a ...interface{}) {
			fmt.Printf("SUNUCU> disconnect id=%s sebep=%v\n", id, a)
		})
	})
	fmt.Println("SUNUCU> dinliyor 127.0.0.1:9911")
	if err := http.ListenAndServe("127.0.0.1:9911", io.ServeHandler(o)); err != nil {
		fmt.Println("hata:", err)
	}
}
