public void PerformTransaction(VM vm, bool testOnly, uint uid1, uint uid2, int amount, VMAsyncTransactionCallback callback)
        {
            var result = PerformTransaction(vm, testOnly, uid1, uid2, amount);
            if (callback != null)
            {
                var obj1 = vm.GetObjectByPersist(uid1);
                var obj2 = vm.GetObjectByPersist(uid2);
                var finalAmount = amount;

                new System.Threading.Thread(() =>
                {
                    //System.Threading.Thread.Sleep(250);
                    callback(result, finalAmount,
                        uid1, (obj1 == null) ? 0 : obj1.TSOState.Budget.Value,
                        uid2, (obj2 == null) ? 0 : obj2.TSOState.Budget.Value);
                }).Start();
            }
        }
Exemple #2
0
        public void PerformTransaction(VM vm, bool testOnly, uint uid1, uint uid2, int amount, short type, short thread, VMAsyncTransactionCallback callback)
        {
            Host.InBackground(() =>
            {
                using (var db = DAFactory.Get())
                {
                    var result = (testOnly)?db.Avatars.TestTransaction(uid1, uid2, amount, 0):db.Avatars.Transaction(uid1, uid2, amount, type);
                    if (result == null)
                    {
                        result = new Database.DA.Avatars.DbTransactionResult()
                        {
                            success = false
                        }
                    }
                    ;

                    var finalAmount = amount;

                    //update client side budgets for avatars involved.
                    vm.SendCommand(new VMNetAsyncResponseCmd(thread, new VMTransferFundsState
                    {
                        Responded      = true,
                        Success        = result.success,
                        TransferAmount = result.amount,
                        UID1           = uid1,
                        Budget1        = (uint)result.source_budget,
                        UID2           = uid2,
                        Budget2        = (uint)result.dest_budget
                    }));

                    callback(result.success, result.amount,
                             uid1, (uint)result.source_budget,
                             uid2, (uint)result.dest_budget);
                }
            });
        }
Exemple #3
0
 public void PerformTransaction(VM vm, bool testOnly, uint uid1, uint uid2, int amount, short type, VMAsyncTransactionCallback callback)
 {
     PerformTransaction(vm, testOnly, uid1, uid2, amount, type, 0, callback);
 }
Exemple #4
0
        public void PurchaseFromOwner(VM vm, VMMultitileGroup obj, uint purchaserPID, VMAsyncInventorySaveCallback callback, VMAsyncTransactionCallback tcallback)
        {
            var  objectPID = obj.BaseObject.PersistID;
            var  objb      = obj.BaseObject;
            uint guid      = objb.Object.OBJ.GUID;

            if (objb.MasterDefinition != null)
            {
                guid = objb.MasterDefinition.GUID;
            }
            var isNew     = objectPID == 0;
            var state     = new VMStandaloneObjectMarshal(obj);
            var dbState   = GenerateObjectPersist(obj);
            var salePrice = obj.SalePrice;
            var owner     = ((VMTSOObjectState)objb.TSOState).OwnerID;

            //object will stay on lot for now.

            Host.InBackground(() =>
            {
                using (var da = DAFactory.Get())
                {
                    SaveInventoryState(isNew, objectPID, state, dbState, guid, (bool success, uint objPID) =>
                    {
                        if (success)
                        {
                            //todo: transaction-ify this whole thing? might need a large scale rollback...
                            var tresult = da.Avatars.Transaction(purchaserPID, owner, salePrice, 0);
                            if (tresult == null)
                            {
                                tresult = new Database.DA.Avatars.DbTransactionResult()
                                {
                                    success = false
                                }
                            }
                            ;

                            //update the budgets of the respective characters.
                            var finalAmount = salePrice;
                            tcallback(tresult.success, tresult.amount,
                                      purchaserPID, (uint)tresult.source_budget,
                                      owner, (uint)tresult.dest_budget);

                            if (tresult.success)
                            {
                                dbState.owner_id = purchaserPID;
                                dbState.lot_id   = null;
                                da.Objects.UpdatePersistState(objPID, dbState); //perform the final object transfer. todo: logging
                                callback(true, objPID);
                            }
                            else
                            {
                                callback(false, objPID);
                            }
                        }
                        else
                        {
                            callback(false, objPID);
                        }
                    }, true);
                }
            });
        }
Exemple #5
0
        public void PerformTransaction(VM vm, bool testOnly, uint uid1, uint uid2, int amount, short type, short thread, VMAsyncTransactionCallback callback)
        {
            var result = PerformTransaction(vm, testOnly, uid1, uid2, amount);

            if (callback != null)
            {
                var obj1        = vm.GetObjectByPersist(uid1);
                var obj2        = vm.GetObjectByPersist(uid2);
                var finalAmount = amount;

                new System.Threading.Thread(() =>
                {
                    //update client side budgets for avatars involved.
                    vm.SendCommand(new VMNetAsyncResponseCmd(thread, new VMTransferFundsState
                    {
                        Responded      = true,
                        Success        = result,
                        TransferAmount = finalAmount,
                        UID1           = uid1,
                        Budget1        = (obj1 == null) ? 0 : obj1.TSOState.Budget.Value,
                        UID2           = uid2,
                        Budget2        = (obj2 == null) ? 0 : obj2.TSOState.Budget.Value
                    }));

                    callback(result, finalAmount,
                             uid1, (obj1 == null) ? 0 : obj1.TSOState.Budget.Value,
                             uid2, (obj2 == null) ? 0 : obj2.TSOState.Budget.Value);
                }).Start();
            }
        }
Exemple #6
0
 public void PurchaseFromOwner(VM vm, VMMultitileGroup obj, uint purchaserPID, VMAsyncInventorySaveCallback callback, VMAsyncTransactionCallback tcallback)
 {
     callback(true, obj.BaseObject.PersistID);
     //todo: nice stub for this using database?
 }
Exemple #7
0
        public void PerformTransaction(VM vm, bool testOnly, uint uid1, uint uid2, int amount, VMAsyncTransactionCallback callback)
        {
            var result = PerformTransaction(vm, testOnly, uid1, uid2, amount);

            if (callback != null)
            {
                var obj1        = vm.GetObjectByPersist(uid1);
                var obj2        = vm.GetObjectByPersist(uid2);
                var finalAmount = amount;

                new System.Threading.Thread(() =>
                {
                    //System.Threading.Thread.Sleep(250);
                    callback(result, finalAmount,
                             uid1, (obj1 == null) ? 0 : obj1.TSOState.Budget.Value,
                             uid2, (obj2 == null) ? 0 : obj2.TSOState.Budget.Value);
                }).Start();
            }
        }
        public void PerformTransaction(VM vm, bool testOnly, uint uid1, uint uid2, int amount, VMAsyncTransactionCallback callback)
        {
            Host.InBackground(() =>
            {
                using (var db = DAFactory.Get())
                {
                    var result = (testOnly)?db.Avatars.TestTransaction(uid1, uid2, amount, 0):db.Avatars.Transaction(uid1, uid2, amount, 0);
                    if (result == null)
                    {
                        result = new Database.DA.Avatars.DbTransactionResult()
                        {
                            success = false
                        }
                    }
                    ;

                    var finalAmount = amount;
                    callback(result.success, result.amount,
                             uid1, (uint)result.source_budget,
                             uid2, (uint)result.dest_budget);
                }
            });
        }