Beispiel #1
0
        public void Initialise(IConfigSource config)
        {
            IConfig conf = config.Configs["OpenMetaverseEconomy"];

            if (null == conf)
            {
                return;
            }

            Enabled = conf.GetBoolean("enabled", false);

            if (!Enabled)
            {
                return;
            }

            if (gatewayURL.Equals(String.Empty))
            {
                gatewayEnvironment = conf.GetString("OMCurrencyEnvironment", "TEST");
                initURL            = conf.GetString("OMEconomyInitialize", String.Empty);
                gridURL            = config.Configs["GridService"].GetString("GridServerURI", String.Empty);
                gridShortName      = conf.GetString("GridShortName", String.Empty);
                gridURL            = CommunicationHelpers.NormaliseURL(gridURL);
            }

            gatewayURL = CommunicationHelpers.GetGatewayURL(initURL, Name, MODULE_VERSION, gatewayEnvironment);

            MainServer.Instance.AddXmlRPCHandler("OMCurrencyNotification", currencyNotify, false);
            MainServer.Instance.AddXmlRPCHandler("getCurrencyQuote", getCurrencyQuote, false);
            MainServer.Instance.AddXmlRPCHandler("buyCurrency", buyCurrency, false);
            MainServer.Instance.AddXmlRPCHandler("preflightBuyLandPrep", preBuyLand);
            MainServer.Instance.AddXmlRPCHandler("buyLandPrep", buyLand);

            m_log.InfoFormat("[OMECONOMY]: Module is enabled.", Name);
        }
Beispiel #2
0
        private Hashtable onObjectPaid(Hashtable requestData)
        {
            Hashtable rparms = new Hashtable();

            try
            {
                Dictionary <string, string> d = new Dictionary <string, string>();
                d.Add("method", "objectPaid");
                d.Add("id", (string)requestData["id"]);

                Dictionary <string, string> response = CommunicationHelpers.DoRequest(gatewayURL, d);
                UUID  primUUID   = UUID.Parse(response["primUUID"]);
                UUID  senderUUID = UUID.Parse(response["senderUUID"]);
                Int32 amount     = Int32.Parse(response["amount"]);

                if (SceneHandler.Instance.LocateClientObject(senderUUID) == null)
                {
                    throw new Exception("Avatar " + senderUUID.ToString() + " does not reside in this Region");
                }

                ObjectPaid handlerOnObjectPaid = OnObjectPaid;
                handlerOnObjectPaid(primUUID, senderUUID, amount);

                rparms["success"] = true;
            }
            catch (Exception e)
            {
                m_log.Error("[OMECONOMY]: onObjectPaid() " + e.Message);
                rparms["success"] = false;
            }
            return(rparms);
        }
Beispiel #3
0
        private Hashtable landBuy(Hashtable requestData)
        {
            Hashtable rparms = new Hashtable();

            try
            {
                Dictionary <string, string> d = new Dictionary <string, string>();
                d.Add("method", "buyLand");
                d.Add("id", (string)requestData["id"]);
                Dictionary <string, string> response = CommunicationHelpers.DoRequest(gatewayURL, d);

                UUID agentID            = UUID.Parse((string)response["senderUUID"]);
                int  parcelLocalID      = int.Parse((string)response["parcelLocalID"]);
                int  transactionID      = int.Parse((string)response["transactionID"]);
                int  amountDebited      = int.Parse((string)response["amountDebited"]);
                bool final              = (string)response["final"] == "1" ? true : false;
                bool authenticated      = (string)response["authenticated"] == "1" ? true : false;
                bool removeContribution = (string)response["removeContribution"] == "1" ? true : false;

                UUID        regionUUID = UUID.Parse(response["regionUUID"]);
                Scene       s          = SceneHandler.Instance.GetSceneByUUID(regionUUID);
                ILandObject parcel     = s.LandChannel.GetLandObject(parcelLocalID);

                UUID groupID         = parcel.LandData.GroupID;
                int  parcelArea      = parcel.LandData.Area;
                int  parcelPrice     = parcel.LandData.SalePrice;
                bool groupOwned      = parcel.LandData.IsGroupOwned;
                UUID parcelOwnerUUID = parcel.LandData.OwnerID;

                EventManager.LandBuyArgs landbuyArguments =
                    new EventManager.LandBuyArgs(agentID, groupID, final, groupOwned, removeContribution,
                                                 parcelLocalID, parcelArea, parcelPrice, authenticated);

                IClientAPI sender = SceneHandler.Instance.LocateClientObject(agentID);
                if (sender == null)
                {
                    throw new Exception("Avatar " + agentID.ToString() + " does not reside in this region");
                }

                landbuyArguments.amountDebited = amountDebited;
                landbuyArguments.parcelOwnerID = parcelOwnerUUID;
                landbuyArguments.transactionID = transactionID;

                s.EventManager.TriggerValidateLandBuy(sender, landbuyArguments);
                landbuyArguments.economyValidated = true;

                s.EventManager.TriggerLandBuy(sender, landbuyArguments);

                rparms["success"] = true;
            }
            catch (Exception e)
            {
                rparms["success"] = false;
                m_log.ErrorFormat("[OMECONOMY]: landBuy(...) Exception: {1} - {2}", Name, e.Message, e.StackTrace);
            }

            return(rparms);
        }
