public virtual void Run() { logger.Debug("Running client worker..."); while (connected) { try { AthletesRequest request = AthletesRequest.Parser.ParseDelimitedFrom(stream); logger.Debug("Receipt request " + request + " from client" + connection); AthletesResponse response = HandleRequest(request); if (response != null) { SendResponse(response); } } catch (Exception e) { logger.Error(e.Message + '\n' + e.StackTrace); } try { Thread.Sleep(1000); } catch (Exception e) { logger.Error(e.Message + '\n' + e.StackTrace); } } try { stream.Close(); connection.Close(); } catch (Exception e) { Console.WriteLine("Error " + e); } }
public static Model.Child GetChild(AthletesRequest request) { Child c = request.Child; return(new Model.Child(c.Id, c.Name, c.Age, c.IdEvent1, c.IdEvent2)); }
public static Model.Admin GetAdmin(AthletesRequest request) { return(new Model.Admin(request.User.Id, request.User.Password)); }
private AthletesResponse HandleRequest(AthletesRequest request) { AthletesResponse response = null; AthletesRequestType type = request.Type; switch (type) { case AthletesRequestType.Login: { logger.Debug("Processing login request by user " + request.User.Id); Model.Admin user = ProtobufUtils.GetAdmin(request); try { lock (server) { server.Login(user.ID, user.Password, this); } return(ProtobufUtils.CreateOkResponse()); } catch (Error e) { logger.Debug("User " + request.User.Id + " already logged in. Disconnecting..."); connected = false; return(ProtobufUtils.CreateErrorResponse(e.Message)); } } case AthletesRequestType.Logout: { logger.Debug("Processing logout request by user " + request.User.Id); Model.Admin user = ProtobufUtils.GetAdmin(request); try { lock (server) { server.Logout(user.ID, this); } connected = false; return(ProtobufUtils.CreateOkResponse()); } catch (Error e) { return(ProtobufUtils.CreateErrorResponse(e.Message)); } } case AthletesRequestType.GetEvents: { logger.Debug("Processing get events request"); try { Model.Event[] events; lock (server) { events = server.GetAllEvents().ToArray(); } return(ProtobufUtils.CreateListOfEventsResponse(events)); } catch (Error e) { return(ProtobufUtils.CreateErrorResponse(e.Message)); } } case AthletesRequestType.CountChildren: { logger.Debug("Processing count children request for event ID " + request.EventID); try { int count; lock (server) { count = server.CountChildren(request.EventID); } return(ProtobufUtils.CreateCounterOfChildrenResponse(count)); } catch (Error e) { return(ProtobufUtils.CreateErrorResponse(e.Message)); } } case AthletesRequestType.FilterChildren: { //FilterChildrenRequest filterChildrenRequest = (FilterChildrenRequest)request; //string data = filterChildrenRequest.Data; IList <int> parameters = Parser.ToList(request.Data); logger.Debug("Processing filter children request for event ID " + parameters[0]); try { Model.Child[] result; lock (server) { result = server.GetFilteredChildren(parameters[0], parameters[1], parameters[2]).ToArray(); } return(ProtobufUtils.CreateListOfChildrenResponse(result)); } catch (Error e) { return(ProtobufUtils.CreateErrorResponse(e.Message)); } } case AthletesRequestType.SaveChild: { logger.Debug("Processing save request for child ID " + request.Child.Id); try { Model.Child result; lock (server) { result = server.SaveChild(ProtobufUtils.GetChild(request)); } if (result != null) { return(ProtobufUtils.CreateSavedChildResponse(result)); } else { return(ProtobufUtils.CreateErrorResponse("Child " + request.Child.Id + " could not be saved")); } } catch (Error e) { return(ProtobufUtils.CreateErrorResponse(e.Message)); } } } return(response); }