github.com/mdaxf/iac@v0.0.0-20240519030858-58a061660378/integration/messagebus/msgbus.go (about) 1 package messagebus 2 3 import ( 4 "fmt" 5 "net/http" 6 7 "github.com/mdaxf/iac/integration/messagebus/glue" 8 "github.com/mdaxf/iac/logger" 9 ) 10 11 type MessageBus struct { 12 // Set the http file server. 13 Port int 14 ChannelID string 15 Server *glue.Server 16 Channel *glue.Channel 17 iLog logger.Log 18 } 19 20 func NewMessageBus(port int, channel string) *MessageBus { 21 iLog := logger.Log{ModuleName: logger.Framework, User: "System", ControllerName: "MessageBus"} 22 23 iLog.Debug(fmt.Sprintf(("Create new MessageBus with port %d and channel : %s"), port, channel)) 24 25 mb := &MessageBus{ 26 Port: port, 27 ChannelID: channel, 28 iLog: iLog, 29 } 30 mb.Server = mb.CreateServer() 31 32 mb.iLog.Debug(fmt.Sprintf("MessageBus created: %v", mb)) 33 34 mb.Server.OnNewSocket(mb.CreateChannel) 35 mb.iLog.Debug(fmt.Sprintf("MessageBus Server OnNewSocket: %v", mb.Server.OnNewSocket)) 36 37 // Run the glue server. 38 39 http.Handle("/", http.StripPrefix("/", http.FileServer(http.Dir("public")))) 40 http.Handle("/dist/", http.StripPrefix("/dist/", http.FileServer(http.Dir("../../client/dist")))) 41 42 err := mb.Server.Run() 43 if err != nil { 44 mb.iLog.Error(fmt.Sprintf("Message Bus Server Run error: %v", err)) 45 } 46 mb.iLog.Debug(fmt.Sprintf("Message Bus Server in port %d with channel%s Run", mb.Port, mb.ChannelID)) 47 48 return mb 49 } 50 51 func (mb *MessageBus) CreateServer() *glue.Server { 52 53 // Create a new glue server. 54 port := fmt.Sprintf(":%d", mb.Port) 55 56 mb.iLog.Info(fmt.Sprintf("Starting MessageBus on port %s", port)) 57 58 server := glue.NewServer(glue.Options{ 59 HTTPListenAddress: port, 60 HTTPSocketType: glue.HTTPSocketTypeTCP, 61 }) 62 return server 63 } 64 65 func (mb *MessageBus) CreateChannel(s *glue.Socket) { 66 // We won't read any data from the socket itself. 67 // Discard received data! 68 s.DiscardRead() 69 70 // Set a function which is triggered as soon as the socket is closed. 71 s.OnClose(func() { 72 mb.iLog.Info(fmt.Sprintf("socket closed with remote address: %s", s.RemoteAddr())) 73 }) 74 75 // Create a channel. 76 mb.Channel = s.Channel(mb.ChannelID) 77 78 /* 79 // Set the channel on read event function. 80 c.OnRead(func(data string) { 81 // Echo the received data back to the client. 82 c.Write("channel golang: " + data) 83 }) 84 85 // Write to the channel. 86 c.Write("Hello Gophers!") */ 87 88 }