Skip to content

Instantly share code, notes, and snippets.

@dagoof
Last active December 16, 2015 12:09
Show Gist options
  • Save dagoof/5432481 to your computer and use it in GitHub Desktop.
Save dagoof/5432481 to your computer and use it in GitHub Desktop.
golang chatroom
package main
import (
"flag"
"fmt"
"io"
"log"
"net"
)
type MultiWriter []io.Writer
func (w MultiWriter) Write(b []byte) (int, error) {
i, err := io.MultiWriter(w...).Write(b)
if err != nil {
return MultiWriter(w[i+1:]).Write(b)
}
return i, err
}
func GetConnection(s net.Listener) net.Conn {
for {
if conn, err := s.Accept(); err == nil {
return conn
}
}
panic("Could not get live connection")
}
func Pair(s net.Listener) {
var conn net.Conn
var writers = &MultiWriter{}
for {
conn = GetConnection(s)
*writers = append(*writers, conn)
go io.Copy(writers, conn)
}
}
const (
PORT = 9877
PORT_desc = "Port to run server on"
)
func main() {
var port int
flag.IntVar(&port, "port", PORT, PORT_desc)
flag.Parse()
log.Printf("Running spigot server on port %d\n", port)
server, err := net.Listen("tcp", fmt.Sprintf(":%d", port))
if err != nil {
log.Fatal(err)
}
Pair(server)
}
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment