예제 #1
0
        private void LogOut()
        {
            Application.Current.MainPage = new LoginPage();
            RhodeITDB db = new RhodeITDB();

            db.LogOut();
        }
예제 #2
0
        public async Task <Tuple <bool, string> > AddUserRequestAsync(LoginDetails details)
        {
            RhodeITDB       db = new RhodeITDB();
            AddUserFunction addUserFunction = new AddUserFunction
            {
                FromAddress        = details.Ethereum_Address,
                Gas                = Variables.gas,
                Studentno_staff_no = details.User_ID
            };
            string receipt = "0x";
            bool   exists  = await UserExistsRequestAndWaitForReceiptAsync(details.Ethereum_Address).ConfigureAwait(false);

            if (exists)
            {
                db.StoreTransactionReceipt(new Models.TransactionReceipt {
                    Receipt = receipt, Activity = "LoggedIn"
                });
            }
            else
            {
                receipt = await ContractHandler.SendRequestAsync(addUserFunction).ConfigureAwait(false);

                exists = await UserExistsRequestAndWaitForReceiptAsync(details.Ethereum_Address).ConfigureAwait(false);

                db.StoreTransactionReceipt(new Models.TransactionReceipt {
                    Receipt = receipt, Activity = "Registered"
                });
                db.UpdateLoginDetails(details);
            }
            return(new Tuple <bool, string>(exists, receipt));
        }
예제 #3
0
        public async Task <bool> RentBicycleRequestAndWaitForReceiptAsync(Bicycle rental)
        {
            RhodeITDB           db                  = new RhodeITDB();
            bool                rentalResults       = false;
            RentBicycleFunction rentBicycleFunction = new RentBicycleFunction
            {
                BicycleId      = rental.ID,
                DockingStation = rental.DockdeAt,
                FromAddress    = rental.renter,
                Gas            = Variables.gas
            };

            try
            {
                Nethereum.RPC.Eth.DTOs.TransactionReceipt transactionReceipt = await ContractHandler.SendRequestAndWaitForReceiptAsync(rentBicycleFunction, null).ConfigureAwait(false);

                db.StoreTransactionReceipt(new Models.TransactionReceipt {
                    Receipt = transactionReceipt.TransactionHash, Activity = "Rented out bicycle"
                });
                db.StoreUserRide(new Ride {
                    ID = rental.ID, StationName = rental.DockdeAt, Docked = rental.Status, TransactionReceipt = transactionReceipt.TransactionHash
                });
                rentalResults = await UnlockBicycleAsync(rental).ConfigureAwait(false);
            }
            catch (Exception e)
            {
                Console.WriteLine("Something went wrong bicycle rental: " + e.Message);
                return(rentalResults);
            }
            return(rentalResults);
        }
예제 #4
0
        /// <summary>
        /// @dev function that allows user to login this function also adds users to the smartcontracts storage users dont not need to register university credentials will be sufficient
        /// </summary>
        /// <param name="studentNo">student number</param>
        /// <param name="password">password</param>
        /// <returns>if the login was succefull or not</returns>
        public async Task RegisterStudent(LoginDetails details)
        {
            rhodeITDB       = new RhodeITDB();
            details.User_ID = details.User_ID.ToLower();
            string Thash = "";
            Tuple <bool, string> results = await SmartContractFunctions.AddUserRequestAsync(details).ConfigureAwait(false);

            Thash = results.Item2;
            details.TransactionHash = Thash;
            rhodeITDB.UpdateLoginDetails(details);
        }
예제 #5
0
        public async Task <GetDockingStationOutputDTO> GetDockingStationQueryAsync()
        {
            LoginDetails details = new RhodeITDB().GetUserDetails();
            GetDockingStationFunction getDockingStationFunction = new GetDockingStationFunction
            {
                Gas         = Variables.gas,
                FromAddress = details.Ethereum_Address
            };
            GetDockingStationOutputDTO stationDetails = await ContractHandler.QueryDeserializingToObjectAsync <GetDockingStationFunction, GetDockingStationOutputDTO>(getDockingStationFunction, null).ConfigureAwait(false);

            return(stationDetails);
        }
