using System; using System.Threading; using System.Threading.Tasks; using System.Xml.Linq; using SystemEx; using WampSharp.V2; using WampSharp.V2.Client; using WampSharp.V2.Rpc; using System.Collections; namespace WampSharpCallee { public interface IArgumentsService { [WampProcedure("com.arguments.LongString")] Task LongString(int waitMs); [WampProcedure("com.arguments.ShortString")] Task ShortString(int waitMs); } public class ArgumentsService : IArgumentsService { string shortString = new String('x', 1 * 1024 * 1024); string longString = new String('x', 500 * 1024 * 1024); public async Task ShortString(int waitMs) { return await Task.Run(() => { BurnCpuTime(waitMs); Console.WriteLine("short returning"); return shortString; }); } public async Task LongString(int waitMs) { return await Task.Run(() => { BurnCpuTime(waitMs); Console.WriteLine("long returning"); return longString; }); } public void BurnCpuTime(int waitMs) { DateTime d = DateTime.Now; while (DateTime.Now < d.Add(TimeSpan.FromMilliseconds(waitMs))) { int x = 1; } } } internal class Program { public static void Main(string[] args) { const string location = "ws://127.0.0.1:8080/"; DefaultWampChannelFactory channelFactory = new DefaultWampChannelFactory(); IWampChannel channel = channelFactory.CreateJsonChannel(location, "realm1"); Task openTask = channel.Open(); // await openTask; openTask.Wait(); IArgumentsService instance = new ArgumentsService(); IWampRealmProxy realm = channel.RealmProxy; Task registrationTask = realm.Services.RegisterCallee(instance); // await registrationTask; registrationTask.Wait(); Console.ReadLine(); } } }