MqttServer(MessageDispatcherSync msgDispatcher) : base(msgDispatcher) { client = new MqttClient(BrokerIp); var clientId = Guid.NewGuid().ToString(); Console.WriteLine(clientId); client.Connect(clientId, null, null); Subscribe(TopicAndroidNotification); }
public YukariManager() { yukari = new Yukari(); msgDispatcher = new MessageDispatcherSync(); msgDispatcher.OnDispatchEvent += OnDispatchEvent; msgDispatcher.StartLoop(); var tcpServer = new TcpServer(msgDispatcher); }
public TcpServer(MessageDispatcherSync msgDispatcher) : base(msgDispatcher) { Task.Run(() => { var ipEndPoint = new IPEndPoint(IPAddress.Parse(GetIPAddress()), 8888); tcpListener = new TcpListener(ipEndPoint); tcpListener.Start(); sessionMap = new Dictionary <int, TcpClient>(); while (true) { var client = tcpListener.AcceptTcpClient(); var streamReader = new StreamReader(client.GetStream(), Encoding.UTF8); var req = JsonConvert.DeserializeObject <YukariRequest>(streamReader.ReadLine()); var command = (YukariCommand)Enum.Parse(typeof(YukariCommand), req.Command, true); var id = EnqueueMessage(new YukariMessage(command, req.Text)); sessionMap.Add(id, client); } }); }
/// <summary> /// Androidで音声認識のpartialの差分をとる /// </summary> public DiffTcpServer(MessageDispatcherSync msgDispatcher) : base(msgDispatcher) { textId = 0; partial = ""; Task.Run(() => { var ipEndPoint = new IPEndPoint(IPAddress.Parse("sora.nov"), 8888); Console.WriteLine(ipEndPoint.ToString()); tcpListener = new TcpListener(ipEndPoint); tcpListener.Start(); while (true) { Console.WriteLine("待機中"); using (var client = tcpListener.AcceptTcpClient()) using (var netStream = client.GetStream()) using (var streamReader = new StreamReader(netStream, Encoding.UTF8)) { var idStr = streamReader.ReadLine(); Console.WriteLine(idStr); var id = int.Parse(idStr); if (textId != id) { partial = ""; textId = id; } var receivedText = streamReader.ReadLine(); if (receivedText.Length == 0) { continue; } Console.WriteLine("receive : " + receivedText); var lastAdd = -1; if (partial.Length > 0) { Console.WriteLine("diff"); var results = DiffUtil.Diff(partial, receivedText); var resultList = results.ToList(); lastAdd = resultList.FindLastIndex(r => r.ToFormatString().StartsWith("=") || r.ToFormatString().StartsWith("-")); var index = 0; var deleteCount = resultList.Where(r => r.ToFormatString().StartsWith("-") && index++ < lastAdd).Count(); if (lastAdd == -1 && resultList.Any(r => r.ToFormatString().StartsWith("+"))) { //同じ文字がなく追加と削除しかない deleteCount = 0; lastAdd = resultList.FindIndex(r => { if (r.ToFormatString().StartsWith("-")) { deleteCount++; } return(r.ToFormatString().StartsWith("+")); }); } Console.WriteLine("deleteCount:" + deleteCount); lastAdd -= deleteCount; index = 0; resultList.ForEach(r => Console.Write(index++ + ":" + r.ToFormatString() + " ")); Console.WriteLine(); } var askText = receivedText; Console.WriteLine("lastAdd : " + lastAdd); Console.WriteLine("receivedText.Length : " + receivedText.Length); if (lastAdd != -1 && lastAdd != receivedText.Length - 1) { askText = receivedText.Substring(lastAdd + 1); } else if (partial.Length > 0) { continue; } Console.WriteLine("enqueue : " + askText); EnqueueMessage(new YukariMessage(askText)); partial = receivedText; } } }); }
protected ServerBase(MessageDispatcherSync msgDispatcher) { this.msgDispatcher = msgDispatcher; }