csImb.csImb.ParseClient C# (CSharp) Method

ParseClient() private method

private ParseClient ( string aVarName, string value ) : void
aVarName string
value string
return void
        private void ParseClient(string aVarName, string value)
        {
            var id = Int32.Parse(aVarName.Split('.')[0]);

            if (id == Id) return;

            if (value == "")
            {
                if (!clients.ContainsKey(id)) return;
                if (clients[id].Client)
                {
                    clients[id].Media.UnPublish();
                    clients[id].Commands.UnPublish();
                }
                Execute.OnUIThread(() =>
                {
                    OnClientRemoved(id);
                    Clients.Remove(id);
                    AllClients.Remove(AllClients.FirstOrDefault(k => k.Id == id));
                        
                });

                // First call OnClientRemoved before you remove the client. Otherwise you will generate an exception.
            }
            else
            {
                if (clients.ContainsKey(id))
                {
                    clients[id].FromString(value);
                    OnClientChanged(clients[id]);
                }
                else
                {
                    var st = new ImbClientStatus();
                    st.FromString(value);
                    if (!string.Equals(st.Application, Status.Application, StringComparison.CurrentCultureIgnoreCase) 
                        && !string.Equals(st.Application, "*")
                        && !string.Equals(Status.Application, "*")) return;
                    if (st.Client)
                    {
                        st.Media = Imb.Publish(st.Id + ".Media");
                        st.Commands = Imb.Publish(st.Id + ".Commands");
                        //st.Positions = Imb.Subscribe(st.Id + ".Position");
                        //st.Positions.OnNormalEvent += Positions_OnNormalEvent;
                    }
                    Execute.OnUIThread(() =>
                    {
                        if (!clients.ContainsKey(id))
                        {
                            Clients.Add(id, st);
                            AllClients.Add(st);
                            OnClientAdded(st);
                        }
                        else
                        {
                            AllClients.Remove(AllClients.FirstOrDefault(k => k.Id == id));
                            Clients[id] = st;
                        }
                    });
                }
            }
        }