package main import "log" import "github.com/golang/protobuf/proto" import pb "git.wit.com/wit/witProtobuf" import "github.com/andlabs/ui" import "git.wit.com/wit/gui" var mychannel chan *pb.Event var currentMessage *pb.Event /* var windowsTextVeryLightGrey = color.RGBA{10, 10, 10, 10} var windowsTextBlack = color.RGBA{200, 200, 200, 200} var windowsTextWhite = color.RGBA{255, 255, 255, 255} var windowsTextYellow = color.RGBA{200, 200, 0, 200} var windowsTextRed = color.RGBA{200, 0, 0, 200} var windowsTextBlue = color.RGBA{0, 100, 200, 100} var windowsBgGrey = color.RGBA{100, 100, 100, 142} var windowsBgBlack = color.RGBA{55, 55, 55, 255} var linuxTextBlue = color.RGBA{0, 100, 200, 100} var linuxTextBlack = color.RGBA{0, 0, 0, 0} var linuxTextYellow = color.RGBA{200, 200, 0, 200} var linuxBgMauve = color.RGBA{72, 0, 0, 142} var linuxBgBlack = color.RGBA{55, 55, 55, 255} var linuxBgWhite = color.RGBA{0, 0, 0, 0} */ func initChannel() { mychannel = make(chan *pb.Event) } // Marshal & Unmarshal just to see if it ever fails func addEvent(msg *pb.Event) { data, err := proto.Marshal(msg) if (err != nil) { log.Printf("addEvent() something fucked up happened in Marshal") } pdata := new(pb.Event) err = proto.Unmarshal(data, pdata) if (err != nil) { log.Printf("addEvent() something fucked up happened in Unmarshal") } mychannel <- pdata } // func processEvents(mychannel chan *pb.Event) { func processEvents() { defer r() // a golang trick to try to not crash on certain errors for { currentMessage = <-mychannel log.Println("processEvents() RECIEVED msg = ", currentMessage) if (currentMessage.Type == pb.Event_DEMO) { log.Println("processEvents() do Event DEMO") } else { log.Println("processEvents() NEW PROTOBUF") gui.Data.State = "NEW PROTOBUF" } log.Println("processEvents() END on channel") } } func countVMS(data *pb.Event) int { vms := data.GetVms() log.Println("NUMBER OF vms=", len(vms)) // os.Exit(-1) return len(vms) } /* func setRowValues(mh *gui.TableData, row int, vm *pb.Event_VM) { defaultTextColor := linuxTextBlue defaultTextYellow := linuxTextYellow defaultTextBlack := linuxTextBlack if runtime.GOOS == "windows" { defaultTextColor = windowsTextRed defaultTextBlack = windowsTextBlack } // if (row % 2) == 1 { if (row == 1) { mh.Rows[row].HumanData[0].Color = color.RGBA{100, 100, 100, 142} // makes the background of each other row grey } else if (row == 2) { mh.Rows[row].HumanData[0].Color = color.RGBA{0, 0, 0, 0} // makes the background of each other row grey } else if (row == 3) { mh.Rows[row].HumanData[0].Color = color.RGBA{255, 255, 255, 255} // makes the background of each other row grey } else if (row == 4) { mh.Rows[row].HumanData[0].Color = color.RGBA{255, 255, 255, 0} // makes the background of each other row grey } else if (row == 5) { mh.Rows[row].HumanData[0].Color = color.RGBA{55, 55, 55, 255} // makes the background of each other row grey } else if (row < 10) { mh.Rows[row].HumanData[0].Color = linuxBgMauve } else { mh.Rows[row].HumanData[0].Color = color.RGBA{250, 250, 250, 250} } mh.Rows[row].HumanData[1].Text = vm.Name mh.Rows[row].HumanData[1].Color = defaultTextColor mh.Rows[row].HumanData[2].Text = vm.Hostname mh.Rows[row].HumanData[2].Color = defaultTextYellow mh.Rows[row].HumanData[3].Text = fmt.Sprintf("%d",vm.Cpus) mh.Rows[row].HumanData[3].Color = defaultTextColor mh.Rows[row].HumanData[4].Text = fmt.Sprintf("%d",vm.Memory) mh.Rows[row].HumanData[4].Color = defaultTextBlack mh.Rows[row].HumanData[5].Text = fmt.Sprintf("%d",vm.Disk) mh.Rows[row].HumanData[5].Color = defaultTextBlack mh.Rows[row].HumanData[6].Text = fmt.Sprintf("Details %s",vm.Name) } */ func ReadReceivedData(data *pb.Event, mh *gui.TableData, window *ui.Window, tab *ui.Tab) { msgItems := data.GetResults() log.Println("ReadReceivedData() Event msgItems=", msgItems) for _, item := range msgItems { log.Println(item) } nets := data.GetNetworks() log.Println("ReadReceivedData() Event networks=", nets) for _, item := range nets { log.Println(item) } vms := data.GetVms() log.Println("ReadReceivedData() Event vms=", vms) for row, vm := range vms { setRowValues(mh, row, vm) // create 'fake' button entries for the mouse clicks within tables var newGuiButton gui.GuiButton newGuiButton.Action = "SHOW VM" newGuiButton.VM = vm // set the button to this VM newGuiButton.Account = data.Account newGuiButton.W = window newGuiButton.T = tab gui.Data.AllButtons = append(gui.Data.AllButtons, newGuiButton) mh.Rows[row].HumanData[6].Button = &newGuiButton mh.Rows[row].HumanData[6].VM = vm mh.Rows[row].VM = vm log.Println("\tvm=", vm) log.Println("\tvm.Name=", vm.Name) log.Println("\tRows[row]=", mh.Rows[row]) log.Println("\tRows[row]=", row) log.Println("\tRows[row].Name=", mh.Rows[row].Name) log.Println(vm) row += 1 } }