// Разрегистрация клиента public static void UnregisterClient(CometAsyncState state) { lock (_lock) { // Просто удаляем его из списка _clientStateList.Remove(state); } }
// Регистрация клиента public static void RegicterClient(CometAsyncState state) { lock (_lock) { // Присваиваем гуид и добавляем в список state.ClientGuid = Guid.NewGuid().ToString("N"); _clientStateList.Add(state); } }
// Срабатывает кажды раз при запуске клиентом очережного запроса Long poll // так как при этом HttpContext клиента изменяется, то на до обновить // все изменившиеся данные клиента в списке, идентифицируемом по гуиду, // который у клиента в течение работы остается постоянным public static void UpdateClient(CometAsyncState state, String guid) { lock (_lock) { // ищем клиента в списке по его гуиду CometAsyncState clientState = _clientStateList.Find(s => s.ClientGuid == guid); if (clientState != null) { // и если он нашелся, то обновляем все его параметры clientState.CurrentContext = state.CurrentContext; clientState.ExtraData = state.ExtraData; clientState.AsyncCallback = state.AsyncCallback; } } }