예제 #6
0
        public async Task <List <string> > GetRegisteredDockingStationKeysQueryAsync()
        {
            LoginDetails details = new RhodeITDB().GetUserDetails();
            GetRegisteredDockingStationKeysFunction getRegisteredDockingStationKeysFunction = new GetRegisteredDockingStationKeysFunction
            {
                FromAddress = details.Ethereum_Address,
                Gas         = Variables.gas
            };
            List <string> keys = await ContractHandler.QueryAsync <GetRegisteredDockingStationKeysFunction, List <string> >(getRegisteredDockingStationKeysFunction, null).ConfigureAwait(false);

            return(keys);
        }
예제 #7
0
        public MainMenuTab()
        {
            db            = new RhodeITDB();
            dets          = db.GetUserDetails();
            Title         = "Welcome " + dets.User_ID;
            menuViewModel = new MainMenuTabsViewModel();
            ToolbarItem logOut = new ToolbarItem {
                Text = "Logout", Order = ToolbarItemOrder.Primary, Priority = 1
            };

            ToolbarItems.Add(new ToolbarItem("Logout", null, new Action(() => LogOut()), ToolbarItemOrder.Secondary, CheckPlatform()));
            Content = menuViewModel.main;
        }
        public void Purchase_Ride_Credits()
        {
            RhodeITService rhodeITServices = new RhodeITService();
            RhodeITDB      db     = new RhodeITDB();
            IUserDialogs   dialog = UserDialogs.Instance;

            dialog.ShowLoading("Purchasing Ride Credits...");
            try
            {
                bool result = int.TryParse(amount.Text, out int rideCredit);
                if (!result)
                {
                    throw new InvalidNumberException("Invalid");
                }
                try
                {
                    if (rideCredit <= 0)
                    {
                        throw new InvalidNumberException("");
                    }
                    else
                    {
                        Details = db.GetUserDetails();
                        rhodeITServices.UpdateCreditRequestAsync(Details.Ethereum_Address, rideCredit).ConfigureAwait(false);
                        Details.RideCredits += rideCredit;
                        RhodesDataBase.ChargeUserRideCreditBalanceToAccount(Details).ConfigureAwait(false);
                        db.UpdateLoginDetails(Details);
                        dialog.HideLoading();
                        dialog.Alert(string.Format("Succesfully recharged ride credits with {0}", rideCredit), "Success", "OK");
                    }
                }
                catch (Exception e)
                {
                    dialog.HideLoading();
                    PopupLayout.Dismiss();
                    Console.WriteLine("Error whilst purcasing credits: " + e.Message);
                    dialog.Alert("Something went wrong whilst purchasing credit", "Insufficient Funds", "OK");
                }
            }
            catch (InvalidNumberException e)
            {
                dialog.HideLoading();
                PopupLayout.Dismiss();
                Console.WriteLine("Error whilst purcasing credits: " + e.Message);
                dialog.Alert("Please ensure you entered a valid number e.g. 12", "Invalid Number", "OK");
            }
        }
예제 #9
0
        public App()
        {
            Current.Resources.MergedDictionaries.Clear();
            Current.Resources.MergedDictionaries.Add(new LightTheme());
            XF.Material.Forms.Material.Init(this);
            Syncfusion.Licensing.SyncfusionLicenseProvider.RegisterLicense(Variables.SyncFusionLicense);
            RhodeITDB    db   = new RhodeITDB();
            LoginDetails dets = db.GetUserDetails();

            if (!string.IsNullOrEmpty(dets.User_ID))
            {
                Current.MainPage = new NavigationPage(new MainMenuTab());
            }
            else
            {
                Current.MainPage = new LoginPage();
            }
        }
예제 #10
0
        public async Task <string> UpdateCreditRequestAsync(string address, int amount)
        {
            RhodeITDB db = new RhodeITDB();
            //@dev only admin is allowed to approve the purchasing of ride credits
            UpdateCreditFunction updateCreditFunction = new UpdateCreditFunction
            {
                FromAddress  = Variables.adminAddress,
                Gas          = Variables.gas,
                AmountToSend = amount,
                Receipient   = address
            };
            string receipt = await ContractHandler.SendRequestAsync(updateCreditFunction).ConfigureAwait(false);

            db.StoreTransactionReceipt(new Models.TransactionReceipt {
                Receipt = receipt, Activity = "Purchased Ride Credits"
            });
            return(receipt);
        }