static void OnReceivedMelding(object sender, MottattMeldingArgs fileArgs)
        {
            //Se oversikt over meldingstyper på https://github.com/ks-no/fiks-io-meldingstype-katalog/tree/test/schema

            // Process the message

            if (fileArgs.Melding.MeldingType == "no.geointegrasjon.plan.oppdatering.oppretteplanidentinput.v1")
            {
                Console.WriteLine("Melding " + fileArgs.Melding.MeldingId + " " + fileArgs.Melding.MeldingType + " mottas...");

                //TODO håndtere meldingen med ønsket funksjonalitet

                string payload = File.ReadAllText("sampleNyPlanident.json");

                var svarmsg = fileArgs.SvarSender.Svar("no.geointegrasjon.plan.oppdatering.planidentopprettet.v1", payload, "NyPlanident.json").Result;
                Console.WriteLine("Svarmelding " + svarmsg.MeldingId + " " + svarmsg.MeldingType + " sendt...");
                Console.WriteLine(payload);

                fileArgs.SvarSender.Ack(); // Ack message to remove it from the queue
            }
            else if (fileArgs.Melding.MeldingType == "no.geointegrasjon.plan.oppdatering.planleggingigangsatt.v1")
            {
                Console.WriteLine("Melding " + fileArgs.Melding.MeldingId + " " + fileArgs.Melding.MeldingType + " mottas...");

                //TODO håndtere meldingen med ønsket funksjonalitet

                var svarmsg = fileArgs.SvarSender.Svar("no.ks.geointegrasjon.ok.v1").Result;
                Console.WriteLine("Svarmelding " + svarmsg.MeldingId + " " + svarmsg.MeldingType + " sendt...");


                fileArgs.SvarSender.Ack(); // Ack message to remove it from the queue
            }
            else if (fileArgs.Melding.MeldingType == "no.geointegrasjon.plan.oppdatering.planvedtak.v1")
            {
                Console.WriteLine("Melding " + fileArgs.Melding.MeldingId + " " + fileArgs.Melding.MeldingType + " mottas...");

                //TODO håndtere meldingen med ønsket funksjonalitet

                var svarmsg = fileArgs.SvarSender.Svar("no.ks.geointegrasjon.ok.v1").Result;
                Console.WriteLine("Svarmelding " + svarmsg.MeldingId + " " + svarmsg.MeldingType + " sendt...");


                fileArgs.SvarSender.Ack(); // Ack message to remove it from the queue
            }
            else if (fileArgs.Melding.MeldingType == "no.ks.geointegrasjon.ok.v1")
            {
                Console.WriteLine("Melding " + fileArgs.Melding.MeldingId + " " + fileArgs.Melding.MeldingType + " mottas...");

                //TODO håndtere meldingen med ønsket funksjonalitet

                Console.WriteLine("Melding er håndtert i ePlansak ok ......");

                fileArgs.SvarSender.Ack(); // Ack message to remove it from the queue
            }
            else
            {
                Console.WriteLine("Ubehandlet melding i køen " + fileArgs.Melding.MeldingId + " " + fileArgs.Melding.MeldingType);
                //fileArgs.SvarSender.Ack(); // Ack message to remove it from the queue
            }
        }
示例#2
0
        private static List <List <string> > ValidatePayload(MottattMeldingArgs mottatt, string meldingsType)
        {
            var errorMessages = new List <List <string> >()
            {
                new(), new()
            };
            IAsicReader reader = new AsiceReader();

            using (var inputStream = mottatt.Melding.DecryptedStream.Result)
                using (var asice = reader.Read(inputStream))
                {
                    foreach (var asiceReadEntry in asice.Entries)
                    {
                        using (var entryStream = asiceReadEntry.OpenStream())
                        {
                            if (asiceReadEntry.FileName.Contains(".json"))
                            {
                                errorMessages = ValidateJsonFile(new StreamReader(entryStream).ReadToEnd(),
                                                                 Path.Combine("Schema", $"{meldingsType}.schema.json"));
                            }
                            else
                            {
                                Log.Information($"Mottatt vedlegg: {asiceReadEntry.FileName}");
                            }
                        }
                    }
                }

            return(errorMessages);
        }
        static void OnReceivedMelding(object sender, MottattMeldingArgs fileArgs)
        {
            //Se oversikt over meldingstyper på https://github.com/ks-no/fiks-io-meldingstype-katalog/tree/test/schema

            // Process the message

            if (fileArgs.Melding.MeldingType == "no.geointegrasjon.plan.oppdatering.planidentopprettet.v1")
            {
                Console.WriteLine("Melding " + fileArgs.Melding.MeldingId + " " + fileArgs.Melding.MeldingType + " mottas...");

                //TODO håndtere meldingen med ønsket funksjonalitet

                Console.WriteLine("ePlansak oppdaterer sak med tiltdelt arealplanident......");

                fileArgs.SvarSender.Ack(); // Ack message to remove it from the queue
            }
            else if (fileArgs.Melding.MeldingType == "no.ks.geointegrasjon.ok.v1")
            {
                Console.WriteLine("Melding " + fileArgs.Melding.MeldingId + " " + fileArgs.Melding.MeldingType + " mottas...");

                //TODO håndtere meldingen med ønsket funksjonalitet

                Console.WriteLine("Melding er håndtert i planregister ok ......");

                fileArgs.SvarSender.Ack(); // Ack message to remove it from the queue
            }
            else
            {
                Console.WriteLine("Ubehandlet melding i køen " + fileArgs.Melding.MeldingId + " " + fileArgs.Melding.MeldingType);
            }
        }
示例#4
0
        private static void HandleSendUtvalgssak(MottattMeldingArgs mottatt)
        {
            if (mottatt.Melding.HasPayload)
            {
                var errorMessages = ValidatePayload(mottatt, PolitiskBehandlingMeldingTypeV1.SendUtvalgssak);

                if (errorMessages[0].Count == 0)
                {
                    var svarmsg = mottatt.SvarSender.Svar(PolitiskBehandlingMeldingTypeV1.SendUtvalgssakKvittering).Result;
                    Log.Information("Svarmelding på {MeldingID} med svar {MeldingID} type {MeldingType} sendt", mottatt.Melding.MeldingId, svarmsg.MeldingId, svarmsg.MeldingType);
                    mottatt.SvarSender.Ack(); // Ack message to remove it from the queue
                }
                else
                {
                    Log.Error("Feil i validering av sendutvalgsak");
                    mottatt.SvarSender.Svar(FeilmeldingMeldingTypeV1.Ugyldigforespørsel, string.Join("\n ", errorMessages[0]),
                                            "feil.txt");
                    Log.Error("Feilmelding: " + string.Join("\n ", errorMessages[0]));
                    mottatt.SvarSender.Ack(); // Ack message to remove it from the queue
                }
            }
            else
            {
                var svarmsg = mottatt.SvarSender
                              .Svar(FeilmeldingMeldingTypeV1.Ugyldigforespørsel, "Meldingen mangler innhold", "feil.txt").Result;
                Log.Error("Svarmelding på mottatt melding {MeldingID} med svar {MeldingID} type {MeldingType}, mottatt melding mangler innhold", mottatt.Melding.MeldingId, svarmsg.MeldingId, svarmsg.MeldingType);
                mottatt.SvarSender.Ack(); // Ack message to remove it from the queue
            }
        }
