private static void Main(string[] args) { Console.CancelKeyPress += (sender, eventArgs) => { eventArgs.Cancel = true; LinksServerStoped = true; }; var links = new Links2(); //var sequences = new Sequences(links); Console.WriteLine("Links slave server started."); using (var sender = new UdpSender(8888)) { using (new UdpReceiver(7777, m => { if (!string.IsNullOrWhiteSpace(m)) { Console.WriteLine("R.M.: {0}", m); if (m.EndsWith("?")) { m = m.Remove(m.Length - 1); //sequences.Search(sender, m); } } })) { while (!LinksServerStoped) Thread.Sleep(1); } } Console.WriteLine("Links slave server stopped."); }
private static void Search(this Sequences sequences, UdpSender sender, string sequenceQuery) { var actualLength = sequenceQuery.Length - 1; var linksSequenceQuery = new ulong[actualLength]; for (var i = 0; i < actualLength; i++) if (sequenceQuery[i] == '_') // Добавить экранирование \_ в качестве _ (или что-то в этом роде) linksSequenceQuery[i] = Sequences.Any; else if (sequenceQuery[i] == '*') linksSequenceQuery[i] = Sequences.ZeroOrMany; else linksSequenceQuery[i] = FromCharToLink(sequenceQuery[i]); if (linksSequenceQuery.Contains(Sequences.Any) || linksSequenceQuery.Contains(Sequences.ZeroOrMany)) { var patternMatched = sequences.MatchPattern(linksSequenceQuery); sender.Send(string.Format("{0} sequences matched pattern.", patternMatched.Count)); foreach (var result in patternMatched) sender.Send(string.Format("\t{0}: {1}", result, sequences.FormatSequence(result, AppendLinkToString, false))); } else { var fullyMatched = sequences.GetAllMatchingSequences1(linksSequenceQuery); sender.Send(string.Format("{0} sequences matched fully.", fullyMatched.Count)); foreach (var result in fullyMatched) sender.Send(string.Format("\t{0}: {1}", result, sequences.FormatSequence(result, AppendLinkToString, false))); var partiallyMatched = sequences.GetAllPartiallyMatchingSequences1(linksSequenceQuery); sender.Send(string.Format("{0} sequences matched partially.", partiallyMatched.Count)); foreach (var result in partiallyMatched) sender.Send(string.Format("\t{0}: {1}", result, sequences.FormatSequence(result, AppendLinkToString, false))); var allConnections = sequences.GetAllConnections(linksSequenceQuery); sender.Send(string.Format("{0} sequences connects query elements.", allConnections.Count)); foreach (var result in allConnections) sender.Send(string.Format("\t{0}: {1}", result, sequences.FormatSequence(result, AppendLinkToString, false))); } }
private static void Create(this Sequences sequences, UdpSender sender, string sequence) { var link = sequences.Create(FromStringToLinkArray(sequence)); sender.Send(string.Format("Sequence with balanced variant at {0} created.", link)); }
private static void Main() { Console.CancelKeyPress += OnCancelKeyPressed; try { #if DEBUG File.Delete(DefaultDatabaseFilename); #endif using (var links = new Links(DefaultDatabaseFilename, 8*1024*1024)) { InitUTF16(links); var sequences = new Sequences(links); PrintContents(links, sequences); Console.WriteLine("Links server started."); Console.WriteLine("Press CTRL+C or ESC to stop server."); using (var sender = new UdpSender(8888)) { MessageHandlerCallback handleMessage = message => { if (!string.IsNullOrWhiteSpace(message)) { Console.WriteLine("R.M.: {0}", message); if (message.EndsWith("?")) sequences.Search(sender, message); else sequences.Create(sender, message); } }; //using (var receiver = new UdpReceiver(7777, handleMessage)) using (var receiver = new UdpClient(7777)) { while (LinksServerRunning) { while (receiver.Available > 0) handleMessage(receiver.ReceiveString()); while (Console.KeyAvailable) { var info = Console.ReadKey(true); if (info.Key == ConsoleKey.Escape) LinksServerRunning = false; } Thread.Sleep(1); } Console.WriteLine("Links server stopped."); } } } } catch (Exception ex) { ex.WriteToConsole(); } Console.CancelKeyPress -= OnCancelKeyPressed; }