예제 #1
0
        private async Task <string> getSavedAddress(GPSUser user, string name)
        {
            var names = db.GetUserLocations(user.Username);

            if (names != null)
            {
                int i = 0;
                foreach (var n in names)
                {
                    if (names[i] == name)
                    {
                        break;
                    }
                    i++;
                }

                string osmID   = db.GetAddress(user.Username, names[i]);
                string address = await GetRequest.GetFromURLAsync(String.Format("https://nominatim.openstreetmap.org/lookup?osm_ids={0}&format=json", osmID));

                return(address);
            }
            else
            {
                return(null);
            }
        }
예제 #2
0
        public async Task RunServer()
        {
            Listener.Start();
            while (true)
            {
                _ = await Listener.AcceptTcpClientAsync().ContinueWith(async(t) =>
                {
                    byte[] buffer = new byte[1024];
                    GPSUser user  = new GPSUser(t.Result);
                    while (true)
                    {
                        string input = await getUserInput(user.client, buffer);
                        Array.Clear(buffer, 0, buffer.Length);
                        //Console.WriteLine($"CLIENT: {input}");
                        _ = Task.Run(async() =>
                        {
                            string response = "";
                            try
                            {
                                response = await processCommand(user, input);
                            }
                            catch (Exception ex)
                            {
                                throw new Exception(ex.Message);
                            }

                            //.WriteLine($"SERVER: {response}");
                            await Send(user.client, response);
                        });
                    }
                });
            }
        }
