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;
}
});
}
}
}