Beispiel #4
0
        private int getExchangeRate()
        {
            Dictionary <string, string> d = new Dictionary <string, string>();

            d.Add("method", "getExchangeRate");
            Dictionary <string, string> response = CommunicationHelpers.DoRequest(gatewayURL, d);

            return(int.Parse((string)response["currentExchangeRate"]));
        }
Beispiel #5
0
        public void Initialise(IConfigSource config)
        {
            m_communication = new CommunicationHelpers(config, MODULE_NAME, OMBase.OMBaseModule.MODULE_VERSION);

            MainServer.Instance.AddXmlRPCHandler("OMCurrencyNotification", currencyNotify, false);

            MainServer.Instance.AddXmlRPCHandler("getCurrencyQuote", getCurrencyQuote, false);
            MainServer.Instance.AddXmlRPCHandler("buyCurrency", buyCurrency, false);

            MainServer.Instance.AddXmlRPCHandler("preflightBuyLandPrep", preBuyLand);
            MainServer.Instance.AddXmlRPCHandler("buyLandPrep", buyLand);
        }
Beispiel #6
0
        private Hashtable deliverObject(Hashtable requestData)
        {
            Hashtable rparms = new Hashtable();

            try
            {
                Dictionary <string, string> d = new Dictionary <string, string>();
                d.Add("method", "deliverObject");
                d.Add("id", (string)requestData["id"]);

                Dictionary <string, string> response = CommunicationHelpers.DoRequest(gatewayURL, d);
                if (response["success"] == "TRUE" || response["success"] == "1")
                {
                    UInt32 localID      = UInt32.Parse(response["localID"]);
                    UUID   receiverUUID = UUID.Parse(response["receiverUUID"]);
                    UUID   categoryID   = UUID.Parse(response["categoryID"]);
                    byte   saleType     = byte.Parse(response["saleType"]);
                    int    salePrice    = response.ContainsKey("salePrice") ? Int32.Parse(response["salePrice"]) : 0;

                    IClientAPI sender = SceneHandler.Instance.LocateClientObject(receiverUUID);
                    if (sender == null)
                    {
                        throw new Exception("Avatar " + receiverUUID.ToString() + " does not reside in this region");
                    }

                    Scene s = SceneHandler.Instance.LocateSceneClientIn(receiverUUID);
                    if (s == null)
                    {
                        throw new Exception("Could not find the receiver's current scene");
                    }

                    IBuySellModule buyModule = s.RequestModuleInterface <IBuySellModule>();
                    if (buyModule != null)
                    {
                        buyModule.BuyObject(sender, categoryID, localID, saleType, salePrice);
                    }
                    else
                    {
                        throw new Exception("Could not find IBuySellModule");
                    }
                    rparms["success"] = true;
                }
            }
            catch (Exception e)
            {
                m_log.ErrorFormat("[OMECONOMY]: deliverObject() Exception: {1} - {2}", Name, e.Message, e.StackTrace);
                rparms["success"] = false;
            }
            return(rparms);
        }
