Esempio n. 1
0
        private static IMegaRequest ThreadInit(MegaUser user, Action <Mega> OnSuccess, Action <int> OnError)
        {
            var initTransport = new Transport();
            var mega          = new Mega(initTransport);

            // mandatory anonymous registration
            if (user == null || (user.Email == null && user.Id == null))
            {
                user = new MegaUser();
                var req   = new MRequestCreateAnon <MResponseCreateAnon>(user);
                int?error = null;
                req.Success += (s, args) => user.Id = args.UserId;
                req.Error   += (s, e) => error = e.Error;
                initTransport.EnqueueRequest(req);
                req.ResetEvent.WaitOne();
                if (error != null)
                {
                    OnError((int)error);
                    // just to have the ResetEvent for async compatibility
                    return(new EmptyRequest());
                }
            }

            // set the credentials
            mega.User = user;

            // the login itself
            var sidRequest = new MRequestGetSid <MResponseGetSid>(mega.User);

            sidRequest.Success += (s, args) =>
            {
                mega.User.Sid = args.SessionId;
                mega.User.SetMasterKey(args.MasterKey.Value);

                var getUserRequest = new MRequestGetUser <MResponseGetUser>(mega.User);
                getUserRequest.Success += (s2, args2) =>
                {
                    mega.User.Status = args2.UserStatus;
                    mega.User.Email  = args2.Email;
                    mega.User.Id     = args2.UserId;
                    OnSuccess(mega);
                };
                getUserRequest.Error += (s2, e) =>
                {
                    OnError(e.Error);
                    sidRequest.ResetEvent.Set();
                };
                initTransport.EnqueueRequest(getUserRequest);
                getUserRequest.ResetEvent.WaitOne();
            };
            sidRequest.Error += (s, a) => OnError(a.Error);

            initTransport.EnqueueRequest(sidRequest);
            return(sidRequest);
        }
Esempio n. 2
0
        private void ProcessError(MegaRequest req, int errno)
        {
            switch (errno)
            {
            case MegaApiError.EAGAIN:
                if (req.retries >= 30)
                {
                    req.HandleError(MegaApiError.EAPI);
                    ProcessNext();
                    break;
                }
                Debug.WriteLine("Received -3, retrying");
                ProcessAgain(req);
                break;

            case MegaApiError.EARGS:
                req.HandleError(MegaApiError.EAPI);
                ProcessNext();
                break;

            case MegaApiError.ESID:
                if (req.retries >= 3)
                {
                    req.HandleError(MegaApiError.EBROKEN);
                    ProcessNext();
                }
                else
                {
                    if (Auth == null)
                    {
                        req.HandleError(MegaApiError.EBROKEN);
                    }
                    else
                    {
                        var sidReq = new MRequestGetSid <MResponseGetSid>(Auth);
                        sidReq.Success += (s, a) =>
                        {
                            req.Sid = a.SessionId;
                            ProcessAgain(req);
                        };
                        sidReq.Error += (s, a) => req.HandleError(MegaApiError.EBROKEN);
                        ProcessRequest(sidReq);
                    }
                }
                break;

            default:
                req.HandleError(errno);
                ProcessNext();
                break;
            }
        }
Esempio n. 3
0
        private static IMegaRequest ThreadInit(MegaUser user, Action<Mega> OnSuccess, Action<int> OnError)
        {
            var initTransport = new Transport();
            var mega = new Mega(initTransport);

            // mandatory anonymous registration
            if (user == null || (user.Email == null && user.Id == null))
            {
                user = new MegaUser();
                var req = new MRequestCreateAnon<MResponseCreateAnon>(user);
                int? error = null;
                req.Success += (s, args) => user.Id = args.UserId;
                req.Error += (s, e) => error = e.Error;
                initTransport.EnqueueRequest(req);
                req.ResetEvent.WaitOne();
                if (error != null)
                {
                    OnError((int)error);
                    // just to have the ResetEvent for async compatibility
                    return new EmptyRequest();
                }
            }

            // set the credentials
            mega.User = user;

            // the login itself
            var sidRequest = new MRequestGetSid<MResponseGetSid>(mega.User);
            sidRequest.Success += (s, args) =>
            {
                mega.User.Sid = args.SessionId;
                mega.User.SetMasterKey(args.MasterKey.Value);

                var getUserRequest = new MRequestGetUser<MResponseGetUser>(mega.User);
                getUserRequest.Success += (s2, args2) =>
                {
                    mega.User.Status = args2.UserStatus;
                    mega.User.Email = args2.Email;
                    mega.User.Id = args2.UserId;
                    OnSuccess(mega);
                };
                getUserRequest.Error += (s2, e) =>
                {
                    OnError(e.Error);
                    sidRequest.ResetEvent.Set();
                };
                initTransport.EnqueueRequest(getUserRequest);
                getUserRequest.ResetEvent.WaitOne();
            };
            sidRequest.Error += (s, a) => OnError(a.Error);

            initTransport.EnqueueRequest(sidRequest);
            return sidRequest;
        }
Esempio n. 4
0
        private void ProcessError(MegaRequest req, int errno)
        {
            switch (errno)
            {
                case MegaApiError.EAGAIN:
                    if (req.retries >= 30)
                    {
                        req.HandleError(MegaApiError.EAPI);
                        ProcessNext();
                        break;
                    }
                    Debug.WriteLine("Received -3, retrying");
                    ProcessAgain(req);
                    break;

                case MegaApiError.EARGS:
                    req.HandleError(MegaApiError.EAPI);
                    ProcessNext();
                    break;

                case MegaApiError.ESID:
                    if (req.retries >= 3)
                    {
                        req.HandleError(MegaApiError.EBROKEN);
                        ProcessNext();
                    }
                    else
                    {
                        if (Auth == null) { req.HandleError(MegaApiError.EBROKEN); }
                        else
                        {
                            var sidReq = new MRequestGetSid<MResponseGetSid>(Auth);
                            sidReq.Success += (s, a) =>
                            {
                                req.Sid = a.SessionId;
                                ProcessAgain(req);
                            };
                            sidReq.Error += (s, a) => req.HandleError(MegaApiError.EBROKEN);
                            ProcessRequest(sidReq);
                        }
                    }
                    break;

                default:
                    req.HandleError(errno);
                    ProcessNext();
                    break;
            }
        }