package main import "fmt" import "log" import "net" import "os" import "io" import "bytes" import "github.com/golang/protobuf/proto" import pb "git.wit.com/wit/witProtobuf" // sits on the channel waiting for Events func processEvents(mychannel chan *pb.Event) { for { message := <-mychannel log.Println("processEvents() on channel recieved a message") pb.DumpEventData(message) } } func main() { fmt.Println("Staring Server..") c := make(chan *pb.Event) go processEvents(c) listener, err := net.Listen("tcp", ":8080") if err != nil { fmt.Fprintf(os.Stderr, "Fatal error: %s", err.Error()) os.Exit(1) } for { if conn, err := listener.Accept(); err == nil { go handleProtoClient(conn, c) } else { continue } } } func handleProtoClient(conn net.Conn, c chan *pb.Event) { fmt.Println("Connected!") defer conn.Close() var buf bytes.Buffer _, err := io.Copy(&buf, conn) if err != nil { fmt.Fprintf(os.Stderr, "Fatal error: %s", err.Error()) return } pdata := new(pb.Event) err = proto.Unmarshal(buf.Bytes(), pdata) if err != nil { fmt.Fprintf(os.Stderr, "Fatal error: %s", err.Error()) return } c <- pdata }