/////////////////////////////////////////////////////////////////////////////// // // Microsoft Research Singularity // // Copyright (c) Microsoft Corporation. All rights reserved. // // File: Services\Tests\BenchmarkProxy\BenchmarkJournalProducer.sg // // Note: // using System; using Microsoft.SingSharp; using Microsoft.SingSharp.Reflection; using Microsoft.Singularity; using Microsoft.Singularity.Channels; using Microsoft.Singularity.Configuration; using Microsoft.Singularity.Directory; using Microsoft.Singularity.Resiliency; using Microsoft.Singularity.Security; using Microsoft.Singularity.ServiceManager; using Microsoft.Singularity.Services; [assembly: Transform(typeof(ServiceResourceTransform))] [assembly: ApplicationPublisherAttribute("singularity.microsoft.com")] [assembly: AssertPrivilegeAttribute("$register-privilege.localhost")] namespace Microsoft.Singularity.Services.Benchmark { [Category("Service")] internal sealed class Parameters { [Endpoint] public readonly TRef serviceContractRef; [Endpoint] public readonly TRef directoryContractRef; [Endpoint] public readonly TRef substituteDSRef; [Endpoint] public readonly TRef proxyContractRef; reflective private Parameters(); } internal class BenchmarkJournalProducer : JournalProducer { internal BenchmarkJournalProducer() { base(); } protected override bool Accept(ServiceContract.Exp:Start! ep) { // ep must be a type of CounterContract.Exp BenchmarkContract.Exp:Start cep = ep as BenchmarkContract.Exp:Start; return (cep != null); } protected override void Substitute([Claims]ServiceContract.Exp:Start! ep, out ServiceContract.Exp! newEp) { Journalet! journalet; ServiceContract.Exp:Start! serverEp; journalet = new BenchmarkJournalet(this, ep); journalet.CreateServerEndpoint(out serverEp); journalet.Start(); RegisterJournalet(journalet); newEp = serverEp; } internal static int AppMain(Parameters! config) { ManagedServiceContract.Exp:Start ep; DirectoryServiceContract.Imp:Ready dep; DirectoryServiceContract.Exp:Start fep; ManagedProxyContract.Imp:Start mep; ep = config.serviceContractRef.Acquire(); dep = config.directoryContractRef.Acquire(); fep = config.substituteDSRef.Acquire(); mep = config.proxyContractRef.Acquire(); if (ep == null || dep == null || fep == null || mep == null) { delete ep; delete dep; delete fep; delete mep; return -1; } DebugStub.Print("Start BenchmarkJournalProcuder\n"); JournalProducer jp = new BenchmarkJournalProducer(); try { jp.Start(ep, dep, fep, mep); } catch (Exception e) { DebugStub.WriteLine(e.ToString()); DebugStub.WriteLine(e.StackTrace); } return 0; } } }