public ChatRequest(RequestCode code, List<object> arguments, int id = 0, ChatResultCode status = ChatResultCode.InProgress) { Id = id; Code = code; Arguments = arguments; Status = status; }
// 4 use in WebChatReceiver public List <User> GetData4GetAllUsers(string roomName, int requestId, out ChatResultCode errorCode) { List <User> result; errorCode = ChatResultCode.Ok; if (string.IsNullOrEmpty(roomName)) { bool timeout; result = users.GetAll(lockTimeout, out timeout).Select(u => new User(u)).ToList(); /*Logger.InfoFormat("GetData4GetAllUsers (no room) returs {0} items: {1}", * answer.Users, string.Join(", ", answer.Users.Select(u => * string.Format("[{0}] \"{1}\"", * u.ID, u.FullName))));*/ } else { var room = rooms.Find(r => r.Name == roomName, r => new Room(r), lockTimeout); if (room == null) { Logger.InfoFormat("[{1}]GetData4GetAllUsers: No room with name {0}", roomName, requestId); errorCode = ChatResultCode.UnknownRoom; return(null); } var userIds = usersAndRooms.GetAll(ur => ur.b == room.Id, lockTimeout).Select(ur => ur.a).ToList(); result = users.GetAll(u => userIds.Contains(u.ID), lockTimeout).Select(u => new User(u)).ToList(); /*Logger.InfoFormat("GetData4GetAllUsers ({0}) returs {1} items: {2}", * roomName, answer.Users, string.Join(", ", answer.Users.Select(u => * string.Format( * "[{0}] \"{1}\"", * u.ID, u.FullName))));*/ } return(result); }
public static string GetChatResultCodeString(ChatResultCode code) { switch (code) { case ChatResultCode.InProgress: return("Выполняется"); case ChatResultCode.Ok: return("Готово"); case ChatResultCode.Error: return("Внутренняя ошибка"); case ChatResultCode.CommunicationError: return("Ошибка связи"); case ChatResultCode.ServerError: return("Внутренняя ошибка сервера"); case ChatResultCode.UnknownUser: return("Пользователь не существует"); case ChatResultCode.UnknownRoom: return("Комната не существует"); case ChatResultCode.UserExists: return("Такой пользователь уже существует"); case ChatResultCode.RoomExists: return("Такая комната уже существует"); default: return("Unhandled ChatResultCode"); } }
public static string GetChatResultCodeString(ChatResultCode code) { switch (code) { case ChatResultCode.InProgress: return "Выполняется"; case ChatResultCode.Ok: return "Готово"; case ChatResultCode.Error: return "Внутренняя ошибка"; case ChatResultCode.CommunicationError: return "Ошибка связи"; case ChatResultCode.ServerError: return "Внутренняя ошибка сервера"; case ChatResultCode.UnknownUser: return "Пользователь не существует"; case ChatResultCode.UnknownRoom: return "Комната не существует"; case ChatResultCode.UserExists: return "Такой пользователь уже существует"; case ChatResultCode.RoomExists: return "Такая комната уже существует"; default: return "Unhandled ChatResultCode"; } }
public ChatRequest(RequestCode code, List <object> arguments, int id = 0, ChatResultCode status = ChatResultCode.InProgress) { Id = id; Code = code; Arguments = arguments; Status = status; }
public ChatRequest(ChatRequest request) { Id = request.Id; Code = request.Code; Arguments = request.Arguments; // !!! arguments not copied Status = request.Status; }
private void ShowErrorInChat(DateTime time, ChatResultCode code, string comment = "") { if (code == ChatResultCode.Ok && string.IsNullOrEmpty(comment)) { return; } ShowErrorInChat(time, Answer.GetChatResultCodeString(code) + ". " + comment); }
public List <Room> GetData4GetRooms(int requestId, out ChatResultCode errorCode) { errorCode = ChatResultCode.Ok; bool timeoutFlag; // делаем копии (дескрипторов) комнат var result = rooms.GetAll(lockTimeout, out timeoutFlag).Select(r => new Room(r)).ToList(); // и скрываем у них пароль result.ForEach(r => r.Password = new string('*', 8)); return(result); }
private void OnRequestStatusReceive(int requestId, ChatResultCode status) { ChatRequest request = null; /*if (!pendingRequestsLock.TryEnterReadLock(lockTimeout)) * { * Console.WriteLine("ChatSender.OnRequestStatusReceive: pendingRequestsReadLock timeout"); * return; * }*/ try { if (!pendingRequests.ContainsKey(requestId)) { forwardAnswers.UpdateValues(requestId, status); return; } request = pendingRequests.ReceiveValue(requestId); //request = pendingRequests[requestId]; request.Status = status; } catch (Exception ex) { Logger.Info("ChatSender.OnRequestStatusReceive while reading", ex); } /*finally * { * pendingRequestsLock.ExitReadLock(); * }*/ try { /*if (!pendingRequestsLock.TryEnterWriteLock(lockTimeout)) * { * Console.WriteLine("ChatSender.OnRequestStatusReceive: pendingRequestsWriteLock timeout"); * return; * }*/ pendingRequests.Remove(requestId); //pendingRequestsLock.ExitWriteLock(); } catch (Exception ex) { Logger.Info("ChatSender.OnRequestStatusReceive while removing", ex); } if (RequestProcessed != null && request != null) { RequestProcessed(request); } }
public List <Message> GetData4GetPendingMessages(int userId, DateTime timeStamp, string roomName, int requestId, out ChatResultCode errorCode) { errorCode = ChatResultCode.Ok; var result = new List <Message>(); var newMessages = GetMessagesInternal(timeStamp); if (string.IsNullOrEmpty(roomName)) { var roomIds = usersAndRooms.GetAll(ur => ur.a == userId, lockTimeout).Select(ur => ur.b).ToList(); var roomNames = rooms.GetAll(r => roomIds.Contains(r.Id), lockTimeout).Select(r => r.Name).ToList(); // определяем все сообщения во всех комнатах, в которых сейчас находится пользователь result.AddRange(newMessages.Where(m => roomNames.Contains(m.Room))); } else { result.AddRange(newMessages.Where(m => m.Room == roomName)); } return(result); }
public Answer(int requestId, ChatResultCode status) { RequestId = requestId; Status = status; }
public List <Message> GetData4GetPendingPrivateMessages(int currentUserId, int anotherUserId, DateTime timeStamp, int requestId, out ChatResultCode errorCode) { errorCode = ChatResultCode.Ok; var result = new List <Message>(); var newMessages = GetMessagesInternal(timeStamp).Where(m => string.IsNullOrEmpty(m.Room)).ToList(); result.AddRange(newMessages.Where(m => (m.Sender == currentUserId) && (anotherUserId == 0 || m.Receiver == anotherUserId) || (m.Receiver == currentUserId) && (anotherUserId == 0 || m.Sender == anotherUserId))); return(result); }
public Answer() { Status = ChatResultCode.Ok; }
private void ShowErrorInDialog(ChatResultCode code, string comment = "") { ShowErrorInDialog("Error: " + Answer.GetChatResultCodeString(code) + "\nComment: " + comment); }
private void ShowErrorInChat(DateTime time, ChatResultCode code, string comment = "") { if (code == ChatResultCode.Ok && string.IsNullOrEmpty(comment)) return; ShowErrorInChat(time, Answer.GetChatResultCodeString(code) + ". " + comment); }
private void OnRequestStatusReceive(int requestId, ChatResultCode status) { ChatRequest request = null; /*if (!pendingRequestsLock.TryEnterReadLock(lockTimeout)) { Console.WriteLine("ChatSender.OnRequestStatusReceive: pendingRequestsReadLock timeout"); return; }*/ try { if (!pendingRequests.ContainsKey(requestId)) { forwardAnswers.UpdateValues(requestId, status); return; } request = pendingRequests.ReceiveValue(requestId); //request = pendingRequests[requestId]; request.Status = status; } catch (Exception ex) { Logger.Info("ChatSender.OnRequestStatusReceive while reading", ex); } /*finally { pendingRequestsLock.ExitReadLock(); }*/ try { /*if (!pendingRequestsLock.TryEnterWriteLock(lockTimeout)) { Console.WriteLine("ChatSender.OnRequestStatusReceive: pendingRequestsWriteLock timeout"); return; }*/ pendingRequests.Remove(requestId); //pendingRequestsLock.ExitWriteLock(); } catch (Exception ex) { Logger.Info("ChatSender.OnRequestStatusReceive while removing", ex); } if (RequestProcessed != null && request != null) RequestProcessed(request); }