示例#1
0
        private void _ic_Notified(CVResult result, object obj)
        {
            if (result == CVResult.LogonSucceeded)
            {
                LoginPt lp = obj as LoginPt;
                _user = UserItem.From(lp);
                if (_user.Role == UserRole.Administrator || _user.Role == UserRole.SystemAdministrator)
                {
                    Status = CVRInfoExStatus.Refused;
                    Notified?.Invoke(CVRInfoExResult.PrivilegeHappened, _user.Role.ToString() + " 权限访问使用");
                    _ic.Shutdown();
                }
                else
                {
                    Status = CVRInfoExStatus.Ready;
                    Notified?.Invoke(CVRInfoExResult.LogonSucceeded, _user);
                }
            }
            else if (result == CVResult.LogonFailed)
            {
                Status = CVRInfoExStatus.Offline;
                LoginPt lp = obj as LoginPt;
                Notified?.Invoke(CVRInfoExResult.LogonFailed, lp.msg);
            }
            else if (result == CVResult.OnlineUsersNotified)
            {
                LogonUserListPt lulp = obj as LogonUserListPt;

                foreach (LoginPt lp in lulp.logonUsers)
                {
                    if (!_users.ContainsKey(lp.id))
                    {
                        Add(lp.id, lp.username, lp.role);
                    }
                }
                Notified?.Invoke(CVRInfoExResult.UserChanged, _users);
            }
            else if (result == CVResult.OnlineUserChanged)
            {
                LogoutPt lp = obj as LogoutPt;
                if (lp.state == 0)
                {
                    //用户上线
                    UserItem ui = Add(lp.id, lp.username, lp.role);
                    if (ui != null)
                    {
                        Notified?.Invoke(CVRInfoExResult.UserChanged, _users);
                    }
                }
                else if (lp.state == 1)
                {
                    //用户
                    _users.Remove(lp.id);
                    Notified?.Invoke(CVRInfoExResult.UserChanged, _users);
                }
            }
            else if (result == CVResult.MessageReceived)
            {
                ChatTextPt ctp = obj as ChatTextPt;
                if (ctp.msg.Contains("\r"))
                {
                    TeamworkItem ti = TeamworkItem.FromMsg(ctp.msg);
                    ti.Item = MessageItem.From(ctp);
                    Notified?.Invoke(CVRInfoExResult.TeamworkReceived, ti);
                }
                else
                {
                    MessageItem mi = MessageItem.From(ctp);
                    Notified?.Invoke(CVRInfoExResult.MessageReceived, mi);
                }
            }
            else if (result == CVResult.MessageNotified)
            {
                MessagePt mp = obj as MessagePt;
                Status = mp.msgtype == "101001" ? CVRInfoExStatus.Timeout: CVRInfoExStatus.Unknown;
                Notified?.Invoke(CVRInfoExResult.MessageNotified, mp.msg);
            }
        }
