コード例 #1
0
        private void SendContacts()
        {
            List <HidContactInfo> contactsToSend = new List <HidContactInfo>();

            lock (lockCurrentContacts)
            {
                while (currentContacts.Count > 0)
                {
                    HidContactInfo contactInfo = currentContacts.Dequeue();

                    HidContactInfo lastContact;
                    if (lastContactInfo.TryGetValue(contactInfo.Id, out lastContact))
                    {
                        if (contactInfo.State == HidContactState.Updated && lastContact.State == HidContactState.Removing)
                        {
                            continue;
                        }
                    }

                    lastContactInfo[contactInfo.Id] = contactInfo;
                    contactsToSend.Add(contactInfo);
                }
            }
            contactsToSend.AddRange(lastContactInfo.Values.Except(contactsToSend, comparer).Where(c => c.State == HidContactState.Updated).ToList());

            if (contactsToSend.Count > 0)
            {
                SendContacts(contactsToSend);
            }

            foreach (ushort id in lastContactInfo.Values.Where(c => c.State == HidContactState.Removed).Select(c => c.Id).ToList())
            {
                lastContactInfo.Remove(id);
            }
            foreach (HidContactInfo contactInfo in lastContactInfo.Values.Where(c => c.State == HidContactState.Removing).ToList())
            {
                Enqueue(new HidContactInfo(HidContactState.Removed, contactInfo.Contact));
            }
            foreach (HidContactInfo contactInfo in lastContactInfo.Values.Where(c => c.State == HidContactState.Adding).ToList())
            {
                Enqueue(new HidContactInfo(HidContactState.Updated, contactInfo.Contact));
            }
        }