private IEnumerator Request(SHKeyValue keyValue, string methodName, Action <string> valueReceived = null)
        {
            var url = string.Format(CultureInfo.InvariantCulture,
                                    "{0}/services/storage/{1}.ashx?playerId={2}&key={3}&value={4}",
                                    m_serverAddress, methodName, m_playerId, keyValue.Key, keyValue.Value);

            SHLog.Debug("SHGlobalServerKeyValueStorageProvider: requesting url '{0}'.", url);

            var www = new WWW(url);

            yield return(www);

            if (String.IsNullOrEmpty(www.error))
            {
                var response = www.text;

                if (!String.IsNullOrEmpty(response))
                {
                    SHLog.Debug("SHGlobalServerKeyValueStorageProvider: response received '{0}'.", response);

                    if (valueReceived != null)
                    {
                        valueReceived(response.Replace("\"", ""));
                    }
                }
            }
            else
            {
                SettingValueFailed.Raise(this, new SHSettingValueFailedEventArgs(keyValue));
            }
        }
        private IEnumerator Request(SHKeyValue keyValue, string methodName, Action<string> valueReceived = null)
        {
            var url = string.Format (CultureInfo.InvariantCulture,
                "{0}/services/storage/{1}.ashx?playerId={2}&key={3}&value={4}",
                m_serverAddress, methodName, m_playerId, keyValue.Key, keyValue.Value);

            SHLog.Debug ("SHGlobalServerKeyValueStorageProvider: requesting url '{0}'.", url);

            var www = new WWW (url);
            yield return www;

            if (String.IsNullOrEmpty (www.error))
            {
                var response = www.text;

                if (!String.IsNullOrEmpty (response))
                {
                    SHLog.Debug ("SHGlobalServerKeyValueStorageProvider: response received '{0}'.", response);

                    if (valueReceived != null)
                    {
                        valueReceived (response.Replace("\"", ""));
                    }
                }
            }
            else
            {
                SettingValueFailed.Raise (this, new SHSettingValueFailedEventArgs (keyValue));
            }
        }
        public void Set(string key, string value)
        {
            SetCache(key, value);

            var keyValue = new SHKeyValue ();
            keyValue.Key = key;
            keyValue.Value = value;

            SH.StartCoroutine (Request (keyValue, "SetValue"));
        }
        public void Set(string key, string value)
        {
            SetCache(key, value);

            var keyValue = new SHKeyValue();

            keyValue.Key   = key;
            keyValue.Value = value;

            SH.StartCoroutine(Request(keyValue, "SetValue"));
        }
        public void Get(string key, Action<string> valueReceived)
        {
            if (m_cache.ContainsKey (key))
            {
                valueReceived (m_cache [key]);
                return;
            }

            var keyValue = new SHKeyValue ();
            keyValue.Key = key;
            SH.StartCoroutine (Request (keyValue, "GetValue", (value) => {
                SetCache (key, value);
                valueReceived (value);
            }));
        }
        public void Get(string key, Action <string> valueReceived)
        {
            if (m_cache.ContainsKey(key))
            {
                valueReceived(m_cache [key]);
                return;
            }

            var keyValue = new SHKeyValue();

            keyValue.Key = key;
            SH.StartCoroutine(Request(keyValue, "GetValue", (value) => {
                SetCache(key, value);
                valueReceived(value);
            }));
        }
 /// <summary>
 /// Initializes a new instance of the <see cref="Skahal.Data.SHSettingValueFailedEventArgs"/> class.
 /// </summary>
 /// <param name='keyValue'>
 /// Key value.
 /// </param>
 public SHSettingValueFailedEventArgs(SHKeyValue keyValue)
 {
     KeyValue = keyValue;
 }
 /// <summary>
 /// Initializes a new instance of the <see cref="Skahal.Data.SHSettingValueFailedEventArgs"/> class.
 /// </summary>
 /// <param name='keyValue'>
 /// Key value.
 /// </param>
 public SHSettingValueFailedEventArgs(SHKeyValue keyValue)
 {
     KeyValue = keyValue;
 }