/// <exception cref="ExitWithError" /> public override void Run(string[] args, CancellationToken ct) { _optionSet.Parse(args); var localSocketClient = new LocalSocketClient(new TcpClient("127.0.0.1", 12122)); localSocketClient.StartRead(); var serializer = new Serializer(); var client = new Client(localSocketClient, serializer); client.Request(new HelloRequest() { Identifier = "Event Viewer", }).Wait(); client.Request(new SubscribeRequest(_eventFilter, replay: true, subscriptionId: 0)); var messages = localSocketClient.IncomingMessages; messages.TryDeserialize(serializer, _report).OfType <IEventMessage <UnresolvedMessagePayload> >().Subscribe(WriteEvent); var run = true; localSocketClient.Disconnected.Subscribe(c => run = false); //TODO handle ctrl+c while (run) { Thread.Sleep(500); } }
public void Remove(LocalSocketClient socket) { PluginClient pluginClient; _clients.TryRemove(socket, out pluginClient); pluginClient.DoIfNotNull(c => c.Dispose()); }
/// <exception cref="FailedToConnectToDaemon" /> public static IMessagingService Connect(this IFuseLauncher fuseLauncher) { try { var tcpClient = new TcpClient("127.0.0.1", 12122); var client = new LocalSocketClient(tcpClient); client.StartRead(); return(new Client( client, new Serializer())); } catch (Exception e) { throw new FailedToConnectToDaemon(e); } }
static int Main() { var tcpClient = new TcpClient("127.0.0.1", 12122); var client = new LocalSocketClient(tcpClient); client.Disconnected.Subscribe(c => WriteColoredLine("Lost connnection", ConsoleColor.DarkRed)); //client.EnqueueMessage("{\"MessageType\":\"Request\", \"Type\":\"Hello\"}"); Console.ReadLine(); /*Console.Write("Your name: "); * var name = Console.ReadLine(); * Console.Write("Do you want swear word protection? "); * var swearWordProtection = Console.ReadLine().ToUpper() == "YES"; * * Console.Write("Do you want to be an admin? "); * var isAdmin = Console.ReadLine().ToUpper() == "YES"; * * var serializer = new Serializer(new PayloadParserContext( * typeof(HelloRequest), * typeof(HelloResponse), * typeof(SendMessageToAdminRequest), * typeof(SendMessageToAdminResponse), * typeof(Message), * typeof(SwearMessage), * typeof(UserConnected))); * * var messagesOut = client.OutgoingMessages.Serialized(serializer); * var messagesIn = client.IncomingMessages.TryDeserialize(serializer, null); * * messagesIn * .OfType<IEventMessage<UserConnected>>() * .Subscribe(u => WriteColoredLine(u.Data.Name + " has connected to Fuse group chat (" + u.Data.DateTime.ToShortTimeString() + ")", ConsoleColor.Cyan)); * * messagesIn * .OfType<IEventMessage<Message>>() * .Subscribe(m => WriteColoredLine(m.Data.Text, ConsoleColor.White)); * * messagesIn * .OfType<IRequestMessage<SendMessageToAdminRequest>>() * .Subscribe( * r => * { * WriteColoredLine(r.Data.Name + " sent you a PM: " + r.Data.Message, ConsoleColor.Yellow); * messagesOut.OnNext(Response.CreateSuccess(r, new SendMessageToAdminResponse() { Answer = "I got the message." })); * }); * * messagesIn * .OfType<IResponseMessage<SendMessageToAdminResponse>>() * .Subscribe(res => WriteColoredLine("Admin responded: " + res.Data.Answer, ConsoleColor.DarkGreen)); * * var waitForHelloResponse = messagesIn * .OfType<IResponseMessage<HelloResponse>>() * .FirstAsync().ToTask(); * * client.StartRead(); * * var eventFilter = swearWordProtection ? "^((?!SwearMessage).)*$" : ""; * var implements = isAdmin ? new List<string> { "Fuse.Test.MessageToAdmin" } : new List<string> { "" }; * * messagesOut.OnNext(Request.Create(0, new HelloRequest() { Identifier = name, EventFilter = eventFilter, Implements = implements })); * waitForHelloResponse.Wait(); * * messagesOut.OnNext(Event.Create(new UserConnected() { Name = name, DateTime = DateTime.Now })); * * var counter = 0; * while (tcpClient.Connected) * { * var data = counter + "\n";// Console.ReadLine(); * messagesOut.OnNext(Event.Create(new Message() { Text = data })); ++counter; * * /*if(data.StartsWith("/admin")) * messagesOut.OnNext(Request.Create(0, new SendMessageToAdminRequest() { Message = data.Substring(7, data.Length - 7), Name = name })); * else * messagesOut.OnNext(Event.Create(CreateMessage(name + ": " + data))); * }*/ return(0); }