private async Task SendText(IRomePackageManager packageManager, string deviceName, string text) { ViewModel.ProgressPercentIndicatorVisibility = Visibility.Collapsed; TextSender ts = new TextSender(packageManager, deviceName); ts.TextSendProgress += (ee) => { ViewModel.ProgressIsIndeterminate = false; ViewModel.ProgressMaximum = ee.TotalParts; ViewModel.ProgressValue = ee.SentParts; }; ViewModel.SendStatus = "Sending..."; bool sendResult = await ts.Send(text, ContentType.ClipboardContent); if (sendResult) { await SendFinishService(packageManager); ViewModel.SendStatus = "Done."; } else { ViewModel.SendStatus = "Failed :("; } ViewModel.ProgressIsIndeterminate = false; ViewModel.ProgressValue = ViewModel.ProgressMaximum; }
protected BaseClient([NotNull] ICommsNetworkState network) { if (network == null) { throw new ArgumentNullException("network"); } Log = Logs.Create(LogCategory.Network, GetType().Name); const int poolSize = 32; const int byteBufferSize = 1024; const int channelListSize = 8; var byteArrayPool = new ReadonlyLockedValue <Pool <byte[]> >(new Pool <byte[]>(poolSize, () => new byte[byteBufferSize])); var channelListPool = new ConcurrentPool <List <RemoteChannel> >(poolSize, () => new List <RemoteChannel>(channelListSize)); _sendQueue = new SendQueue <TPeer>(this, byteArrayPool); _serverNegotiator = new ConnectionNegotiator <TPeer>(_sendQueue, network.PlayerName, network.CodecSettings); _lossSimulator = new PacketDelaySimulator(); _events = new EventQueue(byteArrayPool, channelListPool); _peers = new SlaveClientCollection <TPeer>(_sendQueue, _serverNegotiator, _events, network.Rooms, network.PlayerName, network.CodecSettings); _peers.OnClientJoined += OnAddedClient; _peers.OnClientIntroducedP2P += OnMetClient; _voiceReceiver = new VoiceReceiver <TPeer>(_serverNegotiator, _peers, _events, network.Rooms, channelListPool); _voiceSender = new VoiceSender <TPeer>(_sendQueue, _serverNegotiator, _peers, _events, network.PlayerChannels, network.RoomChannels); _textReceiver = new TextReceiver <TPeer>(_events, network.Rooms, _peers); _textSender = new TextSender <TPeer>(_sendQueue, _serverNegotiator, _peers); }
private async Task SendText(string text) { sendStatus.Text = "Connecting..."; if (!(await Common.PackageManager.QuickClipboard(text, Common.GetCurrentRemoteSystem(), CrossDeviceInfo.Current.Model, "roamit://clipboard"))) { var result = await Common.PackageManager.Connect(Common.GetCurrentRemoteSystem(), false); if (result != QuickShare.Common.Rome.RomeAppServiceConnectionStatus.Success) { sendStatus.Text = $"Connect failed. ({result.ToString()})"; Analytics.TrackEvent("SendToWindows", "text", "Failed"); return; } //Fix Rome Android bug (receiver app service closes after 5 seconds in first connection) Common.PackageManager.CloseAppService(); result = await Common.PackageManager.Connect(Common.GetCurrentRemoteSystem(), false); if (result != QuickShare.Common.Rome.RomeAppServiceConnectionStatus.Success) { sendStatus.Text = $"Connect failed. ({result.ToString()})"; Analytics.TrackEvent("SendToWindows", "text", "Failed"); return; } TextSender textSender = new TextSender(Common.PackageManager, CrossDeviceInfo.Current.Model); textSender.TextSendProgress += (ee) => { SetProgressBarValue(ee.SentParts, ee.TotalParts); }; sendStatus.Text = "Sending..."; bool sendResult = await textSender.Send(text, ContentType.ClipboardContent); SetProgressBarValueToMax(); if (!sendResult) { sendStatus.Text = "Send failed."; sendProgress.Progress = sendProgress.Max; Analytics.TrackEvent("SendToWindows", "text", "Failed"); return; } Common.PackageManager.CloseAppService(); } sendStatus.Text = "Finished."; SetProgressBarValueToMax(); Analytics.TrackEvent("SendToWindows", "text", "Success"); }
public static void Main() { IMessageSender text = new TextSender(); IMessageSender web = new WebServiceSender(); Message message = new SystemMessage(); message.Subject = "A Message"; message.Body = "Hi there, Please accept this message."; message.MessageSender = text; message.Send(); message.MessageSender = web; message.Send(); }
private static void Startup() { // setup RabbitMQ var configSection = Config.GetSection("RabbitMQ"); string host = configSection["Host"]; string userName = configSection["UserName"]; string password = configSection["Password"]; string exchange = configSection["Exchange"]; string connName = configSection["ConnectionName"]; var mailConfigSection = Config.GetSection("EmailSettings"); string mailHost = mailConfigSection["MailServer"]; int mailPort = Convert.ToInt32(mailConfigSection["MailPort"]); string mailUserName = mailConfigSection["Sender"]; string mailSenderName = mailConfigSection["SenderName"]; string mailPassword = mailConfigSection["Password"]; //ISMTPMailSender smtpMailServer = new SMTPMailSender(mailHost, mailPort, mailUserName, mailPassword, mailSenderName); // original var smsConfiguration = Config.GetSection("SmsSettings"); string accountSid = smsConfiguration["AccountSID"]; string authCode = smsConfiguration["AuthToken"]; EmailSettings settings = new EmailSettings(mailHost, mailPort, mailSenderName, mailUserName, mailPassword); IEmailSender smtpMailServer = new EmailSender(settings); SmsSettings smsSettings = new SmsSettings(accountSid, authCode); ISmsSender smsSender = new TextSender(smsSettings); //ITwilioRestClient smsSender = new SmsSender(); //var emailSender = new EmailSender(); //var emailSettings = new EmailSettings(); // setup messagehandler RabbitMQMessageHandler messageHandler = new RabbitMQMessageHandler(host, userName, password, exchange, connName, "notification", "notification.#"); // ABOVE: subscribe/listen to queue - queue name to be updated //IEmailSender emailSender = null; EventHandlers.EventHandler eventHandler = new EventHandlers.EventHandler(messageHandler, smtpMailServer, smsSender); //, dbContext); //EventHandler eventHandler = new EventHandler(messageHandler, smtpMailServer); //EmailNotificationEventHandler eventHandler = new EmailNotificationEventHandler(messageHandler, smtpMailServer); // original eventHandler.Start(); }
static void Main(string[] args) { //bridge implementors IMessageSender textSender = new TextSender(); IMessageSender webSender = new WebServiceSender(); //abstraction implementor Message systemMessage = new SystemMessage(); systemMessage.Subject = "A message"; systemMessage.Body = "Hello, please accept the message"; //decoupling abstraction from implementation systemMessage.MessageSender = textSender; systemMessage.Send(); systemMessage.MessageSender = webSender; systemMessage.Send(); Console.ReadKey(); }
static void Main(string[] args) { #region Decorator - Using Composition to limit inheritance and simplify object relationships easier to maintain and manage. //Inside ConcreteDecorator any number of features can be added to the car and price for the car can be updated. Decorator.Component.Car sampleCar = new CompactCar(); sampleCar = new LeatherSeats(sampleCar); Console.WriteLine(sampleCar.GetDescription()); Console.WriteLine($"{sampleCar.GetCarPrice():C2}"); #endregion #region Observer - Change in one object causes a change or action in another. var trump = new Trump("I love my wife"); var firstFan = new Fan("Rohit"); var secondFan = new Fan("Ram"); trump.AddFollower(firstFan); trump.AddFollower(secondFan); trump.Tweet = "I hate media"; #endregion #region Builder Pattern- Separate and reuse a specific process to build an object /use when constructing a complex object //Director- construct () //Builder - Build part //CarBuilder to construct two types of cars //override the method of building a car in separate classes which derive from an abstract carbuilder //create a list of carbuilder objects to specify the current known types of cars that can be built //create a factory var superBuilder = new SuperCarBuilder(); var notSoSsuperBuilder = new NotSoSuperCarBuilder(); var factory = new CarFactory(); var builders = new List <CarBuilder> { superBuilder, notSoSsuperBuilder }; foreach (var b in builders) { var c = factory.Build(b); Console.WriteLine($"The car requested by " + $"{b.GetType().Name}:" + Environment.NewLine + $"Horse Power: {c.HorsePower}" + Environment.NewLine + $"Impressive feature: {c.MostImpressiveFeature}" + Environment.NewLine + $"Top speed: {c.TopSpeedMPH} mph" + Environment.NewLine); } #endregion #region Bridge Pattern- Used to separate an abstraction from its implementation so both can be modified independently //Sending messages from sms or service without each affecting the other IMessageSender text = new TextSender(); IMessageSender web = new WebServiceSender(); Message message = new SystemMessage(text); message.Subject = "A message"; message.Body = "hi there, please know this"; message.MessageSender = text; message.Send(); message.MessageSender = web; message.Send(); #endregion #region Chain of responsibility- Chain the receiving objects and pass the request along the chain until an object handles it. //Avoid coupling the sender of a request to its receiver by giving more than one object a chance to handle the request Approver Bobby = new Director(); Approver Sunny = new VicePresident(); Approver Dharam = new President(); Bobby.SetSuccessor(Sunny); Sunny.SetSuccessor(Dharam); Purchase P = new Purchase() { Amount = 10000, Number = 1 }; Bobby.ProcessRequest(P); #endregion #region Command - Wrap request as an object to be implemented later or invoke at different points in time. //Encapsulate a request as an object, thereby letting you parameterize clients with different requests -queue or log and support undoable operations //Use an object to store required information to perform an action at any point in time. var user = new User(); user.Compute('+', 100); user.Compute('-', 50); user.Compute('*', 10); user.Compute('/', 2); //undo user.Undo(4); //Redo user.Redo(3); #endregion Console.ReadLine(); }