source: code/trunk/server.go@ 19

Last change on this file since 19 was 19, checked in by contact, 5 years ago

Join channels on upstream servers

File size: 1023 bytes
RevLine 
[1]1package jounce
2
3import (
4 "fmt"
5 "net"
6
7 "gopkg.in/irc.v3"
8)
9
[9]10type Logger interface {
11 Print(v ...interface{})
12 Printf(format string, v ...interface{})
13}
14
[10]15type Upstream struct {
16 Addr string
17 Nick string
18 Username string
19 Realname string
[19]20 Channels []string
[10]21}
22
23type Server struct {
24 Hostname string
25 Logger Logger
26 Upstreams []Upstream // TODO: per-user
27}
28
[5]29func (s *Server) prefix() *irc.Prefix {
30 return &irc.Prefix{Name: s.Hostname}
31}
32
[10]33func (s *Server) Run() {
34 for i := range s.Upstreams {
[12]35 upstream := &s.Upstreams[i]
[10]36 // TODO: retry connecting
[12]37 go func() {
[13]38 if err := connect(s, upstream); err != nil {
[12]39 s.Logger.Printf("Failed to connect to upstream server %q: %v", upstream.Addr, err)
40 }
41 }()
[10]42 }
43}
44
[3]45func (s *Server) Serve(ln net.Listener) error {
[1]46 for {
[3]47 c, err := ln.Accept()
[1]48 if err != nil {
49 return fmt.Errorf("failed to accept connection: %v", err)
50 }
51
52 go func() {
[13]53 if err := handleConn(s, c); err != nil {
54 s.Logger.Printf("Error handling connection: %v", err)
[1]55 }
56 }()
57 }
58}
Note: See TracBrowser for help on using the repository browser.