You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
175 lines
4.3 KiB
175 lines
4.3 KiB
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) |
|
} |
|
} |
|
}
|
|
|