Legend:
- Unmodified
- Added
- Removed
-
trunk/db.go
r173 r202 216 216 } 217 217 218 func (db *DB) DeleteNetwork(id int64) error { 219 db.lock.Lock() 220 defer db.lock.Unlock() 221 222 tx, err := db.db.Begin() 223 if err != nil { 224 return err 225 } 226 defer tx.Rollback() 227 228 _, err = tx.Exec("DELETE FROM Network WHERE id = ?", id) 229 if err != nil { 230 return err 231 } 232 233 _, err = tx.Exec("DELETE FROM Channel WHERE network = ?", id) 234 if err != nil { 235 return err 236 } 237 238 return tx.Commit() 239 } 240 218 241 func (db *DB) ListChannels(networkID int64) ([]Channel, error) { 219 242 db.lock.RLock() -
trunk/service.go
r151 r202 98 98 handle: handleServiceNetworkStatus, 99 99 }, 100 "delete": { 101 usage: "<name>", 102 desc: "delete a network", 103 handle: handleServiceNetworkDelete, 104 }, 100 105 }, 101 106 }, … … 144 149 } 145 150 146 func handleServiceCreateNetwork(dc *downstreamConn, params []string) error{151 func newFlagSet() *flag.FlagSet { 147 152 fs := flag.NewFlagSet("", flag.ContinueOnError) 148 153 fs.SetOutput(ioutil.Discard) 154 return fs 155 } 156 157 func handleServiceCreateNetwork(dc *downstreamConn, params []string) error { 158 fs := newFlagSet() 149 159 addr := fs.String("addr", "", "") 150 160 name := fs.String("name", "", "") … … 178 188 } 179 189 180 sendServicePRIVMSG(dc, fmt.Sprintf("created network % s successfully", network.GetName()))190 sendServicePRIVMSG(dc, fmt.Sprintf("created network %q", network.GetName())) 181 191 return nil 182 192 } … … 205 215 return nil 206 216 } 217 218 func handleServiceNetworkDelete(dc *downstreamConn, params []string) error { 219 if len(params) != 1 { 220 return fmt.Errorf("expected exactly one argument") 221 } 222 223 net := dc.user.getNetwork(params[0]) 224 if net == nil { 225 return fmt.Errorf("unknown network %q", params[0]) 226 } 227 228 if err := dc.user.deleteNetwork(net.ID); err != nil { 229 return err 230 } 231 232 sendServicePRIVMSG(dc, fmt.Sprintf("deleted network %q", net.GetName())) 233 return nil 234 } -
trunk/user.go
r201 r202 38 38 type network struct { 39 39 Network 40 user *user 41 ring *Ring 40 user *user 41 ring *Ring 42 stopped chan struct{} 42 43 43 44 lock sync.Mutex … … 51 52 user: user, 52 53 ring: NewRing(user.srv.RingCap), 54 stopped: make(chan struct{}), 53 55 history: make(map[string]uint64), 54 56 } … … 58 60 var lastTry time.Time 59 61 for { 62 select { 63 case <-net.stopped: 64 return 65 default: 66 // This space is intentionally left blank 67 } 68 60 69 if dur := time.Now().Sub(lastTry); dur < retryConnectMinDelay { 61 70 delay := retryConnectMinDelay - dur … … 91 100 defer net.lock.Unlock() 92 101 return net.conn 102 } 103 104 func (net *network) Stop() { 105 select { 106 case <-net.stopped: 107 return 108 default: 109 close(net.stopped) 110 } 111 112 if uc := net.upstream(); uc != nil { 113 uc.Close() 114 } 93 115 } 94 116 … … 266 288 return network, nil 267 289 } 290 291 func (u *user) deleteNetwork(id int64) error { 292 for i, net := range u.networks { 293 if net.ID != id { 294 continue 295 } 296 297 if err := u.srv.db.DeleteNetwork(net.ID); err != nil { 298 return err 299 } 300 301 u.forEachDownstream(func(dc *downstreamConn) { 302 if dc.network != nil && dc.network == net { 303 dc.Close() 304 } 305 }) 306 307 net.Stop() 308 u.networks = append(u.networks[:i], u.networks[i+1:]...) 309 return nil 310 } 311 312 panic("tried deleting a non-existing network") 313 }
Note:
See TracChangeset
for help on using the changeset viewer.