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