示例#5
0
        private static void HandleRequestWithoutReturnPayload(MottattMeldingArgs mottatt, string jsonSchemaName, string returnMeldingstype)
        {
            Console.WriteLine("Melding " + mottatt.Melding.MeldingId + " " + mottatt.Melding.MeldingType + " mottas...");

            if (mottatt.Melding.HasPayload)
            { // Verify that message has payload
                List <List <string> > errorMessages = new List <List <string> >()
                {
                    new List <string>(), new List <string>()
                };
                IAsicReader reader = new AsiceReader();
                using (var inputStream = mottatt.Melding.DecryptedStream.Result)
                    using (var asice = reader.Read(inputStream))
                    {
                        foreach (var asiceReadEntry in asice.Entries)
                        {
                            using (var entryStream = asiceReadEntry.OpenStream())
                            {
                                if (asiceReadEntry.FileName.Contains("payload.json"))
                                {
                                    errorMessages = ValidateJsonFile(new StreamReader(entryStream).ReadToEnd(), Path.Combine("Schema", jsonSchemaName + ".schema.json"));
                                }
                                else
                                {
                                    Console.WriteLine("Mottatt vedlegg: " + asiceReadEntry.FileName);
                                }
                            }
                        }
                    }

                if (errorMessages[0].Count == 0)
                {
                    var svarmsg = mottatt.SvarSender.Svar(returnMeldingstype).Result;
                    Console.WriteLine("Svarmelding " + svarmsg.MeldingId + " " + svarmsg.MeldingType + " sendt...");
                    mottatt.SvarSender.Ack(); // Ack message to remove it from the queue
                }
                else
                {
                    Console.WriteLine("Feil i validering med jsonschema: ", jsonSchemaName);
                    mottatt.SvarSender.Svar(FeilmeldingType.Ugyldigforespørsel, String.Join("\n ", errorMessages[0]), "feil.txt");
                    Console.WriteLine(String.Join("\n ", errorMessages[0]));
                    mottatt.SvarSender.Ack(); // Ack message to remove it from the queue
                }
            }
            else
            {
                var svarmsg = mottatt.SvarSender.Svar(FeilmeldingType.Ugyldigforespørsel, "Meldingen mangler innhold", "feil.txt").Result;
                Console.WriteLine("Svarmelding " + svarmsg.MeldingId + " " + svarmsg.MeldingType + " Meldingen mangler innhold");

                mottatt.SvarSender.Ack(); // Ack message to remove it from the queue
            }
        }
示例#6
0
        private static void HandleHentMoeteplan(MottattMeldingArgs mottatt)
        {
            if (mottatt.Melding.HasPayload)
            {
                var errorMessages = ValidatePayload(mottatt, PolitiskBehandlingMeldingTypeV1.HentMoeteplan);

                if (errorMessages[0].Count == 0)
                {
                    var payload = File.ReadAllText("sampleResultat.json");

                    errorMessages = ValidateJsonFile(payload,
                                                     Path.Combine("Schema", PolitiskBehandlingMeldingTypeV1.ResultatMoeteplan + ".schema.json"));

                    if (errorMessages[0].Count == 0)
                    {
                        var svarmsg = mottatt.SvarSender
                                      .Svar(PolitiskBehandlingMeldingTypeV1.ResultatMoeteplan, payload, "resultat.json").Result;
                        Log.Information(
                            "Svarmelding på {MeldingID} med svar {MeldingID} type {MeldingType} sendt", mottatt.Melding.MeldingId, svarmsg.MeldingId, svarmsg.MeldingType);
                        Log.Information(payload);
                        mottatt.SvarSender.Ack(); // Ack message to remove it from the queue
                    }
                    else
                    {
                        Log.Error("Feil i validering av resultatmøteplan");
                        mottatt.SvarSender.Svar(FeilmeldingMeldingTypeV1.Ugyldigforespørsel,
                                                string.Join("\n ", errorMessages[0]), "feil.txt");
                        Log.Error("Feilmelding: " + string.Join("\n ", errorMessages[0]));
                        mottatt.SvarSender.Ack(); // Ack message to remove it from the queue
                    }
                }
                else
                {
                    Log.Error("Feil i validering av hentmøteplan");
                    mottatt.SvarSender.Svar(FeilmeldingMeldingTypeV1.Ugyldigforespørsel, string.Join("\n ", errorMessages[0]),
                                            "feil.txt");
                    Log.Error("Feilmelding: " + string.Join("\n ", errorMessages[0]));
                    mottatt.SvarSender.Ack(); // Ack message to remove it from the queue
                }
            }
            else
            {
                var svarmsg = mottatt.SvarSender
                              .Svar(FeilmeldingMeldingTypeV1.Ugyldigforespørsel, "Meldingen mangler innhold", "feil.txt").Result;
                Log.Error("Svarmelding på {MeldingID} med svar {MeldingID} type {MeldingType}, meldingen mangler innhold", mottatt.Melding.MeldingId, svarmsg.MeldingId, svarmsg.MeldingType);

                mottatt.SvarSender.Ack(); // Ack message to remove it from the queue
            }
        }
示例#7
0
        private static void OnReceivedMelding(object sender, MottattMeldingArgs mottatt)
        {
            Log.Information("Melding med meldingid {MeldingID} og type {MeldingType} håndteres", mottatt.Melding.MeldingId, mottatt.Melding.MeldingType);
            switch (mottatt.Melding.MeldingType)
            {
            // Process the message
            case PolitiskBehandlingMeldingTypeV1.HentUtvalg:
                HandleHentUtvalg(mottatt);
                break;

            case PolitiskBehandlingMeldingTypeV1.HentMoeteplan:
                HandleHentMoeteplan(mottatt);
                break;

            case PolitiskBehandlingMeldingTypeV1.SendUtvalgssak:
                HandleSendUtvalgssak(mottatt);
                break;

            case PolitiskBehandlingMeldingTypeV1.SendOrienteringssak:
                HandleSendOrienteringssak(mottatt);
                break;

            case PolitiskBehandlingMeldingTypeV1.SendDelegertVedtak:
                //TODO håndtere meldingen med ønsket funksjonalitet
                var svarmsg = mottatt.SvarSender.Svar(PolitiskBehandlingMeldingTypeV1.SendDelegertVedtakKvittering).Result;
                Log.Information("Svarmelding på {MeldingID} med svar {MeldingID} type {MeldingType} sendt", mottatt.Melding.MeldingId, svarmsg.MeldingId, svarmsg.MeldingType);
                mottatt.SvarSender.Ack();     // Ack message to remove it from the queue
                break;

            case PolitiskBehandlingMeldingTypeV1.SendVedtakFraUtvalgKvittering:
                //TODO håndtere meldingen med ønsket funksjonalitet
                Log.Information("Melding SendVedtakFraUtvalgKvittering er håndtert i ePlansak ok");
                mottatt.SvarSender.Ack();     // Ack message to remove it from the queue
                break;

            default:
                Log.Error("OBS! Ubehandlet melding i køen {MeldingID} type {MeldingType}", mottatt.Melding.MeldingId, mottatt.Melding.MeldingType);
                //We dont ACK the message. Let it go to timeout in Fiks-IO
                break;
            }
        }
