private void Awake() { if (CurlLog.Assert(instance == null, "Only one CurlMultiUpdater instance is allowed")) { instance = this; } }
private void Awake() { CurlLog.Assert(instance == null, "Only one CurlMultiUpdater instance is allowed"); if (instance == null) { instance = this; } defaultMulti = new CurlMulti(); }
internal void RemoveEasy(CurlEasy easy) { lock (this) { var res = Lib.curl_multi_remove_handle(multiPtr, (IntPtr)easy); CurlLog.Assert(res == CURLM.OK, $"RemoveEasy {res}"); } lock (workingEasies) { workingEasies.Remove((IntPtr)easy); } }
internal void AddEasy(CurlEasy easy) { lock (this) { var wc = workingEasies.Count; var res = Lib.curl_multi_add_handle(multiPtr, (IntPtr)easy); CurlLog.Assert(res == CURLM.OK, $"AddEasy {easy.uri} {res} {wc}"); easy.SetOpt(CURLOPT.SHARE, (IntPtr)share); } lock (workingEasies) { workingEasies[(IntPtr)easy] = easy; } }
internal int Perform() { if (!started) { return(0); } long running = 0; if (multiPtr != IntPtr.Zero) { lock (this) { var res = Lib.curl_multi_perform(multiPtr, ref running); CurlLog.Assert(res == CURLM.OK, $"Perform {res}"); } while (true) { long index = 0; var msgPtr = Lib.curl_multi_info_read(multiPtr, ref index); if (msgPtr != IntPtr.Zero) { var msg = (CurlMsg)msgPtr; if (msg.message == CURLMSG.DONE) { CurlEasy easy = null; lock (workingEasies) { workingEasies.TryGetValue(msg.easyPtr, out easy); } if (easy != null) { RemoveEasy(easy); easy.OnMultiPerform(msg.result, this); } } } else { break; } } } return((int)running); }