Beispiel #7
0
        public XmlRpcResponse getCurrencyQuote(XmlRpcRequest request, IPEndPoint ep)
        {
            Hashtable requestData   = (Hashtable)request.Params[0];
            UUID      agentId       = UUID.Zero;
            int       amount        = 0;
            Hashtable quoteResponse = new Hashtable();

            try
            {
                UUID.TryParse((string)requestData["agentId"], out agentId);
                amount = (Int32)requestData["currencyBuy"];

                int realAmount = amount / getExchangeRate() + 1;
                amount = realAmount * getExchangeRate();

                Hashtable currencyResponse = new Hashtable();
                currencyResponse.Add("estimatedCost", realAmount * 100);
                currencyResponse.Add("currencyBuy", amount);

                quoteResponse.Add("success", true);
                quoteResponse.Add("currency", currencyResponse);
                quoteResponse.Add("confirm", "");
            }
            catch (Exception)
            {
                Dictionary <string, string> d = new Dictionary <string, string>();
                d.Add("method", "getString");
                d.Add("type", "chargeAccount");
                d.Add("avatarUUID", (string)requestData["agentId"]);

                Dictionary <string, string> response = CommunicationHelpers.DoRequest(gatewayURL, d);

                quoteResponse.Add("success", false);
                quoteResponse.Add("errorMessage", response["errorMessage"]);
                quoteResponse.Add("errorURI", response["errorURI"]);
            }

            XmlRpcResponse returnval = new XmlRpcResponse();

            returnval.Value = quoteResponse;
            return(returnval);
        }
Beispiel #8
0
        public void DoMoneyTransfer(UUID sourceId, UUID destId, int amount,
                                    int transactiontype, Dictionary <string, string> additionalParameters)
        {
            IClientAPI recipient     = SceneHandler.Instance.LocateClientObject(destId);
            String     recipientName = recipient == null?destId.ToString() : recipient.FirstName + " " + recipient.LastName;

            IClientAPI sender     = SceneHandler.Instance.LocateClientObject(sourceId);
            String     senderName = sender == null?sourceId.ToString() : sender.FirstName + " " + sender.LastName;

            Dictionary <string, string> d = new Dictionary <string, string>();

            d.Add("method", "transferMoney");
            d.Add("senderUUID", sourceId.ToString());
            d.Add("senderName", senderName);
            d.Add("recipientUUID", destId.ToString());
            d.Add("recipientName", recipientName);
            d.Add("amount", amount.ToString());
            d.Add("transactionType", transactiontype.ToString());
            if (transactiontype == (int)TransactionType.OBJECT_PAYS)
            {
                d.Add("regionUUID", SceneHandler.Instance.LocateSceneClientIn(destId).RegionInfo.RegionID.ToString());
            }
            else
            {
                d.Add("regionUUID", SceneHandler.Instance.LocateSceneClientIn(sourceId).RegionInfo.RegionID.ToString());
            }
            d.Add("gridURL", gridURL);
            d.Add("gridShortName", gridShortName);

            if (additionalParameters != null)
            {
                foreach (KeyValuePair <string, string> pair in additionalParameters)
                {
                    d.Add(pair.Key, pair.Value);
                }
            }

            if (CommunicationHelpers.DoRequest(gatewayURL, d) == null)
            {
                serviceNotAvailable(sourceId);
            }
        }
Beispiel #9
0
        public XmlRpcResponse buyCurrency(XmlRpcRequest request, IPEndPoint ep)
        {
            Hashtable requestData = (Hashtable)request.Params[0];
            Hashtable returnresp  = new Hashtable();

            try
            {
                UUID avatarUUID = UUID.Parse((string)requestData["agentId"]);
                int  amount     = (Int32)requestData["currencyBuy"];

                Dictionary <string, string> d = new Dictionary <string, string>();
                d.Add("method", "buyCurrency");
                d.Add("avatarUUID", avatarUUID.ToString());
                d.Add("amount", amount.ToString());

                Dictionary <string, string> response = CommunicationHelpers.DoRequest(gatewayURL, d);

                if (response["success"] == "TRUE" || response["success"] == "1")
                {
                    returnresp.Add("success", true);
                }
                else
                {
                    throw new Exception();
                }
            }
            catch (Exception)
            {
                returnresp.Add("success", false);
                returnresp.Add("errorMessage", "Please visit virwox.com to transfer money");
                returnresp.Add("errorURI", "http://www.virwox.com");
            }

            XmlRpcResponse returnval = new XmlRpcResponse();

            returnval.Value = returnresp;
            return(returnval);
        }
