internal bool UnregisterNotification(TS3Models.Notifications notification)
 {
     if (registeredNotifications.Contains(notification))
     {
         registeredNotifications.Remove(notification);
         return true;
     }
     return false;
 }
        private void ParseNotification(TS3Models.Notifications notification, TS3Models.Result result)
        {
            switch (notification)
            {
                #region Client
                case TS3Models.Notifications.notifytextmessage:
                    if (OnTextMessage != null)
                        OnTextMessage(new TS3Models.TextMessage()
                        {
                            Result = result,
                            TargetMode = (TS3Models.TextMessageTargetMode)Convert.ToInt32(result.GetFirstResult("targetmode")),
                            Msg = result.GetFirstResult("msg"),
                            Target = Convert.ToInt32(result.GetFirstResult("target")),
                            Invoker = new TS3Models.Client()
                            {
                                ClId = Convert.ToInt32(result.GetFirstResult("invokerid")),
                                ClientNickname = result.GetFirstResult("invokername"),
                                ClientUniqueIdentifier = result.GetFirstResult("invokeruid"),
                            }
                        });
                    break;
                case TS3Models.Notifications.notifyclientpoke:
                    if (OnClientPoke != null)
                        OnClientPoke(new TS3Models.ClientPoke()
                        {
                            Result = result,
                            Msg = result.GetFirstResult("msg"),
                            Invoker = new TS3Models.Client()
                            {
                                ClId = Convert.ToInt32(result.GetFirstResult("invokerid")),
                                ClientNickname = result.GetFirstResult("invokername"),
                                ClientUniqueIdentifier = result.GetFirstResult("invokeruid"),
                            }
                        });
                    break;
                case TS3Models.Notifications.notifycliententerview:
                    if (OnClientEnterView != null)
                    {
                        OnClientEnterView(new TS3Models.ClientEnterView()
                        {
                            Result = result,
                            CfId = Convert.ToInt32(result.GetFirstResult("cfid")),
                            CtId = Convert.ToInt32(result.GetFirstResult("ctid")),
                            Reason = (TS3Models.ReasonIdentifier)Convert.ToInt32(result.GetFirstResult("reasonid")),
                            Client = new TS3Models.Client().FillWithResult(result)
                        });
                    }
                    break;
                case TS3Models.Notifications.notifyclientleftview:
                    if (OnClientLeftView != null)
                        OnClientLeftView(new TS3Models.ClientLeftView()
                        {
                            Result = result,
                            CfId = Convert.ToInt32(result.GetFirstResult("cfid")),
                            CtId = Convert.ToInt32(result.GetFirstResult("ctid")),
                            Reason = (TS3Models.ReasonIdentifier)Convert.ToInt32(result.GetFirstResult("reasonid")),
                            Invoker = new TS3Models.Client()
                            {
                                ClId = Convert.ToInt32(result.GetFirstResult("invokerid")),
                                ClientNickname = result.GetFirstResult("invokername"),
                                ClientUniqueIdentifier = result.GetFirstResult("invokeruid"),
                            },
                            ReasonMsg = result.GetFirstResult("reasonmsg"),
                            BanTime = Convert.ToInt32(result.GetFirstResult("bantime")),
                            ClId = Convert.ToInt32(result.GetFirstResult("clid"))
                        });
                    break;
                case TS3Models.Notifications.notifyclientmoved:
                    if (OnClientMoved != null)
                    {
                        List<TS3Models.Client> clients = new List<TS3Models.Client>();
                        foreach(Dictionary<string, string> list in result.ResultsList)
                        {
                            string id = result.GetResultByList(list, "clid");
                            if (!string.IsNullOrEmpty(id))
                                clients.Add(new TS3Models.Client()
                                {
                                    ClId = Convert.ToInt32(id)
                                });
                        }

                        OnClientMoved(new TS3Models.ClientMoved()
                        {
                            Result = result,
                            Channel = new TS3Models.Channel()
                            {
                                CId = Convert.ToInt32(result.GetFirstResult("ctid"))
                            },
                            Reason = (TS3Models.ReasonIdentifier)Convert.ToInt32(result.GetFirstResult("reasonid")),
                            Invoker = new TS3Models.Client()
                            {
                                ClId = Convert.ToInt32(result.GetFirstResult("invokerid")),
                                ClientNickname = result.GetFirstResult("invokername"),
                                ClientUniqueIdentifier = result.GetFirstResult("invokeruid"),
                            },
                            Clients = clients
                        });
                    }
                    break;
                #endregion
                #region Channel
                case TS3Models.Notifications.notifychannelmoved:
                    if (OnChannelMoved != null)
                        OnChannelMoved(new TS3Models.ChannelMoved()
                        {
                            Result = result,
                            Reason = (TS3Models.ReasonIdentifier)Convert.ToInt32(result.GetFirstResult("reasonid")),
                            Invoker = new TS3Models.Client()
                            {
                                ClId = Convert.ToInt32(result.GetFirstResult("invokerid")),
                                ClientNickname = result.GetFirstResult("invokername"),
                                ClientUniqueIdentifier = result.GetFirstResult("invokeruid"),
                            },
                            Channel = new TS3Models.Channel().FillWithResult(result)
                        });
                    break;
                case TS3Models.Notifications.notifychanneledited:
                    if (OnChannelEdited != null)
                        OnChannelEdited(new TS3Models.ChannelEdited()
                        {
                            Result = result,
                            Reason = (TS3Models.ReasonIdentifier)Convert.ToInt32(result.GetFirstResult("reasonid")),
                            Invoker = new TS3Models.Client()
                            {
                                ClId = Convert.ToInt32(result.GetFirstResult("invokerid")),
                                ClientNickname = result.GetFirstResult("invokername"),
                                ClientUniqueIdentifier = result.GetFirstResult("invokeruid"),
                            },
                            Channel = new TS3Models.Channel().FillWithResult(result)
                        });
                    break;
                case TS3Models.Notifications.notifychannelcreated:
                    if (OnChannelCreated != null)
                        OnChannelCreated(new TS3Models.ChannelCreated()
                        {
                            Result = result,
                            Invoker = new TS3Models.Client()
                            {
                                ClId = Convert.ToInt32(result.GetFirstResult("invokerid")),
                                ClientNickname = result.GetFirstResult("invokername"),
                                ClientUniqueIdentifier = result.GetFirstResult("invokeruid"),
                            },
                            Channel = new TS3Models.Channel().FillWithResult(result)
                        });
                    break;
                case TS3Models.Notifications.notifychanneldeleted:
                    if (OnChannelDeleted != null)
                        OnChannelDeleted(new TS3Models.ChannelDeleted()
                        {
                            Result = result,
                            Invoker = new TS3Models.Client()
                            {
                                ClId = Convert.ToInt32(result.GetFirstResult("invokerid")),
                                ClientNickname = result.GetFirstResult("invokername"),
                                ClientUniqueIdentifier = result.GetFirstResult("invokeruid"),
                            },
                            Channel = new TS3Models.Channel().FillWithResult(result)
                        });
                    break;
                #endregion
                #region Server
                case TS3Models.Notifications.notifyserveredited:
                    if (OnServerEdited != null)
                        OnServerEdited(new TS3Models.ServerEdited()
                        {
                            Result = result,
                            Reason = (TS3Models.ReasonIdentifier)Convert.ToInt32(result.GetFirstResult("reasonid")),
                            Invoker = new TS3Models.Client()
                            {
                                ClId = Convert.ToInt32(result.GetFirstResult("invokerid")),
                                ClientNickname = result.GetFirstResult("invokername"),
                                ClientUniqueIdentifier = result.GetFirstResult("invokeruid"),
                            },
                            VirtualServer = new TS3Models.VirtualServer().FillWithResult(result)
                        });
                    break;
                case TS3Models.Notifications.notifyservergrouplist:
                    if (OnServerGroupList != null)
                    {
                        List<TS3Models.ServerGroup> serverGroups = new List<TS3Models.ServerGroup>();
                        foreach (Dictionary<string, string> res in result.ResultsList)
                        {
                            serverGroups.Add(new TS3Models.ServerGroup().FillWithResult(result, res));
                        }
                        OnServerGroupList(serverGroups);
                    }
                    break;
                #endregion
            }
        }
 internal bool RegisterNotification(TS3Models.Notifications notification)
 {
     if (!registeredNotifications.Contains(notification))
     {
         registeredNotifications.Add(notification);
         return true;
     }
     return false;
 }