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
|
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
|
---|
| 20 | }
|
---|
| 21 |
|
---|
| 22 | type Server struct {
|
---|
| 23 | Hostname string
|
---|
| 24 | Logger Logger
|
---|
| 25 | Upstreams []Upstream // TODO: per-user
|
---|
| 26 | }
|
---|
| 27 |
|
---|
[5] | 28 | func (s *Server) prefix() *irc.Prefix {
|
---|
| 29 | return &irc.Prefix{Name: s.Hostname}
|
---|
| 30 | }
|
---|
| 31 |
|
---|
[10] | 32 | func (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] | 44 | func (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.