示例#8
0
        private static void HandleHentUtvalg(MottattMeldingArgs mottatt)
        {
            var payload = File.ReadAllText("sampleResultatUtvalg.json");

            var errorMessages = ValidateJsonFile(payload,
                                                 Path.Combine("Schema", PolitiskBehandlingMeldingTypeV1.ResultatUtvalg + ".schema.json"));

            if (errorMessages[0].Count == 0)
            {
                var svarmsg = mottatt.SvarSender.Svar(PolitiskBehandlingMeldingTypeV1.ResultatUtvalg, payload, "resultat.json")
                              .Result;
                Log.Information("Svarmelding på {MeldingID} med svar {MeldingID} type {MeldingType} sendt", mottatt.Melding.MeldingId, svarmsg.MeldingId, svarmsg.MeldingType);
                Log.Debug(payload);
                mottatt.SvarSender.Ack(); // Ack message to remove it from the queue
            }
            else
            {
                Log.Error("Feil i validering av utvalg");
                mottatt.SvarSender.Svar(FeilmeldingMeldingTypeV1.Ugyldigforespørsel, string.Join("\n ", errorMessages[0]),
                                        "feil.txt");
                Log.Error("Feilmeldinger:" + string.Join("\n ", errorMessages[0]));
                mottatt.SvarSender.Ack(); // Ack message to remove it from the queue
            }
        }