예제 #3
0
        private async Task <string> processCommand(GPSUser user, string fullMessage)
        {
            string[] arguments = fullMessage.Split(" ");
            string   command   = arguments[0];

            if (command == "LOGIN")
            {
                if (user.LoggedIn || arguments.Length != 3)
                {
#if DEBUG
                    Console.WriteLine("PAKIET: " + fullMessage);
#endif
                    return("FAIL");
                }
                string arg1     = arguments[1].Trim();
                string arg2     = arguments[2].Trim();
                string username = await login(arg1, arg2);

                if (username != null)
                {
                    //login succesful
                    user.Username = username;
                    user.LoggedIn = true;
                    return("SUCCESS");
                }
                else
                {
#if DEBUG
                    Console.WriteLine("PAKIET: " + fullMessage);
#endif
                    return("FAIL");
                }
            }
            else if (command == "LOGOUT")
            {
                if (!user.LoggedIn)
                {
#if DEBUG
                    Console.WriteLine("PAKIET: " + fullMessage);
#endif
                    return("FAIL");
                }
                user.LoggedIn = false;
                user.Username = null;
                return("SUCCESS");
            }
            else if (command == "CREATEACCOUNT")
            {
                if (user.LoggedIn || arguments.Length != 3)
                {
#if DEBUG
                    Console.WriteLine("PAKIET: " + fullMessage);
#endif
                    return("FAIL");
                }
                if (await createAccount(arguments[1], arguments[2]))
                {
                    return("ACCOUNTCREATED");
                }
                else
                {
#if DEBUG
                    Console.WriteLine("PAKIET: " + fullMessage);
#endif
                    return("FAIL");
                }
            }
            else if (command == "CHANGEPASSWORD")
            {
                if (!user.LoggedIn || arguments.Length != 3)
                {
                    return("FAIL");
                }
                if (db.ChangePassword(user.Username, arguments[1], arguments[2]))
                {
                    return("SUCCESS");
                }
                else
                {
#if DEBUG
                    Console.WriteLine("PAKIET: " + fullMessage);
#endif
                    return("FAIL");
                }
            }
            else if (command == "GETADDRESS")
            {
                if (!user.LoggedIn)
                {
                    return("FAIL");
                }
                //assuming that client replaced spaces with +
                Address[] address = await getAddresses(arguments[1]);

                if (address != null)
                {
                    return(JsonSerializer.Serialize <Address[]>(address));
                }
                else
                {
#if DEBUG
                    Console.WriteLine("PAKIET: " + fullMessage);
#endif
                    return("FAIL");
                }
            }
            else if (command == "GETROUTE")
            {
                if (!user.LoggedIn)
                {
                    return("FAIL");
                }
                RouteModel instructions = await getRoute(arguments[1], arguments[2], arguments[3], arguments[4]);

                if (instructions != null)
                {
                    return(JsonSerializer.Serialize(instructions));
                }
                else
                {
#if DEBUG
                    Console.WriteLine("PAKIET: " + fullMessage);
#endif
                    return("FAIL");
                }
            }
            else if (command == "LISTSAVEDADDRESSES")
            {
                if (!user.LoggedIn)
                {
                    return("FAIL");
                }
                string result = await listSavedAddressess(user.Username);

                if (result != null)
                {
                    return(result);
                }
                else
                {
#if DEBUG
                    Console.WriteLine("PAKIET: " + fullMessage);
#endif
                    return("FAIL");
                }
            }
            else if (command == "GETSAVEDADDRESS")
            {
                if (!user.LoggedIn)
                {
                    return("FAIL");
                }
                return(await getSavedAddress(user, arguments[1]));
            }
            else if (command == "EDITADDRESS")
            {
                if (!user.LoggedIn)
                {
#if DEBUG
                    Console.WriteLine("PAKIET: " + fullMessage);
#endif
                    return("FAIL");
                }
                if (arguments.Length == 3)
                {
                    if (await editAddress(user.Username, arguments[1], arguments[2]))
                    {
                        return("SUCCESS");
                    }
                }
                else if (arguments.Length == 5)
                {
                    if (await editAddress(user.Username, arguments[1], arguments[2], arguments[3], arguments[4]))
                    {
                        return("SUCCESS");
                    }
                }
                else
                {
#if DEBUG
                    Console.WriteLine("PAKIET: " + fullMessage);
#endif
                    return("FAIL");
                }
            }
            else if (command == "ADDADDRESS")
            {
                if (!user.LoggedIn || arguments.Length != 4)
                {
#if DEBUG
                    Console.WriteLine("PAKIET: " + fullMessage);
#endif
                    return("FAIL");
                }
                if (db.AddLocation(user.Username, arguments[1], arguments[2], arguments[3]))
                {
                    return("SUCCESS");
                }
                else
                {
#if DEBUG
                    Console.WriteLine("PAKIET: " + fullMessage);
#endif
                    return("FAIL");
                }
            }
            else if (command == "DELETEADDRESS")
            {
                if (!user.LoggedIn || arguments.Length != 2)
                {
#if DEBUG
                    Console.WriteLine("PAKIET: " + fullMessage);
#endif
                    return("FAIL");
                }
                if (db.DeleteLocation(user.Username, arguments[1]))
                {
                    return("SUCCESS");
                }
                else
                {
#if DEBUG
                    Console.WriteLine("PAKIET: " + fullMessage);
#endif
                    return("FAIL");
                }
            }
            else if (command == "DESCRIBEADDRESS")
            {
                if (!user.LoggedIn || arguments.Length != 3)
                {
#if DEBUG
                    Console.WriteLine("PAKIET: " + fullMessage);
#endif
                    return("FAIL");
                }
                return(await getAddressInfo(arguments[1], arguments[2]));
            }
            return("UNKNOWNCOMMAND");
        }
예제 #4
0
 public GPSUser RegisterUser(GPSUser user)
 {
     throw new NotImplementedException();
 }
예제 #5
0
 /// <summary>
 /// Create a new GPSUser object.
 /// </summary>
 /// <param name="userLoginID">Initial value of UserLoginID.</param>
 /// <param name="roleID">Initial value of RoleID.</param>
 public static GPSUser CreateGPSUser(string userLoginID, int roleID)
 {
     GPSUser gPSUser = new GPSUser();
     gPSUser.UserLoginID = userLoginID;
     gPSUser.RoleID = roleID;
     return gPSUser;
 }
예제 #6
0
 /// <summary>
 /// There are no comments for GPSUser in the schema.
 /// </summary>
 public void AddToGPSUser(GPSUser gPSUser)
 {
     base.AddObject("GPSUser", gPSUser);
 }