void ProcessUpdate(ecProto.ecPacket packet, ecProto.ecPacket full_req) { m_owner.MyBeginUpdate(); LinkedList <ecProto.ecTag> .Enumerator i = packet.GetTagIterator(); while (i.MoveNext()) { ecProto.ecTag t = i.Current; // sometimes reply contains additional tags if (t.Name() != m_item_tagname) { continue; } ecProto.ecMD5 item_id = ((ecProto.ecTagMD5)t).ValueMD5(); if (m_items_hash.ContainsKey(item_id)) { T item = m_items_hash[item_id]; ProcessItemUpdate(item, t); if (m_owner != null) { m_owner.UpdateItem(item); } } else { if (m_inc_tags) { T item = CreateItem(t); m_items.AddLast(item); m_items_hash[item_id] = item; if (m_owner != null) { m_owner.InsertItem(item); } } else { full_req.AddSubtag(CreateItemTag(item_id)); } } // // now process item deletion // // TODO } m_owner.MyEndUpdate(); }