Ejemplo n.º 1
0
        /******************** Reminder Management Method ********************/

        public async Task ReceiveReminderAsync(string reminderName, byte[] context, TimeSpan duelTIme, TimeSpan period)
        {
            // Unregister the Received Reminder
            await UnregisterReminderAsync(GetReminder( reminderName ));

            switch (reminderName)
            {
            case ReminderNames.AnalyseBeginReminder:
                try {
                    await onAnalyseBeginAsync();

                    // Set the Reminder for the method that implements the core logic of the Actor (mainAnalyseAsync)
                    await RegisterReminderAsync(ReminderNames.AnalyseReminder);
                } catch {
                    await RegisterReminderAsync(ReminderNames.AnalyseBeginReminder);
                }
                break;

            case ReminderNames.AnalyseReminder:
                try {
                    bool isDone = await mainAnalyseAsync();

                    if (isDone == true)
                    {
                        await RegisterReminderAsync(ReminderNames.AnalyseCompleteReminder);
                    }
                    else
                    {
                        await RegisterReminderAsync(ReminderNames.AnalyseReminder, null, TimeSpan.FromMilliseconds(textsRequestRetryTime), TimeSpan.FromMilliseconds(textsRequestRetryTime));
                    }
                } catch {
                    await RegisterReminderAsync(ReminderNames.AnalyseReminder);
                }
                break;

            case ReminderNames.AnalyseCompleteReminder:
                try {
                    await onAnalyseCompleteAsync();

                    // Notify the MasterActor that the job was done
                    IMasterActor theMasterActor = ActorProxy.Create <IMasterActor>(this.Id);
                    await theMasterActor.UpdateSearchRequestStatus(Status.Analysing_Done, TheSourceID);
                } catch {
                    await RegisterReminderAsync(ReminderNames.AnalyseCompleteReminder);
                }
                break;

            default:
                // This point should never be reached.
                throw new InvalidOperationException("Unknown Reminder: " + reminderName);
            }
        }
        public async Task <IHttpActionResult> PostSearchRequest(BaseSearchRequest baseSearchRequest)
        {
            if (!ModelState.IsValid)
            {
                return(BadRequest(ModelState));
            }
            BESearchRequest theSearchRequest;
            BESearchRequest newBESearchRequest = new BESearchRequest(baseSearchRequest);

            try {
                theSearchRequest = await dbHandlerService.StoreOrUpdateSearchRequest(newBESearchRequest);

                IMasterActor theMasterActor = ActorProxy.Create <IMasterActor>(new ActorId(theSearchRequest.ID));
                await theMasterActor.FulfillSearchRequestAsync(theSearchRequest);
            } catch {
                return(InternalServerError());
            }

            return(Ok());
        }