示例#9
0
        static void OnReceivedMelding(object sender, MottattMeldingArgs mottatt)
        {
            // Process the message
            if (mottatt.Melding.MeldingType == FiksPlanMeldingtypeV2.FinnPlanerForMatrikkelenhet)
            {
                string payload               = File.ReadAllText("sampleResultatPlanerForMatrikkelenhet.json");
                string jsonSchemaName        = FiksPlanMeldingtypeV2.FinnPlanerForMatrikkelenhet;
                string payloadJsonSchemaName = FiksPlanMeldingtypeV2.ResultatFinnPlanerForMatrikkelenhet;
                string returnMeldingstype    = FiksPlanMeldingtypeV2.ResultatFinnPlanerForMatrikkelenhet;

                HandleRequestWithReturnPayload(mottatt, jsonSchemaName, payload, payloadJsonSchemaName, returnMeldingstype);
            }

            else if (mottatt.Melding.MeldingType == FiksPlanMeldingtypeV2.FinnPlaner)
            {
                string payload               = File.ReadAllText("sampleResultatPlaner.json");
                string jsonSchemaName        = FiksPlanMeldingtypeV2.FinnPlaner;
                string payloadJsonSchemaName = FiksPlanMeldingtypeV2.ResultatFinnPlaner;
                string returnMeldingstype    = FiksPlanMeldingtypeV2.ResultatFinnPlaner;

                HandleRequestWithReturnPayload(mottatt, jsonSchemaName, payload, payloadJsonSchemaName, returnMeldingstype);
            }
            else if (mottatt.Melding.MeldingType == FiksPlanMeldingtypeV2.FinnDispensasjoner)
            {
                string payload               = File.ReadAllText("sampleResultatDispensasjoner.json");
                string jsonSchemaName        = FiksPlanMeldingtypeV2.FinnDispensasjoner;
                string payloadJsonSchemaName = FiksPlanMeldingtypeV2.ResultatFinnDispensasjoner;
                string returnMeldingstype    = FiksPlanMeldingtypeV2.ResultatFinnDispensasjoner;

                HandleRequestWithReturnPayload(mottatt, jsonSchemaName, payload, payloadJsonSchemaName, returnMeldingstype);
            }
            else if (mottatt.Melding.MeldingType == FiksPlanMeldingtypeV2.FinnPlanbehandlinger)
            {
                string payload               = File.ReadAllText("sampleResultatPlanbehandling.json");
                string jsonSchemaName        = FiksPlanMeldingtypeV2.FinnPlanbehandlinger;
                string payloadJsonSchemaName = FiksPlanMeldingtypeV2.ResultatFinnPlanbehandlinger;
                string returnMeldingstype    = FiksPlanMeldingtypeV2.ResultatFinnPlanbehandlinger;

                HandleRequestWithReturnPayload(mottatt, jsonSchemaName, payload, payloadJsonSchemaName, returnMeldingstype);
            }
            else if (mottatt.Melding.MeldingType == FiksPlanMeldingtypeV2.HentArealplan)
            {
                string payload               = File.ReadAllText("sampleResultatArealplan.json");
                string jsonSchemaName        = FiksPlanMeldingtypeV2.HentArealplan;
                string payloadJsonSchemaName = FiksPlanMeldingtypeV2.ResultatHentArealplan;
                string returnMeldingstype    = FiksPlanMeldingtypeV2.ResultatHentArealplan;

                HandleRequestWithReturnPayload(mottatt, jsonSchemaName, payload, payloadJsonSchemaName, returnMeldingstype);
            }
            else if (mottatt.Melding.MeldingType == FiksPlanMeldingtypeV2.SjekkMidlertidigForbud)
            {
                string payload               = File.ReadAllText("sampleResultatMidlertidigForbud.json");
                string jsonSchemaName        = FiksPlanMeldingtypeV2.SjekkMidlertidigForbud;
                string payloadJsonSchemaName = FiksPlanMeldingtypeV2.ResultatSjekkMidlertidigForbud;
                string returnMeldingstype    = FiksPlanMeldingtypeV2.ResultatSjekkMidlertidigForbud;

                HandleRequestWithReturnPayload(mottatt, jsonSchemaName, payload, payloadJsonSchemaName, returnMeldingstype);
            }
            else if (mottatt.Melding.MeldingType == FiksPlanMeldingtypeV2.OpprettArealplan)
            {
                string payload               = File.ReadAllText("sampleNyPlanident.json");
                string jsonSchemaName        = FiksPlanMeldingtypeV2.OpprettArealplan;
                string payloadJsonSchemaName = FiksPlanMeldingtypeV2.ResultatOpprettArealplan;
                string returnMeldingstype    = FiksPlanMeldingtypeV2.ResultatOpprettArealplan;

                HandleRequestWithReturnPayload(mottatt, jsonSchemaName, payload, payloadJsonSchemaName, returnMeldingstype);
            }
            else if (mottatt.Melding.MeldingType == FiksPlanMeldingtypeV2.RegistrerPlanbehandling)
            {
                string jsonSchemaName     = FiksPlanMeldingtypeV2.RegistrerPlanbehandling;
                string returnMeldingstype = FiksPlanMeldingtypeV2.ResultatMottat;

                HandleRequestWithoutReturnPayload(mottatt, jsonSchemaName, returnMeldingstype);
            }
            else if (mottatt.Melding.MeldingType == FiksPlanMeldingtypeV2.RegistrertPlanavgrensning)
            {
                string jsonSchemaName     = FiksPlanMeldingtypeV2.RegistrertPlanavgrensning;
                string returnMeldingstype = FiksPlanMeldingtypeV2.ResultatMottat;

                HandleRequestWithoutReturnPayload(mottatt, jsonSchemaName, returnMeldingstype);
            }

            else if (mottatt.Melding.MeldingType == FiksPlanMeldingtypeV2.RegistrerDispensasjonFraPlan)
            {
                string jsonSchemaName     = FiksPlanMeldingtypeV2.RegistrerDispensasjonFraPlan;
                string returnMeldingstype = FiksPlanMeldingtypeV2.ResultatMottat;

                HandleRequestWithoutReturnPayload(mottatt, jsonSchemaName, returnMeldingstype);
            }
            else if (mottatt.Melding.MeldingType == FiksPlanMeldingtypeV2.OppdaterArealplan)
            {
                string jsonSchemaName     = FiksPlanMeldingtypeV2.OppdaterArealplan;
                string returnMeldingstype = FiksPlanMeldingtypeV2.ResultatMottat;

                HandleRequestWithoutReturnPayload(mottatt, jsonSchemaName, returnMeldingstype);
            }
            else if (mottatt.Melding.MeldingType == FiksPlanMeldingtypeV2.FinnPlandokumenter)
            {
                string payload               = File.ReadAllText("samplePlandokumenter.json");
                string jsonSchemaName        = FiksPlanMeldingtypeV2.FinnPlandokumenter;
                string payloadJsonSchemaName = FiksPlanMeldingtypeV2.ResultatFinnPlandokumenter;
                string returnMeldingstype    = FiksPlanMeldingtypeV2.ResultatFinnPlandokumenter;
                string attachment            = "Oversiktskart.pdf";

                HandleRequestWithReturnPayload(mottatt, jsonSchemaName, payload, payloadJsonSchemaName, returnMeldingstype, attachment);
            }
            else if (mottatt.Melding.MeldingType == FiksPlanMeldingtypeV2.FinnPlanerForOmraade)
            {
                string payload               = File.ReadAllText("sampleResultatPlaner.json");
                string jsonSchemaName        = FiksPlanMeldingtypeV2.FinnPlanerForOmraade;
                string payloadJsonSchemaName = FiksPlanMeldingtypeV2.ResultatFinnPlanerForOmraade;
                string returnMeldingstype    = FiksPlanMeldingtypeV2.ResultatFinnPlanerForOmraade;

                HandleRequestWithReturnPayload(mottatt, jsonSchemaName, payload, payloadJsonSchemaName, returnMeldingstype);
            }
            else if (mottatt.Melding.MeldingType == FiksPlanMeldingtypeV2.HentAktoerer)
            {
                string payload               = File.ReadAllText("sampleAktører.json");
                string jsonSchemaName        = FiksPlanMeldingtypeV2.HentAktoerer;
                string payloadJsonSchemaName = FiksPlanMeldingtypeV2.ResultatHentAktoerer;
                string returnMeldingstype    = FiksPlanMeldingtypeV2.ResultatHentAktoerer;

                HandleRequestWithReturnPayload(mottatt, jsonSchemaName, payload, payloadJsonSchemaName, returnMeldingstype);
            }
            else if (mottatt.Melding.MeldingType == FiksPlanMeldingtypeV2.HentBboxForPlan)
            {
                string payload               = File.ReadAllText("sampleBbox.json");
                string jsonSchemaName        = FiksPlanMeldingtypeV2.HentBboxForPlan;
                string payloadJsonSchemaName = FiksPlanMeldingtypeV2.ResultatHentBboxForPlan;
                string returnMeldingstype    = FiksPlanMeldingtypeV2.ResultatHentBboxForPlan;

                HandleRequestWithReturnPayload(mottatt, jsonSchemaName, payload, payloadJsonSchemaName, returnMeldingstype);
            }
            else if (mottatt.Melding.MeldingType == FiksPlanMeldingtypeV2.HentGjeldendePlanbestemmelser)
            {
                string payload               = File.ReadAllText("samplePlanbestemmelser.json");
                string jsonSchemaName        = FiksPlanMeldingtypeV2.HentGjeldendePlanbestemmelser;
                string payloadJsonSchemaName = FiksPlanMeldingtypeV2.ResultatHentGjeldendePlanbestemmelser;
                string returnMeldingstype    = FiksPlanMeldingtypeV2.ResultatHentGjeldendePlanbestemmelser;

                HandleRequestWithReturnPayload(mottatt, jsonSchemaName, payload, payloadJsonSchemaName, returnMeldingstype);
            }
            else if (mottatt.Melding.MeldingType == FiksPlanMeldingtypeV2.HentKodeliste)
            {
                string payload               = File.ReadAllText("sampleKodeliste.json");
                string jsonSchemaName        = FiksPlanMeldingtypeV2.HentKodeliste;
                string payloadJsonSchemaName = FiksPlanMeldingtypeV2.ResultatHentKodeliste;
                string returnMeldingstype    = FiksPlanMeldingtypeV2.ResultatHentKodeliste;

                HandleRequestWithReturnPayload(mottatt, jsonSchemaName, payload, payloadJsonSchemaName, returnMeldingstype);
            }
            else if (mottatt.Melding.MeldingType == FiksPlanMeldingtypeV2.HentPlanomraader)
            {
                string payload               = File.ReadAllText("samplePlanområde.json");
                string jsonSchemaName        = FiksPlanMeldingtypeV2.HentPlanomraader;
                string payloadJsonSchemaName = FiksPlanMeldingtypeV2.ResultatHentPlanomraader;
                string returnMeldingstype    = FiksPlanMeldingtypeV2.ResultatHentPlanomraader;

                HandleRequestWithReturnPayload(mottatt, jsonSchemaName, payload, payloadJsonSchemaName, returnMeldingstype);
            }
            else if (mottatt.Melding.MeldingType == FiksPlanMeldingtypeV2.HentRelatertePlaner)
            {
                string payload               = File.ReadAllText("sampleRelatertPlan.json");
                string jsonSchemaName        = FiksPlanMeldingtypeV2.HentRelatertePlaner;
                string payloadJsonSchemaName = FiksPlanMeldingtypeV2.ResultatHentRelatertePlaner;
                string returnMeldingstype    = FiksPlanMeldingtypeV2.ResultatHentRelatertePlaner;

                HandleRequestWithReturnPayload(mottatt, jsonSchemaName, payload, payloadJsonSchemaName, returnMeldingstype);
            }
            else if (mottatt.Melding.MeldingType == FiksPlanMeldingtypeV2.OppdaterDispensasjon)
            {
                string jsonSchemaName     = FiksPlanMeldingtypeV2.OppdaterDispensasjon;
                string returnMeldingstype = FiksPlanMeldingtypeV2.ResultatMottat;

                HandleRequestWithoutReturnPayload(mottatt, jsonSchemaName, returnMeldingstype);
            }

            else if (mottatt.Melding.MeldingType == FiksPlanMeldingtypeV2.HentPlanfil)
            {
                string payload               = File.ReadAllText("samplePlanfil.json");
                string jsonSchemaName        = FiksPlanMeldingtypeV2.HentPlanfil;
                string payloadJsonSchemaName = FiksPlanMeldingtypeV2.ResultatHentPlanfil;
                string returnMeldingstype    = FiksPlanMeldingtypeV2.ResultatHentPlanfil;

                HandleRequestWithReturnPayload(mottatt, jsonSchemaName, payload, payloadJsonSchemaName, returnMeldingstype);
            }

            //else if (mottatt.Melding.MeldingType == "no.ks.fiks.gi.plan.oppdatering.planleggingigangsatt.v2")
            //{
            //    Console.WriteLine("Melding " + mottatt.Melding.MeldingId + " " + mottatt.Melding.MeldingType + " mottas...");
            //    string jsonSchemaName = "no.ks.fiks.gi.plan.oppdatering.planleggingigangsatt.v2.schema.json";
            //    string returnMeldingstype = "no.ks.fiks.gi.plan.oppdatering.mottatt.v2";

            //    HandleRequestWithoutReturnPayload(mottatt, jsonSchemaName, returnMeldingstype);
            //}

            //else if (mottatt.Melding.MeldingType == "no.ks.fiks.gi.plan.oppdatering.planvedtakikraftsatt.v2")
            //{
            //    Console.WriteLine("Melding " + mottatt.Melding.MeldingId + " " + mottatt.Melding.MeldingType + " mottas...");
            //    string jsonSchemaName = "no.ks.fiks.gi.plan.oppdatering.planvedtakikraftsatt.v2.schema.json";
            //    string returnMeldingstype = "no.ks.fiks.gi.plan.oppdatering.mottatt.v2";

            //    HandleRequestWithoutReturnPayload(mottatt, jsonSchemaName, returnMeldingstype);
            //}
            else if (mottatt.Melding.MeldingType == FiksPlanMeldingtypeV2.RegistrerMidlertidigForbudMotTiltak)
            {
                Console.WriteLine("Melding " + mottatt.Melding.MeldingId + " " + mottatt.Melding.MeldingType + " mottas...");
                string jsonSchemaName     = FiksPlanMeldingtypeV2.RegistrerMidlertidigForbudMotTiltak;
                string returnMeldingstype = FiksPlanMeldingtypeV2.ResultatMottat;

                HandleRequestWithoutReturnPayload(mottatt, jsonSchemaName, returnMeldingstype);
            }
        }
