Changeset 37 in code for trunk/server.go
- Timestamp:
- Feb 7, 2020, 10:36:42 AM (5 years ago)
- File:
-
- 1 edited
Legend:
- Unmodified
- Added
- Removed
-
trunk/server.go
r29 r37 3 3 import ( 4 4 "fmt" 5 "log" 5 6 "net" 6 7 "sync" … … 31 32 } 32 33 34 type user struct { 35 username string 36 srv *Server 37 38 lock sync.Mutex 39 upstreamConns []*upstreamConn 40 } 41 33 42 type Upstream struct { 34 43 Addr string … … 45 54 46 55 lock sync.Mutex 56 users map[string]*user 47 57 downstreamConns []*downstreamConn 48 upstreamConns []*upstreamConn 58 } 59 60 func NewServer() *Server { 61 return &Server{ 62 Logger: log.New(log.Writer(), "", log.LstdFlags), 63 users: make(map[string]*user), 64 } 49 65 } 50 66 … … 54 70 55 71 func (s *Server) Run() { 72 // TODO: multi-user 73 u := &user{username: "jounce", srv: s} 74 75 s.lock.Lock() 76 s.users[u.username] = u 77 s.lock.Unlock() 78 56 79 for i := range s.Upstreams { 57 80 upstream := &s.Upstreams[i] 58 81 // TODO: retry connecting 59 82 go func() { 60 conn, err := connectToUpstream( s, upstream)83 conn, err := connectToUpstream(u, upstream) 61 84 if err != nil { 62 85 s.Logger.Printf("failed to connect to upstream server %q: %v", upstream.Addr, err) … … 64 87 } 65 88 66 s.lock.Lock()67 s.upstreamConns = append(s.upstreamConns, conn)68 s.lock.Unlock()89 u.lock.Lock() 90 u.upstreamConns = append(u.upstreamConns, conn) 91 u.lock.Unlock() 69 92 70 93 if err := conn.readMessages(); err != nil { … … 72 95 } 73 96 74 s.lock.Lock()75 for i, c := range s.upstreamConns {97 u.lock.Lock() 98 for i, c := range u.upstreamConns { 76 99 if c == conn { 77 s.upstreamConns = append(s.upstreamConns[:i], s.upstreamConns[i+1:]...)100 u.upstreamConns = append(u.upstreamConns[:i], u.upstreamConns[i+1:]...) 78 101 break 79 102 } 80 103 } 81 s.lock.Unlock()104 u.lock.Unlock() 82 105 }() 83 106 }
Note:
See TracChangeset
for help on using the changeset viewer.