ergo/src/irc/server.go

47 lines
729 B
Go
Raw Normal View History

2012-04-07 20:44:59 +02:00
package irc
import (
"log"
"net"
)
type Server struct {
ch chan *ClientMessage
2012-04-08 08:32:08 +02:00
nicks map[string]*Client
2012-04-07 20:44:59 +02:00
}
type ClientMessage struct {
client *Client
message Message
}
2012-04-07 20:44:59 +02:00
func NewServer() *Server {
server := new(Server)
server.ch = make(chan *ClientMessage)
server.nicks = make(map[string]*Client)
2012-04-07 20:44:59 +02:00
go server.Receive()
return server
2012-04-07 20:44:59 +02:00
}
func (s *Server) Listen(addr string) {
listener, err := net.Listen("tcp", addr)
if err != nil {
2012-04-08 08:32:08 +02:00
log.Fatal("Server.Listen: ", err)
2012-04-07 20:44:59 +02:00
}
for {
conn, err := listener.Accept()
if err != nil {
2012-04-08 08:32:08 +02:00
log.Print("Server.Listen: ", err)
2012-04-07 20:44:59 +02:00
continue
}
go NewClient(conn).Communicate(s.ch)
2012-04-07 20:44:59 +02:00
}
}
func (s *Server) Receive() {
for m := range s.ch {
m.message.Handle(s, m.client)
2012-04-09 16:57:55 +02:00
}
2012-04-07 20:44:59 +02:00
}