示例#10
0
        private void OnReceivedMelding(object sender, MottattMeldingArgs mottatt)
        {
            //Se oversikt over meldingstyper på https://github.com/ks-no/fiks-io-meldingstype-katalog/tree/test/schema

            // Process the message
            var arkivmeldingXmlSchemaSet = new XmlSchemaSet();

            arkivmeldingXmlSchemaSet.Add("http://www.arkivverket.no/standarder/noark5/arkivmelding/v2", Path.Combine("Schema", "arkivmelding.xsd"));
            arkivmeldingXmlSchemaSet.Add("http://www.arkivverket.no/standarder/noark5/metadatakatalog/v2", Path.Combine("Schema", "metadatakatalog.xsd"));

            var sokXmlSchemaSet = new XmlSchemaSet();

            sokXmlSchemaSet.Add("http://www.arkivverket.no/standarder/noark5/sok", Path.Combine("Schema", "sok.xsd"));

            var xmlValidationErrorOccured = false;

            if (ArkivintegrasjonMeldingTypeV1.IsBasis(mottatt.Melding.MeldingType))
            {
                var validationResult         = new List <List <string> >();
                var deserializedArkivmelding = new arkivmelding();
                Console.WriteLine($"Melding {mottatt.Melding.MeldingId} {mottatt.Melding.MeldingType} mottas...");

                //TODO håndtere meldingen med ønsket funksjonalitet
                if (mottatt.Melding.HasPayload)
                { // Verify that message has payload
                    IAsicReader reader = new AsiceReader();
                    using (var inputStream = mottatt.Melding.DecryptedStream.Result)
                        using (var asice = reader.Read(inputStream))
                        {
                            foreach (var asiceReadEntry in asice.Entries)
                            {
                                using (var entryStream = asiceReadEntry.OpenStream())
                                {
                                    if (asiceReadEntry.FileName.Contains(".xml")) //TODO regel på navning? alltid arkivmelding.xml?
                                    {
                                        //TODO validere arkivmelding og evt sende feil om den ikke er ok for arkivering
                                        validationResult = new XmlValidation().ValidateXml(
                                            entryStream,
                                            arkivmeldingXmlSchemaSet
                                            );
                                        if (validationResult[0].Count > 0)
                                        {
                                            xmlValidationErrorOccured = true;
                                        }
                                        var          newEntryStream = asiceReadEntry.OpenStream();
                                        StreamReader reader1        = new StreamReader(newEntryStream);
                                        string       text           = reader1.ReadToEnd();
                                        deserializedArkivmelding = ArkivmeldingSerializeHelper.DeSerialize(text);
                                        Console.WriteLine(text);
                                    }
                                    else
                                    {
                                        Console.WriteLine($"Mottatt vedlegg: {asiceReadEntry.FileName}");
                                    }
                                }
                            }
                            // Check that all digests declared in the manifest are valid
                            if (asice.DigestVerifier.Verification().AllValid)
                            {
                                // Do something
                            }
                            else
                            {
                                // Handle error
                            }
                        }
                    if (xmlValidationErrorOccured) // Ugyldig forespørsel
                    {
                        var ugyldigforespørsel = new Ugyldigforespørsel
                        {
                            ErrorId       = Guid.NewGuid().ToString(),
                            Feilmelding   = "Feilmelding:\n" + string.Join("\n ", validationResult[0]),
                            CorrelationId = Guid.NewGuid().ToString()
                        };
                        mottatt.SvarSender.Ack(); // Ack message to remove it from the queue
                        var errorMessage = mottatt.SvarSender.Svar(FeilmeldingMeldingTypeV1.Ugyldigforespørsel, JsonConvert.SerializeObject(ugyldigforespørsel), "ugyldigforespørsel.json").Result;
                        Console.WriteLine($"Svarmelding {errorMessage.MeldingId} {errorMessage.MeldingType} sendt");
                    }
                    else
                    {
                        mottatt.SvarSender.Ack(); // Ack message to remove it from the queue
                        var svarmsg = mottatt.SvarSender.Svar(ArkivintegrasjonMeldingTypeV1.Mottatt).Result;
                        Console.WriteLine($"Svarmelding {svarmsg.MeldingId} {svarmsg.MeldingType} sendt...");
                        Console.WriteLine("Melding er mottatt i arkiv ok ......");
                    }
                }
                else   // Ugyldig forespørsel
                {
                    var ugyldigforespørsel = new Ugyldigforespørsel
                    {
                        ErrorId       = Guid.NewGuid().ToString(),
                        Feilmelding   = "Meldingen mangler innhold",
                        CorrelationId = Guid.NewGuid().ToString()
                    };

                    mottatt.SvarSender.Ack(); // Ack message to remove it from the queue
                    var svarmsg = mottatt.SvarSender.Svar(FeilmeldingMeldingTypeV1.Ugyldigforespørsel, JsonConvert.SerializeObject(ugyldigforespørsel), "ugyldigforespørsel.json").Result;
                    Console.WriteLine($"Svarmelding {svarmsg.MeldingId} {svarmsg.MeldingType} sendt");
                }

                if (!xmlValidationErrorOccured)
                {
                    var kvittering = new arkivmelding();
                    kvittering.tidspunkt = DateTime.Now;
                    var type = deserializedArkivmelding?.Items?[0]?.GetType();

                    if (type == typeof(saksmappe))
                    {
                        var mp = new saksmappe();
                        mp.systemID          = new systemID();
                        mp.systemID.Value    = Guid.NewGuid().ToString();
                        mp.saksaar           = DateTime.Now.Year.ToString();
                        mp.sakssekvensnummer = new Random().Next().ToString();

                        kvittering.Items = new List <saksmappe>()
                        {
                            mp
                        }.ToArray();
                    }
                    else if (type == typeof(journalpost))
                    {
                        var jp = new journalpost();

                        jp.systemID             = new systemID();
                        jp.systemID.Value       = Guid.NewGuid().ToString();
                        jp.journalaar           = DateTime.Now.Year.ToString();
                        jp.journalsekvensnummer = new Random().Next().ToString();
                        jp.journalpostnummer    = new Random().Next(1, 100).ToString();

                        kvittering.Items = new List <journalpost>()
                        {
                            jp
                        }.ToArray();
                    }
                    //TODO simulerer at arkivet arkiverer og nøkler skal returneres

                    string payload = ArkivmeldingSerializeHelper.Serialize(kvittering);

                    var svarmsg2 = mottatt.SvarSender.Svar(ArkivintegrasjonMeldingTypeV1.Kvittering, payload, "arkivmelding.xml").Result;
                    Console.WriteLine("$Svarmelding {svarmsg2.MeldingId} {svarmsg2.MeldingType} sendt...");
                    Console.WriteLine("Arkivering er ok ......");
                }
            }
            else if (ArkivintegrasjonMeldingTypeV1.IsSok(mottatt.Melding.MeldingType))
            {
                var validationResult = new List <List <string> >();
                Console.WriteLine("Melding " + mottatt.Melding.MeldingId + " " + mottatt.Melding.MeldingType + " mottas...");

                //TODO håndtere meldingen med ønsket funksjonalitet

                if (mottatt.Melding.HasPayload)
                { // Verify that message has payload
                    IAsicReader reader = new AsiceReader();
                    using (var inputStream = mottatt.Melding.DecryptedStream.Result)
                        using (var asice = reader.Read(inputStream))
                        {
                            foreach (var asiceReadEntry in asice.Entries)
                            {
                                using (var entryStream = asiceReadEntry.OpenStream())
                                {
                                    if (asiceReadEntry.FileName.Contains(".xml")) //TODO regel på navning? alltid arkivmelding.xml?
                                    {
                                        validationResult = new XmlValidation().ValidateXml(
                                            entryStream,
                                            sokXmlSchemaSet
                                            );
                                        if (validationResult[0].Count > 0)
                                        {
                                            xmlValidationErrorOccured = true;
                                        }
                                        var reader1 = new StreamReader(entryStream);
                                        var text    = reader1.ReadToEnd();
                                        Console.WriteLine("Søker etter: " + text);
                                    }
                                    else
                                    {
                                        Console.WriteLine("Mottatt vedlegg: " + asiceReadEntry.FileName);
                                    }
                                }
                            }
                        }
                    if (xmlValidationErrorOccured)
                    {
                        var ugyldigforespørsel = new Ugyldigforespørsel
                        {
                            ErrorId       = Guid.NewGuid().ToString(),
                            Feilmelding   = "Feilmelding:\n" + string.Join("\n ", validationResult[0]),
                            CorrelationId = Guid.NewGuid().ToString()
                        };
                        var errorMessage = mottatt.SvarSender.Svar(FeilmeldingMeldingTypeV1.Ugyldigforespørsel, JsonConvert.SerializeObject(ugyldigforespørsel), "ugyldigforespørsel.json").Result;
                        Console.WriteLine($"Svarmelding {errorMessage.MeldingId} {errorMessage.MeldingType} sendt");
                        mottatt.SvarSender.Ack(); // Ack message to remove it from the queue
                    }
                }

                //Konverterer til arkivmelding xml
                var simulertSokeresultat = MessageSamples.GetForenkletArkivmeldingInngåendeMedSaksreferanse();
                var arkivmelding         = ArkivmeldingFactory.GetArkivmelding(simulertSokeresultat);
                var payload = ArkivmeldingSerializeHelper.Serialize(arkivmelding);
                //Lager FIKS IO melding
                List <IPayload> payloads = new List <IPayload>();
                payloads.Add(new StringPayload(payload, "arkivmelding.xml"));

                mottatt.SvarSender.Ack(); // Ack message to remove it from the queue
                var svarmsg = mottatt.SvarSender.Svar(ArkivintegrasjonMeldingTypeV1.InnsynSokResultat, payloads).Result;
                Console.WriteLine("Svarmelding " + svarmsg.MeldingId + " " + svarmsg.MeldingType + " sendt...");
                Console.WriteLine("Melding er håndtert i arkiv ok ......");
            }
            else if (ArkivintegrasjonMeldingTypeV1.IsAvansert(mottatt.Melding.MeldingType))
            {
                Console.WriteLine("Melding " + mottatt.Melding.MeldingId + " " + mottatt.Melding.MeldingType + " mottas...");
                //TODO håndtere meldingen med ønsket funksjonalitet
                Console.WriteLine("Melding er håndtert i arkiv ok ......");
                mottatt.SvarSender.Ack(); // Ack message to remove it from the queue
            }
            else
            {
                Console.WriteLine("Ukjent melding i køen som avvises " + mottatt.Melding.MeldingId + " " + mottatt.Melding.MeldingType);
                mottatt.SvarSender.Nack(); // Nack message to remove it from the queue
            }
        }
