예제 #1
0
        public void sync(long time, int moves, Difficulty diff, int userid, int puzzleid, IRestCallback cb)
        {
            if (!NetworkInterface.GetIsNetworkAvailable())
            {
                cb.syncOneCallback(false, null);
                return;
            }

            lock (this)
            {
                if (webRequest != null)
                {
                    cb.syncOneCallback(false, null);
                    return;
                }
            }

            callback = cb;
            string sdiff = "easy";

            switch (diff)
            {
            case Difficulty.EASY:
                sdiff = "easy";
                break;

            case Difficulty.MEDIUM:
                sdiff = "medium";
                break;

            case Difficulty.HARD:
                sdiff = "hard";
                break;

            case Difficulty.EXPERT:
                sdiff = "expert";
                break;
            }

            string request = String.Format(USERNAME_SERVICE + "/{0}/puzzle/{1}/{2}", userid, puzzleid, sdiff);

            webRequest        = (HttpWebRequest)WebRequest.Create(new Uri(request));
            webRequest.Method = "POST";

            IAsyncResult result = webRequest.BeginGetRequestStream(new AsyncCallback(requestSyncOneCreateStream), new SyncOneRequest(time, moves));

            timer = new Timer(new TimerCallback(requestSyncOneTimeout), callback, 15 * 1000, Timeout.Infinite);
        }
예제 #2
0
        private void requestSyncOneCompleted(IAsyncResult result)
        {
            HttpWebRequest wr = webRequest;

            lock (this)
            {
                webRequest = null;
                if (timer != null)
                {
                    timer.Dispose();
                    timer = null;
                }
            }

            if (wr == null || !wr.HaveResponse)
            {
                callback.syncOneCallback(false, null);
                return;
            }

            try
            {
                HttpWebResponse webResponse = (HttpWebResponse)wr.EndGetResponse(result);

                if (webResponse.StatusCode != HttpStatusCode.OK)
                {
                    callback.syncOneCallback(false, null);
                    return;
                }

                XmlSerializer xml = new XmlSerializer(typeof(SyncOneResponse));
                try
                {
                    SyncOneResponse sor = (SyncOneResponse)xml.Deserialize(webResponse.GetResponseStream());
                    callback.syncOneCallback(true, sor);
                }
                catch (InvalidOperationException)
                {
                    callback.syncOneCallback(false, null);
                }
            }
            catch (WebException)
            {
                callback.syncOneCallback(false, null);
                return;
            }
        }
예제 #3
0
        public void sync(long time, int moves, Difficulty diff, int userid, int puzzleid, IRestCallback cb)
        {
            if (!NetworkInterface.GetIsNetworkAvailable())
            {
                cb.syncOneCallback(false, null);
                return;
            }

            lock (this)
            {
                if (webRequest != null)
                {
                    cb.syncOneCallback(false, null);
                    return;
                }
            }

            callback = cb;
            string sdiff = "easy";
            switch (diff)
            {
                case Difficulty.EASY:
                    sdiff = "easy";
                    break;
                case Difficulty.MEDIUM:
                    sdiff = "medium";
                    break;
                case Difficulty.HARD:
                    sdiff = "hard";
                    break;
                case Difficulty.EXPERT:
                    sdiff = "expert";
                    break;
            }

            string request = String.Format(USERNAME_SERVICE + "/{0}/puzzle/{1}/{2}", userid, puzzleid, sdiff);
            webRequest = (HttpWebRequest)WebRequest.Create(new Uri(request));
            webRequest.Method = "POST";

            IAsyncResult result = webRequest.BeginGetRequestStream(new AsyncCallback(requestSyncOneCreateStream), new SyncOneRequest(time, moves));

            timer = new Timer(new TimerCallback(requestSyncOneTimeout), callback, 15 * 1000, Timeout.Infinite);
        }