go-common/app/interface/main/app-channel/service/channel/infoc.go

176 lines
4.3 KiB
Go
Raw Normal View History

2019-04-22 10:49:16 +00:00
package channel
import (
"bytes"
"strconv"
"time"
"go-common/app/interface/main/app-channel/model/feed"
"go-common/library/log"
"go-common/library/log/infoc"
)
type feedInfoc struct {
mobiApp string
device string
build string
now string
pull string
loginEvent string
channelID string
channelName string
mid string
buvid string
displayID string
feed *feed.Show
Items []*feed.Item
isRec string
topChannel string
ServerCode string
}
type channelOperation struct {
mobiApp string
device string
build string
now string
channelID string
operation string
mid string
from string
}
// OperationInfoc channel operation infoc
func (s *Service) OperationInfoc(mobiApp, device, operation string, build, from int, channelID, mid int64, now time.Time) {
infoc := &channelOperation{
mobiApp: mobiApp,
device: device,
build: strconv.Itoa(build),
now: now.Format("2006-01-02 15:04:05"),
channelID: strconv.FormatInt(channelID, 10),
operation: operation,
mid: strconv.FormatInt(mid, 10),
from: strconv.Itoa(from),
}
s.infoc(infoc)
}
func (s *Service) infoc(i interface{}) {
select {
case s.logCh <- i:
default:
log.Warn("infocproc chan full")
}
}
func (s *Service) infocproc() {
const (
noItem = `[]`
)
var (
msg1 = []byte(`[`)
msg2 = []byte(`{"goto":"`)
msg3 = []byte(`","param":"`)
msg4 = []byte(`","uri":"`)
msg5 = []byte(`","r_pos":`)
msg6 = []byte(`,"from_type":"`)
msg7 = []byte(`"},`)
msg8 = []byte(`]`)
buf bytes.Buffer
list string
feedInf2 = infoc.New(s.c.FeedInfoc2)
channelnf2 = infoc.New(s.c.ChannelInfoc2)
)
for {
i, ok := <-s.logCh
if !ok {
log.Warn("infoc proc exit")
return
}
var pos int
switch l := i.(type) {
case *feedInfoc:
if l.feed != nil {
if f := l.feed; len(f.Feed) == 0 && f.Topic == nil {
list = noItem
} else {
buf.Write(msg1)
if t := f.Topic; t != nil {
buf.Write(msg2)
buf.WriteString(t.Goto)
buf.Write(msg3)
buf.WriteString(t.Param)
buf.Write(msg4)
buf.WriteString(t.URI)
buf.Write(msg5)
pos = t.Pos
buf.WriteString(strconv.Itoa(pos))
buf.Write(msg6)
buf.WriteString(t.FromType)
buf.Write(msg7)
}
if items := f.Feed; len(items) == 0 {
buf.Truncate(buf.Len() - 1)
} else {
for _, item := range items {
buf.Write(msg2)
buf.WriteString(item.Goto)
buf.Write(msg3)
buf.WriteString(item.Param)
buf.Write(msg4)
buf.WriteString(item.URI)
buf.Write(msg5)
if item.Pos == 0 {
pos++
} else {
pos = item.Pos
}
buf.WriteString(strconv.Itoa(pos))
buf.Write(msg6)
buf.WriteString(item.FromType)
buf.Write(msg7)
}
buf.Truncate(buf.Len() - 1)
}
buf.Write(msg8)
list = buf.String()
buf.Reset()
}
} else if items := l.Items; len(items) > 0 {
buf.Write(msg1)
for _, item := range items {
buf.Write(msg2)
buf.WriteString(item.Goto)
buf.Write(msg3)
buf.WriteString(item.Param)
buf.Write(msg4)
buf.WriteString(item.URI)
buf.Write(msg5)
if item.Pos == 0 {
pos++
} else {
pos = item.Pos
}
buf.WriteString(strconv.Itoa(pos))
buf.Write(msg6)
buf.WriteString(item.FromType)
buf.Write(msg7)
}
buf.Truncate(buf.Len() - 1)
buf.Write(msg8)
list = buf.String()
buf.Reset()
} else if len(l.Items) == 0 {
list = noItem
}
log.Info("channel_infoc_index(%s,%s,%s,%s,%s,%s,%s,%s,%s,%s,%s,%s)_list(%s)", l.mobiApp, l.device, l.build, l.now, l.pull, l.loginEvent,
l.channelID, l.channelName, l.mid, l.buvid, l.displayID, l.ServerCode, list)
feedInf2.Info(l.mobiApp, l.device, l.build, l.now, l.pull, l.loginEvent, l.channelID, l.channelName, l.mid, l.buvid, l.displayID,
list, "9", l.isRec, l.topChannel, l.ServerCode)
case *channelOperation:
log.Info("channel_infoc_operation_(%s,%s,%s,%s,%s,%s,%s,%s)", l.mobiApp, l.device, l.build, l.now, l.channelID, l.operation, l.mid, l.from)
channelnf2.Info(l.mobiApp, l.device, l.build, l.now, l.channelID, l.operation, l.mid, l.from)
}
}
}