示例#11
0
        static void OnReceivedMelding(object sender, MottattMeldingArgs fileArgs)
        {
            //Se oversikt over meldingstyper på https://github.com/ks-no/fiks-io-meldingstype-katalog/tree/test/schema

            // Process the message


            if (fileArgs.Melding.MeldingType == "no.ks.fiks.gi.arkivintegrasjon.mottatt.v1")
            {
                Console.WriteLine("(Svar på " + fileArgs.Melding.SvarPaMelding + ") Melding " + fileArgs.Melding.MeldingId + " " + fileArgs.Melding.MeldingType + " mottas...");

                //TODO håndtere meldingen med ønsket funksjonalitet
                if (fileArgs.Melding.HasPayload)
                { // Verify that message has payload
                    IAsicReader reader = new AsiceReader();
                    using (var inputStream = fileArgs.Melding.DecryptedStream.Result)
                        using (var asice = reader.Read(inputStream))
                        {
                            foreach (var asiceReadEntry in asice.Entries)
                            {
                                using (var entryStream = asiceReadEntry.OpenStream())
                                {
                                    StreamReader reader1 = new StreamReader(entryStream);
                                    string       text    = reader1.ReadToEnd();
                                    Console.WriteLine(text);
                                }
                            }
                        }
                }
                Console.WriteLine("Melding er håndtert i fagsystem ok ......");

                fileArgs.SvarSender.Ack(); // Ack message to remove it from the queue
            }
            else if (fileArgs.Melding.MeldingType == "no.ks.fiks.gi.arkivintegrasjon.kvittering.v1")
            {
                Console.WriteLine("(Svar på " + fileArgs.Melding.SvarPaMelding + ") Melding " + fileArgs.Melding.MeldingId + " " + fileArgs.Melding.MeldingType + " mottas...");

                //TODO håndtere meldingen med ønsket funksjonalitet
                if (fileArgs.Melding.HasPayload)
                { // Verify that message has payload
                    IAsicReader reader = new AsiceReader();
                    using (var inputStream = fileArgs.Melding.DecryptedStream.Result)
                        using (var asice = reader.Read(inputStream))
                        {
                            foreach (var asiceReadEntry in asice.Entries)
                            {
                                using (var entryStream = asiceReadEntry.OpenStream())
                                {
                                    StreamReader reader1 = new StreamReader(entryStream);
                                    string       text    = reader1.ReadToEnd();
                                    Console.WriteLine(text);
                                }
                            }
                        }
                }
                Console.WriteLine("Melding er håndtert i fagsystem ok ......");

                fileArgs.SvarSender.Ack(); // Ack message to remove it from the queue
            }
            else if (fileArgs.Melding.MeldingType == "no.ks.fiks.gi.arkivintegrasjon.feil.v1")
            {
                Console.WriteLine("(Svar på " + fileArgs.Melding.SvarPaMelding + ") Melding " + fileArgs.Melding.MeldingId + " " + fileArgs.Melding.MeldingType + " mottas...");

                //TODO håndtere meldingen med ønsket funksjonalitet
                if (fileArgs.Melding.HasPayload)
                { // Verify that message has payload
                    IAsicReader reader = new AsiceReader();
                    using (var inputStream = fileArgs.Melding.DecryptedStream.Result)
                        using (var asice = reader.Read(inputStream))
                        {
                            foreach (var asiceReadEntry in asice.Entries)
                            {
                                using (var entryStream = asiceReadEntry.OpenStream())
                                {
                                    StreamReader reader1 = new StreamReader(entryStream);
                                    string       text    = reader1.ReadToEnd();
                                    Console.WriteLine(text);
                                }
                            }
                        }
                }
                Console.WriteLine("Melding er håndtert i fagsystem ok ......");

                fileArgs.SvarSender.Ack(); // Ack message to remove it from the queue
            }
            else if (fileArgs.Melding.MeldingType == "no.ks.fiks.gi.arkivintegrasjon.innsyn.sok.resultat.v1")
            {
                Console.WriteLine("(Svar på " + fileArgs.Melding.SvarPaMelding + ") Melding " + fileArgs.Melding.MeldingId + " " + fileArgs.Melding.MeldingType + " mottas...");


                if (fileArgs.Melding.HasPayload)
                { // Verify that message has payload
                    IAsicReader reader = new AsiceReader();
                    using (var inputStream = fileArgs.Melding.DecryptedStream.Result)
                        using (var asice = reader.Read(inputStream))
                        {
                            foreach (var asiceReadEntry in asice.Entries)
                            {
                                using (var entryStream = asiceReadEntry.OpenStream())
                                {
                                    StreamReader reader1 = new StreamReader(entryStream);
                                    string       text    = reader1.ReadToEnd();
                                    Console.WriteLine(text);
                                }
                            }
                            // Check that all digests declared in the manifest are valid
                            if (asice.DigestVerifier.Verification().AllValid)
                            {
                                // Do something
                            }
                            else
                            {
                                // Handle error
                            }
                        }
                }

                Console.WriteLine("Melding er håndtert i fagsystem ok ......");

                fileArgs.SvarSender.Ack(); // Ack message to remove it from the queue
            }
            else
            {
                Console.WriteLine("Ubehandlet melding i køen " + fileArgs.Melding.MeldingId + " " + fileArgs.Melding.MeldingType);
                //fileArgs.SvarSender.Ack(); // Ack message to remove it from the queue
            }
        }