Beispiel #10
0
        private void OnScriptAnswer(IClientAPI remoteClient, UUID objectID, UUID itemID, int answer)
        {
            try
            {
                SceneObjectPart             part       = SceneHandler.Instance.FindPrim(objectID);
                Dictionary <string, string> parameters = new Dictionary <string, string>();
                parameters.Add("primUUID", part.UUID.ToString());
                parameters.Add("primName", part.Name);
                parameters.Add("primDescription", part.Description);

                parameters.Add("primLocation", SceneHandler.Instance.GetObjectLocation(part));
                parameters.Add("parentUUID", part.OwnerID.ToString());
                parameters.Add("regionUUID", part.RegionID.ToString());
                parameters.Add("gridURL", gridURL);
                parameters.Add("gridShortName", gridShortName);

                if ((answer & 0x2) == 2)
                {
                    parameters.Add("method", "allowPrimDebit");
                }
                else
                {
                    parameters.Add("method", "removePrimDebit");
                }

                TaskInventoryItem item = null;
                part.TaskInventory.TryGetValue(itemID, out item);
                Dictionary <string, string[]> inventoryItems = new Dictionary <string, string[]>();
                inventoryItems.Add(item.ItemID.ToString(), new string[] { answer.ToString(), item.Name });
                parameters.Add("inventoryItems", JsonMapper.ToJson(inventoryItems));

                CommunicationHelpers.DoRequest(gatewayURL, parameters);
            }
            catch (Exception e)
            {
                m_log.ErrorFormat("[OMECONOMY]: ScriptChangedEvent Exception: {1} - {2}", Name, e.Message, e.StackTrace);
            }
        }
Beispiel #11
0
        public XmlRpcResponse currencyNotify(XmlRpcRequest request, IPEndPoint ep)
        {
            XmlRpcResponse r = new XmlRpcResponse();

            try
            {
                Hashtable requestData       = (Hashtable)request.Params[0];
                Hashtable communicationData = (Hashtable)request.Params[1];

                #region // Debug
#if DEBUG
                m_log.Debug("[OMECONOMY]: currencyNotify(...)");
                foreach (DictionaryEntry requestDatum in requestData)
                {
                    m_log.Debug("[OMECONOMY]:   " + requestDatum.Key.ToString() + " " + (string)requestDatum.Value);
                }
                foreach (DictionaryEntry communicationDatum in communicationData)
                {
                    m_log.Debug("[OMECONOMY]:   " + communicationDatum.Key.ToString() + " " + (string)communicationDatum.Value);
                }
#endif
                #endregion

                String method = (string)requestData["method"];
                requestData.Remove("method");
                if (CommunicationHelpers.ValidateRequest(communicationData, requestData, gatewayURL))
                {
                    switch (method)
                    {
                    case "notifyDeliverObject": r.Value = deliverObject(requestData);
                        break;

                    case "notifyOnObjectPaid": r.Value = onObjectPaid(requestData);
                        break;

                    case "notifyLandBuy": r.Value = landBuy(requestData);
                        break;

                    case "notifyChangePrimPermission": r.Value = changePrimPermissions(requestData);
                        break;

                    case "notifyBalanceUpdate": r.Value = balanceUpdate(requestData);
                        break;

                    case "notifyGetVersion": r.Value = GetVersion(requestData);
                        break;

                    default: m_log.ErrorFormat("[OMECONOMY]: Method {1} is not supported", Name, method);
                        break;
                    }
                }
                else
                {
                    throw new Exception("Hash values do not match");
                }
            }
            catch (Exception e)
            {
                m_log.ErrorFormat("[OMECONOMY]: genericNotify() Exception: {1} - {2}", Name, e.Message, e.StackTrace);
                r.SetFault(1, "Could not parse the requested method");
            }
            return(r);
        }