示例#2
0
        public override void Do(byte[] body)
        {
            try
            {
                if (body != null)
                {
                    int len = body.Length;
                    int id  = ProtobufWrapper.GetPacketCmd(body);

                    if (id == (int)ProtoBuffType.S2CLogin)
                    {
                        LoginPt lp = ProtobufWrapper.ByteDeserialize <LoginPt>(body, len - 2);
                        if (lp.service == 1)
                        {
                            //add
                            Notify(CVResult.UserEdited, lp);
                            Log.AddEvent("UserAdded", lp.msg);
                        }
                        else if (lp.service == 2)
                        {
                            //edit
                            Notify(CVResult.UserEdited, lp);
                            Log.AddEvent("UserEdited", lp.msg);
                        }
                        else if (lp.service == 3)
                        {
                            //delete
                            Notify(CVResult.UserEdited, lp);
                            Log.AddEvent("UserDeleted", lp.msg);
                        }
                        else if (lp.service == 4)
                        {
                            //get
                            if (lp.success == 0)
                            {
                                _client.Id = lp.id;
                                Notify(CVResult.LogonSucceeded, lp);
                                Log.AddEvent("LogonSucceeded", lp.msg);
                            }
                            else
                            {
                                Notify(CVResult.LogonFailed, lp);
                                Log.AddEvent("LogonFailed", lp.msg);
                                _client.Shutdown();
                            }
                        }
                    }
                    else if (id == (int)ProtoBuffType.S2CResourceEditResult)
                    {
                        ResourcePt rpb = ProtobufWrapper.ByteDeserialize <ResourcePt>(body, len - 2);
                        Notify(CVResult.ResourceOperationResponded, rpb);

                        if (rpb.service == 1)
                        {
                            //add
                            Log.AddEvent("ResourceAdded", rpb.pathfile);
                        }
                        else if (rpb.service == 2)
                        {
                            //edit
                            Log.AddEvent("ResourceEdited", rpb.pathfile);
                        }
                        else if (rpb.service == 3)
                        {
                            //delete
                            Log.AddEvent("ResourceDeleted", rpb.pathfile);
                        }
                        else if (rpb.service == 4)
                        {
                            //get
                            Log.AddEvent("ResourceGot", rpb.objectid);
                        }
                    }
                    else if (id == (int)ProtoBuffType.S2CResourceQueryResult)
                    {
                        ResourceResultPt rpt = ProtobufWrapper.ByteDeserialize <ResourceResultPt>(body, len - 2);
                        Notify(CVResult.ResourceOperationResponded, rpt);

                        //Log.AddEvent("ResourceQueried", rpt.count.ToString());
                    }
                    else if (id == (int)ProtoBuffType.S2CLogonUser)
                    {
                        LogoutPt lp = ProtobufWrapper.ByteDeserialize <LogoutPt>(body, len - 2);
                        Notify(CVResult.OnlineUserChanged, lp);

                        Log.AddEvent("OnlineUserChanged", lp.id.ToString());
                    }
                    else if (id == (int)ProtoBuffType.S2CGetOnlineUserResult)
                    {
                        LogonUserListPt lulp = ProtobufWrapper.ByteDeserialize <LogonUserListPt>(body, len - 2);
                        Notify(CVResult.OnlineUsersNotified, lulp);

                        Log.AddEvent("OnlineUsersNotified", lulp.logonUsers.Count.ToString());
                    }
                    else if (id == (int)ProtoBuffType.S2CChatReceiveTextMsg)
                    {
                        ChatTextPt chatpt = ProtobufWrapper.ByteDeserialize <ChatTextPt>(body, len - 2);
                        Notify(CVResult.MessageReceived, chatpt);

                        Log.AddEvent("MessageReceived", chatpt.msg);
                    }
                    else if (id == (int)ProtoBuffType.S2CMessage)
                    {
                        MessagePt mp = ProtobufWrapper.ByteDeserialize <MessagePt>(body, len - 2);
                        if (mp.msgtype == "101001")
                        {
                            Notify(CVResult.ServerSessionTimeouted, mp);
                        }
                        else
                        {
                            Notify(CVResult.MessageNotified, mp);
                        }

                        Log.AddEvent("MessageNotified", mp.msg);
                    }
                    else if (id == (int)ProtoBuffType.S2CChatStatusReceived)
                    {
                        ChatTextStatePt o = ProtobufWrapper.ByteDeserialize <ChatTextStatePt>(body, len - 2);
                        Notify(CVResult.MessageStatusReceived, o);

                        Log.AddEvent("MessageStatusReceived", o.state);
                    }
                    else if (id == (int)ProtoBuffType.S2CTableQueryResult)
                    {
                        QueryResultPt o = ProtobufWrapper.ByteDeserialize <QueryResultPt>(body, len - 2);
                        Notify(CVResult.TableQueryReceived, o);

                        Log.AddEvent("TableQueryReceived", o.msg);
                    }
                    else if (id == (int)ProtoBuffType.S2CTableUpdateResult)
                    {
                        ExecuteResultPt o = ProtobufWrapper.ByteDeserialize <ExecuteResultPt>(body, len - 2);
                        if (o.token == "add_evt" || o.token == "add_log")
                        {
                            //日志和事件
                            if (o.success == 1)
                            {
                                //失败
                                if (o.token == "add_evt")
                                {
                                    //系统日志
                                    Notify(CVResult.AddEventFailed, o.msg);
                                }
                                else
                                {
                                    //用户日志
                                    Notify(CVResult.AddLogFailed, o.msg);
                                }
                            }
                        }
                        else
                        {
                            Notify(CVResult.TableUpdateReceived, o);
                            if (o.success == 0)
                            {
                                Log.AddEvent("TableUpdateReceived", o.token);
                            }
                            else
                            {
                                Log.AddEvent("TableUpdateReceived", o.msg);
                            }
                        }
                    }
                    else
                    {
                        //object o = ProtobufWrapper.ByteDeserialize<object>(body, len - 2);
                        //Notify(CVResult.CustomNotificationReceived, o);
                        Notify(CVResult.Unknown, id);
                    }
                }
            }
            catch (Exception ex)
            {
                _client.Notify(CVResult.ExceptionHappened, ex);
            }
        }