source: code/trunk/server.go@ 13

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

Split downstram and upstream code into separate files

File size: 1004 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
20}
21
22type Server struct {
23 Hostname string
24 Logger Logger
25 Upstreams []Upstream // TODO: per-user
26}
27
[5]28func (s *Server) prefix() *irc.Prefix {
29 return &irc.Prefix{Name: s.Hostname}
30}
31
[10]32func (s *Server) Run() {
33 for i := range s.Upstreams {
[12]34 upstream := &s.Upstreams[i]
[10]35 // TODO: retry connecting
[12]36 go func() {
[13]37 if err := connect(s, upstream); err != nil {
[12]38 s.Logger.Printf("Failed to connect to upstream server %q: %v", upstream.Addr, err)
39 }
40 }()
[10]41 }
42}
43
[3]44func (s *Server) Serve(ln net.Listener) error {
[1]45 for {
[3]46 c, err := ln.Accept()
[1]47 if err != nil {
48 return fmt.Errorf("failed to accept connection: %v", err)
49 }
50
51 go func() {
[13]52 if err := handleConn(s, c); err != nil {
53 s.Logger.Printf("Error handling connection: %v", err)
[1]54 }
55 }()
56 }
57}
Note: See TracBrowser for help on using the repository browser.