Skip to content

Commit 49b8ed4

Browse files
committedMar 5, 2019
Cleanup
1 parent d6ea2d0 commit 49b8ed4

File tree

3 files changed

+57
-56
lines changed

3 files changed

+57
-56
lines changed
 

‎cmd/cctvc/main.go

+37-37
Original file line numberDiff line numberDiff line change
@@ -3,20 +3,49 @@ package main
33
import (
44
"flag"
55
"fmt"
6-
"github.com/mattn/go-mjpeg"
7-
"golang.org/x/net/context"
8-
"google.golang.org/grpc"
96
"log"
107
"net/http"
118
"time"
129

10+
"github.com/mattn/go-mjpeg"
11+
"golang.org/x/net/context"
12+
"google.golang.org/grpc"
13+
1314
"github.com/darkwrat/cctvd/cctv"
1415
)
1516

1617
var (
17-
addr = flag.String("addr", "127.0.0.1:50051", "cctvd host:port")
18+
addr = flag.String("addr", "127.0.0.1:50051", "cctvd host:port")
19+
delay = flag.Duration("delay", 1*time.Second, "cctvd reconnect delay after failure")
1820
)
1921

22+
func live(m map[int32]*mjpeg.Stream) error {
23+
conn, err := grpc.Dial(*addr, grpc.WithInsecure())
24+
if err != nil {
25+
return fmt.Errorf("could not connect: %s", err)
26+
}
27+
defer conn.Close()
28+
29+
c := cctv.NewCCTVClient(conn)
30+
feeds, err := c.Feeds(context.Background(), &cctv.Channels{Mask: 0xffff})
31+
if err != nil {
32+
return fmt.Errorf("could not subscribe: %s", err)
33+
}
34+
35+
for {
36+
frame, err := feeds.Recv()
37+
if err != nil {
38+
return fmt.Errorf("could not receive frame: %s", err)
39+
}
40+
41+
if frame.Channel < 32 {
42+
if err := m[frame.Channel].Update(frame.Image); err != nil {
43+
return fmt.Errorf("could not update frame for channel `%d': %s", frame.Channel, err)
44+
}
45+
}
46+
}
47+
}
48+
2049
func main() {
2150
flag.Parse()
2251

@@ -31,41 +60,12 @@ func main() {
3160
log.Fatal(http.ListenAndServe(":8000", nil))
3261
}()
3362

34-
outer:
3563
for {
36-
conn, err := grpc.Dial(*addr, grpc.WithInsecure())
37-
if err != nil {
38-
log.Printf("could not connect: %s", err)
39-
time.Sleep(1 * time.Second)
40-
continue outer
64+
if err := live(m); err != nil {
65+
log.Print(err)
4166
}
4267

43-
c := cctv.NewCCTVClient(conn)
44-
feeds, err := c.Feeds(context.Background(), &cctv.Channels{Mask: 0xffff})
45-
if err != nil {
46-
log.Printf("could not subscribe: %s", err)
47-
_ = conn.Close()
48-
time.Sleep(1 * time.Second)
49-
continue outer
50-
}
51-
52-
for {
53-
frame, err := feeds.Recv()
54-
if err != nil {
55-
log.Printf("could not receive frame: %s", err)
56-
_ = conn.Close()
57-
time.Sleep(1 * time.Second)
58-
continue outer
59-
}
60-
61-
if frame.Channel < 32 {
62-
if err := m[frame.Channel].Update(frame.Image); err != nil {
63-
log.Printf("could not update frame for channel `%d': %s", frame.Channel, err)
64-
_ = conn.Close()
65-
time.Sleep(1 * time.Second)
66-
continue outer
67-
}
68-
}
69-
}
68+
log.Printf("sleeping for %v seconds before retry", delay.Seconds())
69+
time.Sleep(*delay)
7070
}
7171
}

‎cmd/cctvd/main.go

+18-17
Original file line numberDiff line numberDiff line change
@@ -3,12 +3,13 @@ package main
33
import (
44
"flag"
55
"fmt"
6-
"google.golang.org/grpc"
76
"log"
87
"net"
98
"sync"
109
"time"
1110

11+
"google.golang.org/grpc"
12+
1213
"github.com/darkwrat/cctvd/cctv"
1314
"github.com/darkwrat/cctvd/dvr"
1415
)
@@ -40,9 +41,9 @@ func (s *server) unsubscribe(mask int32, sub chan *cctv.Frame) {
4041
s.Lock()
4142
defer s.Unlock()
4243

43-
for ch := uint8(0); ch < 32; ch++ {
44-
if v := mask & (1 << ch); v != 0 {
45-
if c, ok := s.m[ch]; ok {
44+
for feed := uint8(0); feed < 32; feed++ {
45+
if v := mask & (1 << feed); v != 0 {
46+
if c, ok := s.m[feed]; ok {
4647
delete(c, sub)
4748
}
4849
}
@@ -53,8 +54,6 @@ func (s *server) send(frame *cctv.Frame) {
5354
s.RLock()
5455
defer s.RUnlock()
5556

56-
// todo fine grained lock
57-
// todo handle client drop
5857
ch := uint8(frame.GetChannel())
5958
if c, ok := s.m[ch]; ok {
6059
for sub := range c {
@@ -96,25 +95,27 @@ func (s *server) multicast(ch chan *dvr.Frame) {
9695
}
9796
}
9897

99-
var (
100-
addr = flag.String("addr", "127.0.0.1:7620", "dvr host:port")
101-
delay = flag.Duration("delay", 5*time.Second, "delay before relive after failure")
102-
)
103-
10498
func live(opts dvr.ConnectOpts, ch chan *dvr.Frame) error {
10599
c, err := dvr.Connect(opts)
106100
if err != nil {
107-
return fmt.Errorf("cannot connect to dvr: %s", err)
101+
return fmt.Errorf("could not connect to dvr: %s", err)
108102
}
109103
defer c.Close()
110104

111105
if err := c.Live(ch); err != nil {
112-
return fmt.Errorf("cannot stream anymore: %s", err)
106+
return fmt.Errorf("could not continue stream: %s", err)
113107
}
114108

115109
return nil
116110
}
117111

112+
var (
113+
addr = flag.String("addr", "127.0.0.1:7620", "dvr host:port")
114+
user = flag.String("user", "ADMIN", "dvr username")
115+
pass = flag.String("pass", "0000", "dvr password")
116+
delay = flag.Duration("delay", 5*time.Second, "dvr reconnect delay after failure")
117+
)
118+
118119
func main() {
119120
flag.Parse()
120121

@@ -131,14 +132,14 @@ func main() {
131132
go csrv.multicast(ch)
132133
go func() {
133134
if err := s.Serve(lis); err != nil {
134-
log.Fatalf("cannot serve grpc: %s", err)
135+
log.Fatalf("could not serve grpc: %s", err)
135136
}
136137
}()
137138

138139
opts := dvr.ConnectOpts{
139-
Addr: *addr,
140-
User: "ADMIN",
141-
Password: "0000",
140+
Addr: *addr,
141+
User: *user,
142+
Pass: *pass,
142143
}
143144

144145
for {

‎dvr/dvr.go

+2-2
Original file line numberDiff line numberDiff line change
@@ -247,7 +247,7 @@ type Client struct {
247247
}
248248

249249
type ConnectOpts struct {
250-
Addr, User, Password string
250+
Addr, User, Pass string
251251
}
252252

253253
func Connect(opts ConnectOpts) (*Client, error) {
@@ -256,7 +256,7 @@ func Connect(opts ConnectOpts) (*Client, error) {
256256
return nil, fmt.Errorf("could not dial: %s", err)
257257
}
258258

259-
if err := doAuth(conn, opts.User, opts.Password); err != nil {
259+
if err := doAuth(conn, opts.User, opts.Pass); err != nil {
260260
_ = conn.Close()
261261
return nil, fmt.Errorf("auth failed: %s", err)
262262
}

0 commit comments

Comments
 (0)
Please sign in to comment.