示例#12
0
        static void OnReceivedMelding(object sender, MottattMeldingArgs mottatt)
        {
            //Se oversikt over meldingstyper på https://github.com/ks-no/fiks-io-meldingstype-katalog/tree/test/schema

            // Process the message

            if (mottatt.Melding.MeldingType == "no.ks.fiks.politisk.behandling.tjener.resultatmøteplan.v1")
            {
                Console.WriteLine("Melding " + mottatt.Melding.MeldingId + " " + mottatt.Melding.MeldingType + " mottas...");

                //TODO håndtere meldingen med ønsket funksjonalitet

                Console.WriteLine("Melding er håndtert ok ......");

                mottatt.SvarSender.Ack(); // Ack message to remove it from the queue
            }
            else if (mottatt.Melding.MeldingType == "no.ks.fiks.politisk.behandling.tjener.sendvedtakfrautvalg.v1")
            {
                Console.WriteLine("Melding " + mottatt.Melding.MeldingId + " " + mottatt.Melding.MeldingType + " mottas...");

                if (mottatt.Melding.HasPayload)
                {
                    List <List <string> > errorMessages = new List <List <string> >()
                    {
                        new List <string>(), new List <string>()
                    };
                    IAsicReader reader = new AsiceReader();
                    using (var inputStream = mottatt.Melding.DecryptedStream.Result)
                        using (var asice = reader.Read(inputStream))
                        {
                            foreach (var asiceReadEntry in asice.Entries)
                            {
                                using (var entryStream = asiceReadEntry.OpenStream())
                                {
                                    if (asiceReadEntry.FileName.Contains(".json"))
                                    {
                                        errorMessages = ValidateJsonFile(new StreamReader(entryStream).ReadToEnd(), Path.Combine("schema", "no.ks.fiks.politisk.behandling.sendvedtakfrautvalg.v1.schema.json"));
                                    }
                                    else
                                    {
                                        Console.WriteLine("Mottatt vedlegg: " + asiceReadEntry.FileName);
                                    }
                                }
                            }
                        }

                    if (errorMessages[0].Count == 0)
                    {
                        var svarmsg2 = mottatt.SvarSender.Svar("no.ks.fiks.politisk.behandling.mottatt.v1").Result;
                        Console.WriteLine("Svarmelding " + svarmsg2.MeldingId + " " + svarmsg2.MeldingType + " sendt...");
                        mottatt.SvarSender.Ack(); // Ack message to remove it from the queue
                    }
                    else
                    {
                        Console.WriteLine("Feil i validering av sendvedtakfrautvalg");
                        var errorMessage = mottatt.SvarSender.Svar("no.ks.fiks.kvittering.ugyldigforespørsel.v1", String.Join("\n ", errorMessages[0]), "feil.txt").Result;

                        Console.WriteLine(String.Join("\n ", errorMessages[0]));

                        mottatt.SvarSender.Ack(); // Ack message to remove it from the queue
                    }
                }
                else
                {
                    var svarmsg = mottatt.SvarSender.Svar("no.ks.fiks.kvittering.ugyldigforespørsel.v1", "Meldingen mangler innhold", "feil.txt").Result;
                    Console.WriteLine("Svarmelding " + svarmsg.MeldingId + " " + svarmsg.MeldingType + " Meldingen mangler innhold");

                    mottatt.SvarSender.Ack(); // Ack message to remove it from the queue
                }
            }
            else if (mottatt.Melding.MeldingType == "no.ks.geointegrasjon.ok.v1")
            {
                Console.WriteLine("Melding " + mottatt.Melding.MeldingId + " " + mottatt.Melding.MeldingType + " mottas...");

                //TODO håndtere meldingen med ønsket funksjonalitet

                Console.WriteLine("Melding er håndtert ok ......");

                mottatt.SvarSender.Ack(); // Ack message to remove it from the queue
            }
            else
            {
                Console.WriteLine("Ubehandlet melding i køen " + mottatt.Melding.MeldingId + " " + mottatt.Melding.MeldingType);
            }
        }
