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);
            }
        }
Beispiel #2
0
        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));
        }
Beispiel #3
0
 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);
        }