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); }
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); }
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); }
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"])); }
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); }
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); }
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); }
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); } }
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); }
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); } }
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); }