示例#13
0
        private async void OnMottattMelding(object sender, MottattMeldingArgs mottattMeldingArgs)
        {
            Logger.Information("Henter melding med MeldingId: {MeldingId}", mottattMeldingArgs.Melding.MeldingId);
            var payloads = new List <FiksPayload>();

            if (mottattMeldingArgs.Melding.HasPayload)
            {
                try
                {
                    // Verify that message has payload
                    IAsicReader reader = new AsiceReader();
                    await using var inputStream = mottattMeldingArgs.Melding.DecryptedStream.Result;
                    using var asice             = reader.Read(inputStream);
                    foreach (var asiceReadEntry in asice.Entries)
                    {
                        await using var entryStream = asiceReadEntry.OpenStream();

                        byte[] fileAsBytes;
                        using (MemoryStream ms = new MemoryStream())
                        {
                            entryStream.CopyTo(ms);
                            fileAsBytes = ms.ToArray();
                        }

                        payloads.Add(new FiksPayload()
                        {
                            Filename = asiceReadEntry.FileName, Payload = fileAsBytes
                        });
                    }
                }
                catch (Exception e)
                {
                    Logger.Error("Klarte ikke hente payload og melding blir dermed ikke parset. MeldingId: {MeldingId}, Error: {Message}", mottattMeldingArgs.Melding?.MeldingId, e.Message);
                    mottattMeldingArgs.SvarSender?.Ack();
                    return;
                }
            }

            try
            {
                using var scope = _scopeFactory.CreateScope();
                var context     = scope.ServiceProvider.GetRequiredService <FiksIOMessageDBContext>();
                var testSession = context.TestSessions.Include(t => t.FiksRequests).FirstOrDefaultAsync(t =>
                                                                                                        t.FiksRequests.Any(r => r.MessageGuid.Equals(mottattMeldingArgs.Melding.SvarPaMelding))).Result;

                // Ikke optimalt? Det er gjort slik fordi man ikke vet om databasen har rukket å skrive før man får svar.
                var timesTried = 1;
                while (testSession == null && timesTried <= 5)
                {
                    Thread.Sleep(1000);
                    testSession = context.TestSessions.Include(t => t.FiksRequests).FirstOrDefault(t =>
                                                                                                   t.FiksRequests.Any(r => r.MessageGuid.Equals(mottattMeldingArgs.Melding.SvarPaMelding)));
                    timesTried++;
                }


                if (testSession != null)
                {
                    var fiksRequest =
                        testSession.FiksRequests.Find(r => r.MessageGuid.Equals(mottattMeldingArgs.Melding.SvarPaMelding));

                    var responseMessage = new FiksResponse
                    {
                        ReceivedAt   = DateTime.Now,
                        Type         = mottattMeldingArgs.Melding.MeldingType,
                        FiksPayloads = payloads
                    };

                    if (fiksRequest == null)
                    {
                        mottattMeldingArgs.SvarSender?.Ack();
                        Logger.Error("Klarte ikke å matche svar-melding fra FIKS med en eksisterende forespørsel. Testsession med id {TestSessionId} funnet. Svarmelding forkastes. SvarPaMelding id: {Id}", testSession.Id, mottattMeldingArgs.Melding.SvarPaMelding);
                        return;
                    }

                    fiksRequest.FiksResponses ??= new List <FiksResponse>();

                    fiksRequest.FiksResponses.Add(responseMessage);

                    context.Entry(testSession).State = EntityState.Modified;
                    await context.SaveChangesAsync();
                }
                else
                {
                    Logger.Error("Klarte ikke å matche svar-melding fra FIKS med en eksisterende testsesjon. Testsession ikke funnet. Svarmelding forkastes. SvarPaMelding id: {Id}", mottattMeldingArgs.Melding.SvarPaMelding);
                }
            }
            finally
            {
                mottattMeldingArgs.SvarSender?.Ack();
            }
        }