diff --git a/cmd/v2/lib/common/lang.go b/cmd/v2/lib/common/lang.go index f4aea922f..e2115e889 100644 --- a/cmd/v2/lib/common/lang.go +++ b/cmd/v2/lib/common/lang.go @@ -110,6 +110,7 @@ const ( APP_TESTCASE_FORM_TASK_ACHIEVE = "成就" APP_TESTCASE_FORM_BINGO = "命令" APP_TESTCASE_BTN_PUSH = "推送" + APP_TESTCASE_FORM_LABEL_FID = "好友ID" //button BUTTON_LOGIN = "登录" diff --git a/cmd/v2/main.go b/cmd/v2/main.go index bb20b3fc7..c09785adf 100644 --- a/cmd/v2/main.go +++ b/cmd/v2/main.go @@ -2,6 +2,7 @@ package main import ( "fmt" + "go_dreamfactory/cmd/v2/lib/common" "go_dreamfactory/cmd/v2/service" "go_dreamfactory/cmd/v2/service/observer" "go_dreamfactory/cmd/v2/ui" @@ -53,7 +54,7 @@ func main() { appUI := ui.NewUI(app.NewWithID("protocol-test-tool"), configService, connService, pttService, obs) mainWindow := ui.NewMainWindow(appUI) - mainWindow.CreateWindow("robot_v2", 1366, 768, true) + mainWindow.CreateWindow(common.APP_NAME, 1366, 768, true) appUI.Run() } diff --git a/cmd/v2/model/friend.go b/cmd/v2/model/friend.go new file mode 100644 index 000000000..5ed8c2e74 --- /dev/null +++ b/cmd/v2/model/friend.go @@ -0,0 +1,24 @@ +package model + +type FriendModel struct { + Uid string + Name string +} + +type FriendModelList struct { + DataList []*FriendModel +} + +func NewFriendModelList() *FriendModelList { + return &FriendModelList{ + DataList: make([]*FriendModel, 0), + } +} + +func (s *FriendModelList) AsInterfaceArray() []interface{} { + rs := make([]interface{}, len(s.DataList), len(s.DataList)) + for i := range s.DataList { + rs[i] = s.DataList[i] + } + return rs +} diff --git a/cmd/v2/model/push.go b/cmd/v2/model/push.go index 227f63f48..8c0b62330 100644 --- a/cmd/v2/model/push.go +++ b/cmd/v2/model/push.go @@ -1,15 +1,13 @@ package model import ( - "google.golang.org/protobuf/types/known/anypb" + "go_dreamfactory/pb" ) type PushModel struct { - MainType string - SubType string MethodName string DataTime string - Rsp *anypb.Any + Msg *pb.UserMessage } type PushModelList struct { diff --git a/cmd/v2/resources/config.yaml b/cmd/v2/resources/config.yaml index 0986d4b9f..2b332675c 100644 --- a/cmd/v2/resources/config.yaml +++ b/cmd/v2/resources/config.yaml @@ -1,16 +1,16 @@ services: - service: sid: 1 - name: service1 - url: ws://10.0.0.100:7891/gateway + name: 外网 + url: ws://119.3.89.14:7891/gateway - service: sid: 2 name: 赵长远 url: ws://10.0.0.238:7891/gateway - service: sid: 3 - name: service3 - url: ws://10.0.0.101:7891/gateway + name: 内网 + url: ws://10.0.0.9:7891/gateway - service: sid: 4 name: service4 diff --git a/cmd/v2/service/connService.go b/cmd/v2/service/connService.go index 0615d0c83..2d696c7ba 100644 --- a/cmd/v2/service/connService.go +++ b/cmd/v2/service/connService.go @@ -9,10 +9,8 @@ import ( "strings" "time" - "github.com/golang/protobuf/ptypes" "github.com/gorilla/websocket" "github.com/sirupsen/logrus" - "github.com/spf13/cast" "google.golang.org/protobuf/proto" ) @@ -52,6 +50,17 @@ func (c *ConnServiceImpl) Connect(wsUrl string) error { return err } c.ws = ws + + ticker := time.NewTicker(2 * time.Second) + go func() { + for { + _ = <-ticker.C + if err := c.ws.WriteMessage(websocket.PingMessage, []byte{}); err != nil { + c.obs.Notify(observer.EVENT_PING, err) + break + } + } + }() return nil } @@ -76,19 +85,35 @@ func (c *ConnServiceImpl) ListenerPush() { methodStr := msg.Data.TypeUrl methodName := common.SubStr(methodStr, 20, len(methodStr)) - if strings.HasSuffix(methodName, "Push") { - p := &model.PushModel{ - MainType: msg.MainType, - SubType: msg.SubType, - MethodName: methodName, - DataTime: time.Now().Format(time.RFC3339), - Rsp: msg.Data, - } + p := &model.PushModel{ + // MainType: msg.MainType, + // SubType: msg.SubType, + MethodName: methodName, + DataTime: time.Now().Format(time.RFC3339), + // Rsp: msg.Data, + Msg: msg, + } + logrus.WithFields( + logrus.Fields{"MainType": msg.MainType, "SubType": msg.SubType}, + ).Debug(methodName) + renderRespPanel := func(p *model.PushModel) { + // data, err := anypb.New(p.Msg) + // if err != nil { + // logrus.Error(err) + // return + // } + c.obs.Notify(observer.EVENT_CASE_RSP, p.Msg) + } + + if strings.HasSuffix(methodName, "Push") { c.obs.Notify(observer.EVENT_APP_PUSH, p) - logrus.WithFields( - logrus.Fields{"MainType": msg.MainType, "SubType": msg.SubType}, - ).Debug(methodName) + if methodName == "NotifyErrorNotifyPush" { + renderRespPanel(p) + } + } else { + //render appTestcase respPanel + renderRespPanel(p) } } }() @@ -144,26 +169,26 @@ func (c *ConnServiceImpl) handleNotify(msg *pb.UserMessage) (code pb.ErrorCode) } // response -func (c *ConnServiceImpl) RespHandle(t *model.TestCase) { - for { - if code, msg := c.ReceiveMsg(); code != pb.ErrorCode_Success { - c.obs.Notify(observer.EVENT_APP_LOG, cast.ToString(code)) - } else { - if msg.MainType == t.MainType && msg.SubType == t.SubType { - if t.Print == nil { - if a, err := ptypes.MarshalAny(msg.Data); err != nil { - c.obs.Notify(observer.EVENT_APP_LOG, err.Error()) - } else { - c.obs.Notify(observer.EVENT_APP_LOG, a.String()) - } - } else { - if !comm.ProtoUnmarshal(msg, t.Rsp) { - return - } - c.obs.Notify(observer.EVENT_APP_LOG, t.Print(t.Rsp)) - } - break - } - } - } -} +// func (c *ConnServiceImpl) RespHandle(t *model.TestCase) { +// for { +// if code, msg := c.ReceiveMsg(); code != pb.ErrorCode_Success { +// c.obs.Notify(observer.EVENT_APP_LOG, cast.ToString(code)) +// } else { +// if msg.MainType == t.MainType && msg.SubType == t.SubType { +// if t.Print == nil { +// if a, err := ptypes.MarshalAny(msg.Data); err != nil { +// c.obs.Notify(observer.EVENT_APP_LOG, err.Error()) +// } else { +// c.obs.Notify(observer.EVENT_APP_LOG, a.String()) +// } +// } else { +// if !comm.ProtoUnmarshal(msg, t.Rsp) { +// return +// } +// c.obs.Notify(observer.EVENT_APP_LOG, t.Print(t.Rsp)) +// } +// break +// } +// } +// } +// } diff --git a/cmd/v2/service/observer/event.go b/cmd/v2/service/observer/event.go index e24572967..dd2a7e1a2 100644 --- a/cmd/v2/service/observer/event.go +++ b/cmd/v2/service/observer/event.go @@ -1,7 +1,13 @@ package observer const ( + EVENT_PING = "ping" + //用户详情 EVENT_USERINFO Event = "userinfo" - EVENT_APP_LOG Event = "app_log" + //协议推送 EVENT_APP_PUSH Event = "push" + //测试用例响应事件 + EVENT_CASE_RSP Event = "response" + // 清空 ui数据事件 + EVENT_UI_CLEAN = "uiclean" ) diff --git a/cmd/v2/ui/app_monitor.go b/cmd/v2/ui/app_monitor.go index cf86e7722..5d81420c7 100644 --- a/cmd/v2/ui/app_monitor.go +++ b/cmd/v2/ui/app_monitor.go @@ -37,9 +37,12 @@ func (this *appMonitor) LazyInit(obs observer.Observer) error { // panel for output log this.logPanel = widget.NewMultiLineEntry() this.logPanel.Wrapping = fyne.TextWrapWord + //clear button clearBtn := widget.NewButtonWithIcon(common.APP_TESTCASE_BTN_CLEARLOG, theme.DeleteIcon(), func() { this.logPanel.SetText("") + this.monitorBinding.Set([]interface{}{}) }) + resPanel := container.NewBorder(container.NewHBox(clearBtn, layout.NewSpacer()), nil, nil, nil, this.logPanel) this.monitorBinding = binding.NewUntypedList() @@ -115,7 +118,7 @@ func (this *appMonitor) createMonitorList() { func(data binding.DataItem, item fyne.CanvasObject) { o, _ := data.(binding.Untyped).Get() pd := o.(*model.PushModel) - item.(*fyne.Container).Objects[0].(*widget.Label).SetText(fmt.Sprintf("%s.%s", pd.MainType, pd.SubType)) + item.(*fyne.Container).Objects[0].(*widget.Label).SetText(fmt.Sprintf("%s.%s", pd.Msg.MainType, pd.Msg.SubType)) item.(*fyne.Container).Objects[1].(*widget.Label).SetText(pd.MethodName) item.(*fyne.Container).Objects[2].(*widget.Label).SetText(pd.DataTime) }, @@ -127,7 +130,7 @@ func (this *appMonitor) createMonitorList() { } else { o, _ := di.(binding.Untyped).Get() pd := o.(*model.PushModel) - if res, err := anypb.New(pd.Rsp); err == nil { + if res, err := anypb.New(pd.Msg.Data); err == nil { this.logPanel.Text = res.String() this.logPanel.Refresh() } else { diff --git a/cmd/v2/ui/app_testcase.go b/cmd/v2/ui/app_testcase.go index 1181b0f76..3e92220d4 100644 --- a/cmd/v2/ui/app_testcase.go +++ b/cmd/v2/ui/app_testcase.go @@ -5,6 +5,7 @@ import ( "go_dreamfactory/cmd/v2/lib/common" "go_dreamfactory/cmd/v2/model" "go_dreamfactory/cmd/v2/service/observer" + "go_dreamfactory/pb" "fyne.io/fyne/v2" "fyne.io/fyne/v2/container" @@ -43,23 +44,24 @@ func (a *appTester) LazyInit(obs observer.Observer) error { content.Objects = []fyne.CanvasObject{} if view, ok := viewRegister[viewKey]; ok { - view.Init() + view.Init(obs, globalWin.w) resLog := widget.NewMultiLineEntry() - obs.AddListener(observer.EVENT_APP_LOG, observer.Listener{ + obs.AddListener(observer.EVENT_CASE_RSP, observer.Listener{ OnNotify: func(data interface{}, args ...interface{}) { if data == nil { return } - resLog.SetText(data.(string)) + msg := data.(*pb.UserMessage) + resLog.SetText(msg.Data.String()) }, }) resLog.Wrapping = fyne.TextWrapBreak - formReq := view.CreateForm(t) + formReq := view.CreateView(t) // required! Refresh updates the widget formReq.Refresh() formCard := widget.NewCard("", "", formReq) - + clearBtn := widget.NewButtonWithIcon(common.APP_TESTCASE_BTN_CLEARLOG, theme.DeleteIcon(), func() { resLog.SetText("") }) diff --git a/cmd/v2/ui/formview/baseformview.go b/cmd/v2/ui/formview/baseformview.go index 0595baec0..1796ed24d 100644 --- a/cmd/v2/ui/formview/baseformview.go +++ b/cmd/v2/ui/formview/baseformview.go @@ -2,15 +2,21 @@ package formview import ( "go_dreamfactory/cmd/v2/lib/common" + "go_dreamfactory/cmd/v2/service/observer" + "fyne.io/fyne/v2" "fyne.io/fyne/v2/widget" ) type BaseformView struct { form *widget.Form + obs observer.Observer + w fyne.Window } -func (this *BaseformView) Init() { +func (this *BaseformView) Init(obs observer.Observer, w fyne.Window) { + this.obs = obs + this.w = w this.form = widget.NewForm() this.form.SubmitText = common.BUTTON_OK } diff --git a/cmd/v2/ui/formview/bingoview.go b/cmd/v2/ui/formview/bingoview.go index 18c8d0c13..d8904487d 100644 --- a/cmd/v2/ui/formview/bingoview.go +++ b/cmd/v2/ui/formview/bingoview.go @@ -15,7 +15,7 @@ type BingoView struct { BaseformView } -func (this *BingoView) CreateForm(t *model.TestCase) fyne.CanvasObject { +func (this *BingoView) CreateView(t *model.TestCase) fyne.CanvasObject { bingo := widget.NewEntry() bingo.PlaceHolder = "eg. bingo:item,10001,1" this.form.AppendItem(widget.NewFormItem(common.APP_TESTCASE_FORM_BINGO, bingo)) @@ -29,7 +29,7 @@ func (this *BingoView) CreateForm(t *model.TestCase) fyne.CanvasObject { return } - go service.GetConnService().RespHandle(t) + // go service.GetConnService().RespHandle(t) } return this.form } diff --git a/cmd/v2/ui/formview/friend_addblack.go b/cmd/v2/ui/formview/friend_addblack.go new file mode 100644 index 000000000..cb734d764 --- /dev/null +++ b/cmd/v2/ui/formview/friend_addblack.go @@ -0,0 +1,33 @@ +package formview + +import ( + "go_dreamfactory/cmd/v2/lib/common" + "go_dreamfactory/cmd/v2/model" + "go_dreamfactory/cmd/v2/service" + "go_dreamfactory/pb" + + "fyne.io/fyne/v2" + "fyne.io/fyne/v2/widget" + "github.com/sirupsen/logrus" +) + +type FriendAddBlackView struct { + BaseformView +} + +func (this *FriendAddBlackView) CreateView(t *model.TestCase) fyne.CanvasObject { + friendId := widget.NewEntry() + this.form.AppendItem(widget.NewFormItem(common.APP_TESTCASE_FORM_LABEL_FID, friendId)) + this.form.OnSubmit = func() { + if err := service.GetPttService().SendToClient( + t.MainType, + t.SubType, + &pb.FriendBlackAddReq{FriendId: friendId.Text}, + ); err != nil { + logrus.Error(err) + return + } + + } + return this.form +} diff --git a/cmd/v2/ui/formview/friend_agree.go b/cmd/v2/ui/formview/friend_agree.go new file mode 100644 index 000000000..13faad421 --- /dev/null +++ b/cmd/v2/ui/formview/friend_agree.go @@ -0,0 +1,91 @@ +package formview + +import ( + "go_dreamfactory/cmd/v2/model" + "go_dreamfactory/cmd/v2/service" + "go_dreamfactory/cmd/v2/service/observer" + "go_dreamfactory/comm" + "go_dreamfactory/modules/friend" + "go_dreamfactory/pb" + + "fyne.io/fyne/v2" + "fyne.io/fyne/v2/container" + "fyne.io/fyne/v2/theme" + "fyne.io/fyne/v2/widget" + "github.com/sirupsen/logrus" +) + +type FriendAgreeView struct { + FriendListBaseView +} + +func (this *FriendAgreeView) CreateView(t *model.TestCase) fyne.CanvasObject { + //init required + this.initFriendList() + + //同意提交 + agreeBtn := widget.NewButtonWithIcon("同意", theme.ConfirmIcon(), func() { + if err := service.GetPttService().SendToClient( + t.MainType, + t.SubType, + &pb.FriendAgreeReq{ + FriendIds: this.selFriendIds, + }, + ); err != nil { + logrus.Error(err) + return + } + this.applyListBtnFun() + }) + + //拒绝 + refuseBtn := widget.NewButtonWithIcon("拒绝", theme.CancelIcon(), func() { + if err := service.GetPttService().SendToClient( + string(comm.ModuleFriend), + friend.FriendSubTypeRefuse, + &pb.FriendRefuseReq{ + FriendIds: this.selFriendIds, + }); err != nil { + logrus.Error(err) + return + } + this.applyListBtnFun() + }) + + this.createList() + + applyListBtn := widget.NewButton("申请列表", this.applyListBtnFun()) + + split := container.NewHSplit(this.dataList, container.NewVBox(applyListBtn, agreeBtn, refuseBtn)) + split.Offset = 1 + + this.dataListener() + return split +} + +// listener applyListdata +func (this *FriendAgreeView) dataListener() { + this.obs.AddListener(observer.EVENT_CASE_RSP, observer.Listener{ + OnNotify: func(d interface{}, args ...interface{}) { + data := d.(*pb.UserMessage) + if !(data.MainType == string(comm.ModuleFriend) && + data.SubType == friend.FriendSubTypeApplyList) { + return + } + rsp := &pb.FriendApplyListResp{} + + if !comm.ProtoUnmarshal(data, rsp) { + logrus.Error("unmarshal err") + } + + for _, v := range rsp.List { + fm := &model.FriendModel{ + Uid: v.UserId, + Name: v.NickName, + } + this.friendData.DataList = append(this.friendData.DataList, fm) + } + this.reloadFriendData() + }, + }) +} diff --git a/cmd/v2/ui/formview/friend_apply.go b/cmd/v2/ui/formview/friend_apply.go new file mode 100644 index 000000000..2e5d5ad35 --- /dev/null +++ b/cmd/v2/ui/formview/friend_apply.go @@ -0,0 +1,31 @@ +package formview + +import ( + "go_dreamfactory/cmd/v2/lib/common" + "go_dreamfactory/cmd/v2/model" + "go_dreamfactory/cmd/v2/service" + "go_dreamfactory/pb" + + "fyne.io/fyne/v2" + "fyne.io/fyne/v2/widget" + "github.com/sirupsen/logrus" +) + +type FriendApplyView struct { + BaseformView +} + +func (this *FriendApplyView) CreateView(t *model.TestCase) fyne.CanvasObject { + friendId := widget.NewEntry() + this.form.AppendItem(widget.NewFormItem(common.APP_TESTCASE_FORM_LABEL_FID, friendId)) + + this.form.OnSubmit = func() { + if err := service.GetPttService().SendToClient(t.MainType, t.SubType, &pb.FriendApplyReq{ + FriendId: friendId.Text, + }); err != nil { + logrus.Error(err) + } + + } + return this.form +} diff --git a/cmd/v2/ui/formview/friend_applylist.go b/cmd/v2/ui/formview/friend_applylist.go new file mode 100644 index 000000000..e6c985935 --- /dev/null +++ b/cmd/v2/ui/formview/friend_applylist.go @@ -0,0 +1,24 @@ +package formview + +import ( + "go_dreamfactory/cmd/v2/model" + "go_dreamfactory/cmd/v2/service" + "go_dreamfactory/pb" + + "fyne.io/fyne/v2" + "github.com/sirupsen/logrus" +) + +type FriendApplyListView struct { + BaseformView +} + +func (this *FriendApplyListView) CreateView(t *model.TestCase) fyne.CanvasObject { + this.form.OnSubmit = func() { + if err := service.GetPttService().SendToClient(t.MainType, t.SubType, &pb.FriendApplyListReq{}); err != nil { + logrus.Error(err) + } + + } + return this.form +} diff --git a/cmd/v2/ui/formview/friend_base.go b/cmd/v2/ui/formview/friend_base.go new file mode 100644 index 000000000..0b4fb933d --- /dev/null +++ b/cmd/v2/ui/formview/friend_base.go @@ -0,0 +1,75 @@ +package formview + +import ( + "go_dreamfactory/cmd/v2/model" + "go_dreamfactory/cmd/v2/service" + "go_dreamfactory/comm" + "go_dreamfactory/modules/friend" + "go_dreamfactory/pb" + "go_dreamfactory/utils" + + "fyne.io/fyne/v2" + "fyne.io/fyne/v2/container" + "fyne.io/fyne/v2/data/binding" + "fyne.io/fyne/v2/widget" + "github.com/sirupsen/logrus" +) + +type FriendListBaseView struct { + BaseformView + dataList *widget.List + friendBinding binding.UntypedList + selFriendIds []string //选择的UID + friendData *model.FriendModelList +} + +// init data +func (this *FriendListBaseView) initFriendList() { + this.friendBinding = binding.NewUntypedList() + this.friendData = model.NewFriendModelList() +} + +// create list view +func (this *FriendListBaseView) createList() *widget.List { + this.dataList = widget.NewListWithData(this.friendBinding, + func() fyne.CanvasObject { + return container.NewHBox( + widget.NewCheck("", func(b bool) {}), + widget.NewLabelWithStyle("", fyne.TextAlignCenter, fyne.TextStyle{}), + ) + }, + func(data binding.DataItem, item fyne.CanvasObject) { + o, _ := data.(binding.Untyped).Get() + pd := o.(*model.FriendModel) + item.(*fyne.Container).Objects[0].(*widget.Check).OnChanged = func(b bool) { + if b { + this.selFriendIds = append(this.selFriendIds, pd.Uid) + } else { + utils.DeleteString(this.selFriendIds, pd.Uid) + } + } + item.(*fyne.Container).Objects[1].(*widget.Label).SetText(pd.Name) + }, + ) + return this.dataList +} + +func (this *FriendListBaseView) applyListBtnFun() func() { + return func() { + if err := service.GetPttService().SendToClient( + string(comm.ModuleFriend), + friend.FriendSubTypeApplyList, + &pb.FriendApplyListReq{}); err != nil { + logrus.Error(err) + } + this.friendData = model.NewFriendModelList() + } +} + +// set data +func (this *FriendListBaseView) reloadFriendData() { + if this.friendData != nil { + d := this.friendData.AsInterfaceArray() + this.friendBinding.Set(d) + } +} diff --git a/cmd/v2/ui/formview/friend_blacklist.go b/cmd/v2/ui/formview/friend_blacklist.go new file mode 100644 index 000000000..ffc5ae394 --- /dev/null +++ b/cmd/v2/ui/formview/friend_blacklist.go @@ -0,0 +1,72 @@ +package formview + +import ( + "go_dreamfactory/cmd/v2/model" + "go_dreamfactory/cmd/v2/service" + "go_dreamfactory/cmd/v2/service/observer" + "go_dreamfactory/comm" + "go_dreamfactory/modules/friend" + "go_dreamfactory/pb" + + "fyne.io/fyne/v2" + "fyne.io/fyne/v2/container" + "fyne.io/fyne/v2/widget" + "github.com/sirupsen/logrus" +) + +type FriendBlacklistView struct { + FriendListBaseView +} + +func (this *FriendBlacklistView) CreateView(t *model.TestCase) fyne.CanvasObject { + // init required + this.initFriendList() + // create friend list view + this.createList() + + friendList := func() { + if err := service.GetPttService().SendToClient( + string(comm.ModuleFriend), + friend.FriendSubTypeBlacklist, + &pb.FriendBlackListReq{}); err != nil { + logrus.Error(err) + } + this.friendData = model.NewFriendModelList() + } + friendListBtn := widget.NewButton("黑名单列表", friendList) + + // layout + split := container.NewHSplit(this.dataList, container.NewVBox(friendListBtn)) + split.Offset = 1 + + //data listener for + this.dataListener() + + return split +} + +func (this *FriendBlacklistView) dataListener() { + this.obs.AddListener(observer.EVENT_CASE_RSP, observer.Listener{ + OnNotify: func(d interface{}, args ...interface{}) { + data := d.(*pb.UserMessage) + if !(data.MainType == string(comm.ModuleFriend) && + data.SubType == friend.FriendSubTypeBlacklist) { + return + } + rsp := &pb.FriendBlackListResp{} + + if !comm.ProtoUnmarshal(data, rsp) { + logrus.Error("unmarshal err") + } + + for _, v := range rsp.Friends { + fm := &model.FriendModel{ + Uid: v.UserId, + Name: v.NickName, + } + this.friendData.DataList = append(this.friendData.DataList, fm) + } + this.reloadFriendData() + }, + }) +} diff --git a/cmd/v2/ui/formview/friend_delblack.go b/cmd/v2/ui/formview/friend_delblack.go new file mode 100644 index 000000000..d303eb27f --- /dev/null +++ b/cmd/v2/ui/formview/friend_delblack.go @@ -0,0 +1,33 @@ +package formview + +import ( + "go_dreamfactory/cmd/v2/lib/common" + "go_dreamfactory/cmd/v2/model" + "go_dreamfactory/cmd/v2/service" + "go_dreamfactory/pb" + + "fyne.io/fyne/v2" + "fyne.io/fyne/v2/widget" + "github.com/sirupsen/logrus" +) + +type FriendDelblackView struct { + BaseformView +} + +func (this *FriendDelblackView) CreateView(t *model.TestCase) fyne.CanvasObject { + friendId := widget.NewEntry() + this.form.AppendItem(widget.NewFormItem(common.APP_TESTCASE_FORM_LABEL_FID, friendId)) + this.form.OnSubmit = func() { + if err := service.GetPttService().SendToClient( + t.MainType, + t.SubType, + &pb.FriendDelBlackReq{FriendId: friendId.Text}, + ); err != nil { + logrus.Error(err) + return + } + + } + return this.form +} diff --git a/cmd/v2/ui/formview/friend_list.go b/cmd/v2/ui/formview/friend_list.go new file mode 100644 index 000000000..c165cd708 --- /dev/null +++ b/cmd/v2/ui/formview/friend_list.go @@ -0,0 +1,74 @@ +package formview + +import ( + "go_dreamfactory/cmd/v2/model" + "go_dreamfactory/cmd/v2/service" + "go_dreamfactory/cmd/v2/service/observer" + "go_dreamfactory/comm" + "go_dreamfactory/modules/friend" + "go_dreamfactory/pb" + + "fyne.io/fyne/v2" + "fyne.io/fyne/v2/container" + "fyne.io/fyne/v2/widget" + "github.com/sirupsen/logrus" +) + +//好友列表 +type FriendListView struct { + FriendListBaseView //继承支持好友列表的基类 +} + +func (this *FriendListView) CreateView(t *model.TestCase) fyne.CanvasObject { + // init required + this.initFriendList() + + // create friend list view + this.createList() + + // new friendlist btn + friendList := func() { + if err := service.GetPttService().SendToClient( + string(comm.ModuleFriend), + friend.FriendSubTypeList, + &pb.FriendListReq{}); err != nil { + logrus.Error(err) + } + this.friendData = model.NewFriendModelList() + } + friendListBtn := widget.NewButton("好友列表", friendList) + + // layout + split := container.NewHSplit(this.dataList, container.NewVBox(friendListBtn)) + split.Offset = 1 + + //data listener for + this.dataListener() + return split +} + +func (this *FriendListView) dataListener() { + this.obs.AddListener(observer.EVENT_CASE_RSP, observer.Listener{ + OnNotify: func(d interface{}, args ...interface{}) { + data := d.(*pb.UserMessage) + if !(data.MainType == string(comm.ModuleFriend) && + data.SubType == friend.FriendSubTypeList) { + return + } + rsp := &pb.FriendListResp{} + + if !comm.ProtoUnmarshal(data, rsp) { + logrus.Error("unmarshal err") + } + + for _, v := range rsp.List { + fm := &model.FriendModel{ + Uid: v.UserId, + Name: v.NickName, + } + this.friendData.DataList = append(this.friendData.DataList, fm) + } + this.reloadFriendData() + }, + }) +} diff --git a/cmd/v2/ui/formview/friend_refuse.go b/cmd/v2/ui/formview/friend_refuse.go new file mode 100644 index 000000000..bc126b16d --- /dev/null +++ b/cmd/v2/ui/formview/friend_refuse.go @@ -0,0 +1,29 @@ +package formview + +import ( + "go_dreamfactory/cmd/v2/model" + "go_dreamfactory/cmd/v2/service" + "go_dreamfactory/pb" + + "fyne.io/fyne/v2" + "github.com/sirupsen/logrus" +) + +type FriendRefuseView struct { + BaseformView +} + +func (this *FriendRefuseView) CreateView(t *model.TestCase) fyne.CanvasObject { + this.form.OnSubmit = func() { + if err := service.GetPttService().SendToClient( + t.MainType, + t.SubType, + &pb.FriendRefuseReq{}, + ); err != nil { + logrus.Error(err) + return + } + + } + return this.form +} diff --git a/cmd/v2/ui/formview/friend_search.go b/cmd/v2/ui/formview/friend_search.go new file mode 100644 index 000000000..bdefe57a9 --- /dev/null +++ b/cmd/v2/ui/formview/friend_search.go @@ -0,0 +1,33 @@ +package formview + +import ( + "go_dreamfactory/cmd/v2/lib/common" + "go_dreamfactory/cmd/v2/model" + "go_dreamfactory/cmd/v2/service" + "go_dreamfactory/pb" + + "fyne.io/fyne/v2" + "fyne.io/fyne/v2/widget" + "github.com/sirupsen/logrus" +) + +type FriendSearchView struct { + BaseformView +} + +func (this *FriendSearchView) CreateView(t *model.TestCase) fyne.CanvasObject { + name := widget.NewEntry() + this.form.AppendItem(widget.NewFormItem(common.APP_TESTCASE_FORM_LABEL_FID, name)) + this.form.OnSubmit = func() { + if err := service.GetPttService().SendToClient( + t.MainType, + t.SubType, + &pb.FriendSearchReq{NickName: name.Text}, + ); err != nil { + logrus.Error(err) + return + } + + } + return this.form +} diff --git a/cmd/v2/ui/formview/hero_list.go b/cmd/v2/ui/formview/hero_list.go index 3707d9d74..f64fcf73c 100644 --- a/cmd/v2/ui/formview/hero_list.go +++ b/cmd/v2/ui/formview/hero_list.go @@ -13,13 +13,12 @@ type HeroListView struct { BaseformView } -func (this *HeroListView) CreateForm(t *model.TestCase) fyne.CanvasObject { +func (this *HeroListView) CreateView(t *model.TestCase) fyne.CanvasObject { this.form.OnSubmit = func() { if err := service.GetPttService().SendToClient(t.MainType, t.SubType, &pb.HeroListReq{}); err != nil { logrus.Error(err) } - go service.GetConnService().RespHandle(t) } return this.form } diff --git a/cmd/v2/ui/formview/hero_strengthenUpStar.go b/cmd/v2/ui/formview/hero_strengthenUpStar.go index 6fc40dfa2..ed1ffe8b2 100644 --- a/cmd/v2/ui/formview/hero_strengthenUpStar.go +++ b/cmd/v2/ui/formview/hero_strengthenUpStar.go @@ -17,7 +17,7 @@ type HeroStrengthenUpStarView struct { BaseformView } -func (this *HeroStrengthenUpStarView) CreateForm(t *model.TestCase) fyne.CanvasObject { +func (this *HeroStrengthenUpStarView) CreateView(t *model.TestCase) fyne.CanvasObject { heroObjID := widget.NewEntry() //HeroRace heroRaceId := widget.NewEntry() @@ -91,7 +91,6 @@ func (this *HeroStrengthenUpStarView) CreateForm(t *model.TestCase) fyne.CanvasO return } - go service.GetConnService().RespHandle(t) } return this.form } diff --git a/cmd/v2/ui/formview/hero_strengthenUplv.go b/cmd/v2/ui/formview/hero_strengthenUplv.go index 0b675c20a..98dfa347a 100644 --- a/cmd/v2/ui/formview/hero_strengthenUplv.go +++ b/cmd/v2/ui/formview/hero_strengthenUplv.go @@ -17,7 +17,7 @@ type HeroStrengthenUplvView struct { BaseformView } -func (this *HeroStrengthenUplvView) CreateForm(t *model.TestCase) fyne.CanvasObject { +func (this *HeroStrengthenUplvView) CreateView(t *model.TestCase) fyne.CanvasObject { heroObjID := widget.NewEntry() @@ -61,7 +61,6 @@ func (this *HeroStrengthenUplvView) CreateForm(t *model.TestCase) fyne.CanvasObj return } - go service.GetConnService().RespHandle(t) } return this.form } diff --git a/cmd/v2/ui/formview/task_activelist.go b/cmd/v2/ui/formview/task_activelist.go index 28a8ff542..de51edcdc 100644 --- a/cmd/v2/ui/formview/task_activelist.go +++ b/cmd/v2/ui/formview/task_activelist.go @@ -16,7 +16,7 @@ type TaskActiveListView struct { BaseformView } -func (this *TaskActiveListView) CreateForm(t *model.TestCase) fyne.CanvasObject { +func (this *TaskActiveListView) CreateView(t *model.TestCase) fyne.CanvasObject { tagSelect := getTaskTagSelect() this.form.AppendItem(widget.NewFormItem(common.APP_TESTCASE_FORM_TASKTAG, tagSelect)) @@ -27,8 +27,6 @@ func (this *TaskActiveListView) CreateForm(t *model.TestCase) fyne.CanvasObject }); err != nil { logrus.Error(err) } - - go service.GetConnService().RespHandle(t) } return this.form } diff --git a/cmd/v2/ui/formview/task_activereceive.go b/cmd/v2/ui/formview/task_activereceive.go index 352650e6f..dfaf5a2dc 100644 --- a/cmd/v2/ui/formview/task_activereceive.go +++ b/cmd/v2/ui/formview/task_activereceive.go @@ -16,7 +16,7 @@ type TaskActiveReceiveView struct { BaseformView } -func (this *TaskActiveReceiveView) CreateForm(t *model.TestCase) fyne.CanvasObject { +func (this *TaskActiveReceiveView) CreateView(t *model.TestCase) fyne.CanvasObject { id := widget.NewEntry() tagSelect := getTaskTagSelect() @@ -31,7 +31,6 @@ func (this *TaskActiveReceiveView) CreateForm(t *model.TestCase) fyne.CanvasObje logrus.Error(err) } - go service.GetConnService().RespHandle(t) } return this.form } diff --git a/cmd/v2/ui/formview/task_list.go b/cmd/v2/ui/formview/task_list.go index 3bd236443..92dfedd69 100644 --- a/cmd/v2/ui/formview/task_list.go +++ b/cmd/v2/ui/formview/task_list.go @@ -16,7 +16,7 @@ type TaskListView struct { BaseformView } -func (this *TaskListView) CreateForm(t *model.TestCase) fyne.CanvasObject { +func (this *TaskListView) CreateView(t *model.TestCase) fyne.CanvasObject { tagSelect := getTaskTagSelect() this.form.AppendItem(widget.NewFormItem(common.APP_TESTCASE_FORM_TASKTAG, tagSelect)) @@ -26,8 +26,6 @@ func (this *TaskListView) CreateForm(t *model.TestCase) fyne.CanvasObject { }); err != nil { logrus.Error(err) } - - go service.GetConnService().RespHandle(t) } return this.form } diff --git a/cmd/v2/ui/formview/task_receive.go b/cmd/v2/ui/formview/task_receive.go index 750791968..73a4d3d3c 100644 --- a/cmd/v2/ui/formview/task_receive.go +++ b/cmd/v2/ui/formview/task_receive.go @@ -18,7 +18,7 @@ type TaskReceiveView struct { BaseformView } -func (this *TaskReceiveView) CreateForm(t *model.TestCase) fyne.CanvasObject { +func (this *TaskReceiveView) CreateView(t *model.TestCase) fyne.CanvasObject { if t.MainType == string(comm.ModuleTask) && t.SubType == task.TaskSubTypeReceive { id := widget.NewEntry() @@ -33,7 +33,6 @@ func (this *TaskReceiveView) CreateForm(t *model.TestCase) fyne.CanvasObject { return } - go service.GetConnService().RespHandle(t) } } diff --git a/cmd/v2/ui/formview/user_modifyname.go b/cmd/v2/ui/formview/user_modifyname.go index b93f35966..381282490 100644 --- a/cmd/v2/ui/formview/user_modifyname.go +++ b/cmd/v2/ui/formview/user_modifyname.go @@ -15,7 +15,7 @@ type UserModifynameView struct { BaseformView } -func (this *UserModifynameView) CreateForm(t *model.TestCase) fyne.CanvasObject { +func (this *UserModifynameView) CreateView(t *model.TestCase) fyne.CanvasObject { name := widget.NewEntry() this.form.AppendItem(widget.NewFormItem(common.APP_TESTCASE_FORM_NICKNAME, name)) @@ -29,7 +29,6 @@ func (this *UserModifynameView) CreateForm(t *model.TestCase) fyne.CanvasObject return } - go service.GetConnService().RespHandle(t) } return this.form diff --git a/cmd/v2/ui/mainwindow.go b/cmd/v2/ui/mainwindow.go index 297cdc371..90ef331da 100644 --- a/cmd/v2/ui/mainwindow.go +++ b/cmd/v2/ui/mainwindow.go @@ -58,6 +58,20 @@ func NewMainWindow(ui *UIImpl) MainWindow { mw.at = newAppContainer(ui.obs) globalWin = mw + + ui.obs.AddListener(observer.EVENT_PING, observer.Listener{ + OnNotify: func(data interface{}, args ...interface{}) { + dialog.NewConfirm("链接中断", data.(error).Error(), func( + b bool) { + if b { + globalWin.w.Close() + } else { + dialog.NewInformation("提示", "重启登录", globalWin.w) + return + } + }, globalWin.w).Show() + }, + }) return mw } @@ -82,12 +96,17 @@ func (ui *MainWindowImpl) createWindowContainer() { ui.at = newAppContainer(ui.obs) content := container.NewBorder(ui.tb.toolbar, ui.sb.widget, nil, ui.toys.widget, ui.at) ui.w.SetContent(content) + ui.w.SetCloseIntercept(ui.quiteHandle) } func (ui *MainWindowImpl) SetStatusMsg(msg string) { ui.sb.setMessage(fmt.Sprintf("err:%s", msg)) } +func (ui *MainWindowImpl) quiteHandle() { + ui.w.Close() +} + // CreateWindow .... func (ui *MainWindowImpl) CreateWindow(title string, width, height float32, _ bool) { // init window @@ -170,7 +189,7 @@ func (ui *MainWindowImpl) createChooseServerWindow( } // createLoginWin -func (ui *MainWindowImpl) createLoginWin(sid int32) { +func (ui *MainWindowImpl) createLoginWin(sid int32, sname string) { //form account := widget.NewEntry() account.Text = "user8120" //default account @@ -192,6 +211,7 @@ func (ui *MainWindowImpl) createLoginWin(sid int32) { dialog.ShowError(err, ui.w) } else { + ui.w.SetTitle(fmt.Sprintf("%s[%d]", sname, sid)) ui.connService.ListenerPush() //show mainwindow // logrus.Debug(rsp) @@ -282,7 +302,7 @@ func (ui *MainWindowImpl) NewWelcomeLabel(data string) { fyne.TextStyle{Bold: true}), container.NewCenter(container.NewHBox( widget.NewButton(common.BUTTON_LOGIN, func() { - ui.createLoginWin(cast.ToInt32(p[0])) + ui.createLoginWin(cast.ToInt32(p[0]), p[1]) }), )), )) diff --git a/cmd/v2/ui/protocol.go b/cmd/v2/ui/protocol.go index d72d7efb3..406b9eebe 100644 --- a/cmd/v2/ui/protocol.go +++ b/cmd/v2/ui/protocol.go @@ -3,9 +3,11 @@ package ui import ( "fmt" "go_dreamfactory/cmd/v2/model" + "go_dreamfactory/cmd/v2/service/observer" "go_dreamfactory/cmd/v2/ui/formview" "go_dreamfactory/comm" "go_dreamfactory/lego/core" + "go_dreamfactory/modules/friend" "go_dreamfactory/modules/hero" "go_dreamfactory/modules/task" "go_dreamfactory/modules/user" @@ -16,8 +18,8 @@ import ( ) type MyCaseView interface { - Init() - CreateForm(t *model.TestCase) fyne.CanvasObject + Init(obs observer.Observer, w fyne.Window) + CreateView(t *model.TestCase) fyne.CanvasObject } // 1 注册接口测试的表单试图 @@ -36,17 +38,55 @@ var ( ff(comm.ModuleHero, hero.HeroSubTypeList): &formview.HeroListView{}, ff(comm.ModuleHero, hero.StrengthenUplv): &formview.HeroStrengthenUplvView{}, ff(comm.ModuleHero, hero.StrengthenUpStar): &formview.HeroStrengthenUpStarView{}, + //friend + ff(comm.ModuleFriend, friend.FriendSubTypeList): &formview.FriendListView{}, + ff(comm.ModuleFriend, friend.FriendSubTypeApply): &formview.FriendApplyView{}, + // ff(comm.ModuleFriend, friend.FriendSubTypeApplyList): &formview.FriendApplyListView{}, + ff(comm.ModuleFriend, friend.FriendSubTypeAgree): &formview.FriendAgreeView{}, + // ff(comm.ModuleFriend, friend.FriendSubTypeRefuse): &formview.FriendRefuseView{}, + ff(comm.ModuleFriend, friend.FriendSubTypeBlacklist): &formview.FriendBlacklistView{}, + ff(comm.ModuleFriend, friend.FriendSubTypeAddBlack): &formview.FriendAddBlackView{}, + ff(comm.ModuleFriend, friend.FriendSubTypeDelBlack): &formview.FriendDelblackView{}, + ff(comm.ModuleFriend, friend.FriendSubTypeSearch): &formview.FriendSearchView{}, } ) // 2 添加导航菜单 var ( CaseIndex = map[string][]string{ - "": {"gm", "user", "hero", "task"}, - "gm": {"gm.cmd"}, - "user": {"user.modifyname"}, - "hero": {"hero.list", "hero.strengthenuplv", "hero.strengthenupstar"}, - "task": {"task.list", "task.receive", "task.activelist", "task.activereceive"}, + "": { + string(comm.ModuleGM), + string(comm.ModuleUser), + string(comm.ModuleHero), + string(comm.ModuleTask), + string(comm.ModuleFriend), + }, + "gm": {ff(comm.ModuleGM, "cmd")}, + "user": { + ff(comm.ModuleUser, user.UserSubTypeModifyName), + }, + "hero": { + ff(comm.ModuleHero, hero.HeroSubTypeList), + ff(comm.ModuleHero, hero.StrengthenUplv), + ff(comm.ModuleHero, hero.StrengthenUpStar), + }, + "task": { + ff(comm.ModuleTask, task.TaskSubTypeList), + ff(comm.ModuleTask, task.TaskSubTypeReceive), + ff(comm.ModuleTask, task.TaskSubTypeActiveList), + ff(comm.ModuleTask, task.TaskSubTypeActiveReceive), + }, + "friend": { + ff(comm.ModuleFriend, friend.FriendSubTypeList), + ff(comm.ModuleFriend, friend.FriendSubTypeApply), + // ff(comm.ModuleFriend, friend.FriendSubTypeApplyList), + ff(comm.ModuleFriend, friend.FriendSubTypeAgree), + // ff(comm.ModuleFriend, friend.FriendSubTypeRefuse), + ff(comm.ModuleFriend, friend.FriendSubTypeBlacklist), + ff(comm.ModuleFriend, friend.FriendSubTypeAddBlack), + ff(comm.ModuleFriend, friend.FriendSubTypeDelBlack), + ff(comm.ModuleFriend, friend.FriendSubTypeSearch), + }, } ) @@ -153,6 +193,83 @@ var ( Rsp: &pb.HeroStrengthenUpStarResp{}, Enabled: true, }, + //friend + string(comm.ModuleFriend): { + MainType: string(comm.ModuleFriend), + Enabled: true, + }, + ff(comm.ModuleFriend, friend.FriendSubTypeList): { + Desc: "好友列表", + MainType: string(comm.ModuleFriend), + SubType: friend.FriendSubTypeList, + Req: &pb.FriendListReq{}, + Rsp: &pb.FriendListResp{}, + Enabled: true, + }, + ff(comm.ModuleFriend, friend.FriendSubTypeApply): { + Desc: "好友申请", + MainType: string(comm.ModuleFriend), + SubType: friend.FriendSubTypeApply, + Req: &pb.FriendApplyReq{}, + Rsp: &pb.FriendApplyResp{}, + Enabled: true, + }, + // ff(comm.ModuleFriend, friend.FriendSubTypeApplyList): { + // Desc: "申请列表", + // MainType: string(comm.ModuleFriend), + // SubType: friend.FriendSubTypeApplyList, + // Req: &pb.FriendApplyListReq{}, + // Rsp: &pb.FriendApplyListResp{}, + // Enabled: true, + // }, + ff(comm.ModuleFriend, friend.FriendSubTypeBlacklist): { + Desc: "黑名单列表", + MainType: string(comm.ModuleFriend), + SubType: friend.FriendSubTypeBlacklist, + Req: &pb.FriendBlackListReq{}, + Rsp: &pb.FriendBlackListResp{}, + Enabled: true, + }, + ff(comm.ModuleFriend, friend.FriendSubTypeAddBlack): { + Desc: "添加黑名单", + MainType: string(comm.ModuleFriend), + SubType: friend.FriendSubTypeAddBlack, + Req: &pb.FriendBlackAddReq{}, + Rsp: &pb.FriendBlackAddResp{}, + Enabled: true, + }, + ff(comm.ModuleFriend, friend.FriendSubTypeDelBlack): { + Desc: "删除黑名单", + MainType: string(comm.ModuleFriend), + SubType: friend.FriendSubTypeDelBlack, + Req: &pb.FriendDelBlackReq{}, + Rsp: &pb.FriendDelBlackResp{}, + Enabled: true, + }, + ff(comm.ModuleFriend, friend.FriendSubTypeAgree): { + Desc: "好友申请审批", + MainType: string(comm.ModuleFriend), + SubType: friend.FriendSubTypeAgree, + Req: &pb.FriendAgreeReq{}, + Rsp: &pb.FriendAgreeResp{}, + Enabled: true, + }, + // ff(comm.ModuleFriend, friend.FriendSubTypeRefuse): { + // Desc: "拒绝", + // MainType: string(comm.ModuleFriend), + // SubType: friend.FriendSubTypeRefuse, + // Req: &pb.FriendRefuseReq{}, + // Rsp: &pb.FriendRefuseResp{}, + // Enabled: true, + // }, + ff(comm.ModuleFriend, friend.FriendSubTypeSearch): { + Desc: "搜索好友", + MainType: string(comm.ModuleFriend), + SubType: friend.FriendSubTypeSearch, + Req: &pb.FriendSearchReq{}, + Rsp: &pb.FriendSearchResp{}, + Enabled: true, + }, } ) diff --git a/cmd/v2/ui/toy_userinfo.go b/cmd/v2/ui/toy_userinfo.go index 6afe3a226..029a9c536 100644 --- a/cmd/v2/ui/toy_userinfo.go +++ b/cmd/v2/ui/toy_userinfo.go @@ -3,8 +3,12 @@ package ui import ( "fmt" "go_dreamfactory/cmd/v2/lib/common" + "go_dreamfactory/cmd/v2/model" "go_dreamfactory/cmd/v2/service" "go_dreamfactory/cmd/v2/service/observer" + "go_dreamfactory/comm" + "go_dreamfactory/modules/user" + "go_dreamfactory/pb" "time" "fyne.io/fyne/v2" @@ -13,6 +17,7 @@ import ( "fyne.io/fyne/v2/layout" "fyne.io/fyne/v2/widget" "github.com/atotto/clipboard" + "github.com/sirupsen/logrus" "github.com/spf13/cast" ) @@ -36,7 +41,6 @@ func (this *toyUserInfo) Init(obs observer.Observer) error { this.copyBtn = widget.NewButton(common.USERINFO_BTN_COPY, func() { if this.userInfo != nil && this.userInfo.DbUser != nil { _ = clipboard.WriteAll(this.userInfo.DbUser.Uid) - } }) this.copyBtn.Disable() @@ -55,11 +59,11 @@ func (this *toyUserInfo) Init(obs observer.Observer) error { nil, nil, nil, container.NewVScroll(this.dataList))) this.widget.Resize(fyne.NewSize(ToyWidth, 600)) - this.Run() + this.dataListener() return nil } -func (this *toyUserInfo) Run() { +func (this *toyUserInfo) dataListener() { this.obs.AddListener(observer.EVENT_USERINFO, observer.Listener{ OnNotify: func(d interface{}, args ...interface{}) { time.Sleep(time.Millisecond * 50) @@ -72,7 +76,7 @@ func (this *toyUserInfo) Run() { return } - _ = this.data.Append(fmt.Sprintf("%-3s\t: %s", common.USERINFO_UID, this.userInfo.DbUser.Uid)) + // _ = this.data.Append(fmt.Sprintf("%-3s\t: %s", common.USERINFO_UID, this.userInfo.DbUser.Uid)) _ = this.data.Append(fmt.Sprintf("%-3s\t: %s", common.USERINFO_ACC, this.userInfo.DbUser.Binduid)) _ = this.data.Append(fmt.Sprintf("%-3s\t: %s", common.USERINFO_NAME, this.userInfo.DbUser.Name)) _ = this.data.Append(fmt.Sprintf("%-3s\t: %s", common.USERINFO_AVATAR, cast.ToString(this.userInfo.DbUser.Avatar))) @@ -82,4 +86,40 @@ func (this *toyUserInfo) Run() { _ = this.data.Append(fmt.Sprintf("%-3s\t: %s", common.USERINFO_EXP, cast.ToString(this.userInfo.DbUser.Exp))) }, }) + + this.obs.AddListener(observer.EVENT_CASE_RSP, observer.Listener{ + OnNotify: func(d interface{}, args ...interface{}) { + data := d.(*pb.UserMessage) + //change name + if data.MainType == string(comm.ModuleUser) && + data.SubType == user.UserSubTypeModifyName { + rsp := &pb.UserModifynameResp{} + if !comm.ProtoUnmarshal(data, rsp) { + logrus.Error("unmarshal err") + } + //TODO 改此协议 返回昵称 + // _=this.data.SetValue(1, fmt.Sprintf("%-3s\t: %s", common.USERINFO_NAME, rsp.Uid)) + } + }, + }) + + this.obs.AddListener(observer.EVENT_APP_PUSH, observer.Listener{ + OnNotify: func(d interface{}, args ...interface{}) { + data := d.(*model.PushModel) + // listener gold + if data.Msg.MainType == string(comm.ModuleUser) && + data.Msg.SubType == "reschange" { + rsp := &pb.UserResChangePush{} + if !comm.ProtoUnmarshal(data.Msg, rsp) { + logrus.Error("unmarshal err") + } + _ = this.data.SetValue(5, fmt.Sprintf("%-3s\t: %s", common.USERINFO_GOLD, cast.ToString(rsp.Gold))) + } + // listener exp + if data.Msg.MainType == string(comm.ModuleUser) && + data.Msg.SubType == "" { + //TODO change exp + } + }, + }) } diff --git a/modules/comp_configure.go b/modules/comp_configure.go index cd53f8c07..187c75aa7 100644 --- a/modules/comp_configure.go +++ b/modules/comp_configure.go @@ -55,7 +55,7 @@ func (this *MCompConfigure) GetConfigure(name string) (v interface{}, err error) //全局配置 func (this *MCompConfigure) GetGlobalConf(key string) string { - if v, err := this.GetConfigure(game_initial); err != nil { + if v, err := this.GetConfigure(game_global); err != nil { log.Errorf("get global conf err:%v", err) return "" } else { diff --git a/modules/friend/api_apply.go b/modules/friend/api_apply.go index d611ea676..8fa1ad9df 100644 --- a/modules/friend/api_apply.go +++ b/modules/friend/api_apply.go @@ -29,11 +29,6 @@ func (this *apiComp) Apply(session comm.IUserSession, req *pb.FriendApplyReq) (c Resp *pb.FriendApplyResp ) - defer func() { - - // utils.TraceFunc(session.GetUserId(), string(this.module.GetType()), FriendSubTypeApply, req, Resp) - }() - defer func() { if code == pb.ErrorCode_Success { Resp = &pb.FriendApplyResp{ @@ -41,8 +36,7 @@ func (this *apiComp) Apply(session comm.IUserSession, req *pb.FriendApplyReq) (c FriendId: req.FriendId, } } - err := session.SendMsg(string(this.module.GetType()), FriendSubTypeApply, Resp) - if err != nil { + if err := session.SendMsg(string(this.module.GetType()), FriendSubTypeApply, Resp); err != nil { code = pb.ErrorCode_SystemError return } diff --git a/modules/friend/api_applylist.go b/modules/friend/api_applylist.go index eba214d88..ccef69442 100644 --- a/modules/friend/api_applylist.go +++ b/modules/friend/api_applylist.go @@ -37,9 +37,14 @@ func (this *apiComp) ApplyList(session comm.IUserSession, req *pb.FriendApplyLis } for _, userId := range self.ApplyIds { + user := this.module.ModuleUser.GetUser(userId) + if user == nil { + continue + } //TODO 组装FriendBase明细数据 list = append(list, &pb.FriendBase{ - UserId: userId, + UserId: userId, + NickName: user.Name, }) } diff --git a/modules/friend/api_blacklist.go b/modules/friend/api_blacklist.go index 38f5c3ee9..ad5aa0b80 100644 --- a/modules/friend/api_blacklist.go +++ b/modules/friend/api_blacklist.go @@ -13,9 +13,9 @@ func (this *apiComp) BlacklistCheck(session comm.IUserSession, req *pb.FriendBla //黑名单 func (this *apiComp) Blacklist(session comm.IUserSession, req *pb.FriendBlackListReq) (code pb.ErrorCode, data proto.Message) { - var ( + var ( self *pb.DBFriend - Resp *pb.FriendBlackListResp + Resp *pb.FriendBlackListResp list []*pb.FriendBase ) @@ -32,15 +32,20 @@ func (this *apiComp) Blacklist(session comm.IUserSession, req *pb.FriendBlackLis }() self = this.module.modelFriend.GetFriend(session.GetUserId()) - if self == nil { + if self == nil { code = pb.ErrorCode_FriendSelfNoData return } for _, userId := range self.BlackIds { - //TODO 完善FriendBase信息 + user := this.module.ModuleUser.GetUser(userId) + if user == nil { + continue + } + list = append(list, &pb.FriendBase{ - UserId: userId, + UserId: userId, + NickName: user.Name, }) } diff --git a/modules/friend/api_list.go b/modules/friend/api_list.go index e625e5414..eed150100 100644 --- a/modules/friend/api_list.go +++ b/modules/friend/api_list.go @@ -15,7 +15,7 @@ func (this *apiComp) ListCheck(session comm.IUserSession, req *pb.FriendListReq) func (this *apiComp) List(session comm.IUserSession, req *pb.FriendListReq) (code pb.ErrorCode, data proto.Message) { var ( self *pb.DBFriend - Resp *pb.FriendListResp + Resp *pb.FriendListResp list []*pb.FriendBase ) @@ -37,8 +37,13 @@ func (this *apiComp) List(session comm.IUserSession, req *pb.FriendListReq) (cod } for _, userId := range self.FriendIds { + user := this.module.ModuleUser.GetUser(userId) + if user == nil { + continue + } list = append(list, &pb.FriendBase{ - UserId: userId, + UserId: userId, + NickName: user.Name, }) } diff --git a/modules/friend/module.go b/modules/friend/module.go index 48abcae4f..aa311aa90 100644 --- a/modules/friend/module.go +++ b/modules/friend/module.go @@ -39,7 +39,7 @@ func (this *Friend) OnInstallComp() { //获取最大好友数 func (this *Friend) getFriendMax() int { - if maxHy := this.configure.GetGlobalConf("max_hy"); maxHy != "" { + if maxHy := this.configure.GetGlobalConf("friend_maxnum"); maxHy != "" { return cast.ToInt(maxHy) } return 0 @@ -47,7 +47,7 @@ func (this *Friend) getFriendMax() int { //获取最大黑名单数 func (this *Friend) getBlackMax() int { - if maxHy := this.configure.GetGlobalConf("max_hmd"); maxHy != "" { + if maxHy := this.configure.GetGlobalConf("friend_black"); maxHy != "" { return cast.ToInt(maxHy) } return 0