Last change
on this file since 20 was 19, checked in by contact, 5 years ago |
Join channels on upstream servers
|
File size:
1023 bytes
|
Rev | Line | |
---|
[1] | 1 | package jounce
|
---|
| 2 |
|
---|
| 3 | import (
|
---|
| 4 | "fmt"
|
---|
| 5 | "net"
|
---|
| 6 |
|
---|
| 7 | "gopkg.in/irc.v3"
|
---|
| 8 | )
|
---|
| 9 |
|
---|
[9] | 10 | type Logger interface {
|
---|
| 11 | Print(v ...interface{})
|
---|
| 12 | Printf(format string, v ...interface{})
|
---|
| 13 | }
|
---|
| 14 |
|
---|
[10] | 15 | type Upstream struct {
|
---|
| 16 | Addr string
|
---|
| 17 | Nick string
|
---|
| 18 | Username string
|
---|
| 19 | Realname string
|
---|
[19] | 20 | Channels []string
|
---|
[10] | 21 | }
|
---|
| 22 |
|
---|
| 23 | type Server struct {
|
---|
| 24 | Hostname string
|
---|
| 25 | Logger Logger
|
---|
| 26 | Upstreams []Upstream // TODO: per-user
|
---|
| 27 | }
|
---|
| 28 |
|
---|
[5] | 29 | func (s *Server) prefix() *irc.Prefix {
|
---|
| 30 | return &irc.Prefix{Name: s.Hostname}
|
---|
| 31 | }
|
---|
| 32 |
|
---|
[10] | 33 | func (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] | 45 | func (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.