public void DontSplitShortMessage() { var messageSplitter = new MessageSplitter(maxMessageLength: 100); const string message = "This message has few enough characters to not get split."; Assert.That( messageSplitter.FitToMaxLength(message).ToArray(), Is.EqualTo(new[] { message })); }
public MainView() { this.InitializeComponent(); this.presenter = new MainPresenter(this); this.splitter = new MessageSplitter(); this.splitter.OnMessage += splitter_OnMessage; this.UpdatePorts(); }
// called from the tcp sniffer, so it needs to lock private void HandleTcpDataReceived(TcpConnection connection, ArraySegment <byte> data) { lock (_eventLock) { if (data.Count == 0) { return; } if (_isNew.Contains(connection)) { if (_serversByIp.ContainsKey(connection.Source.Address.ToString()) && data.Array.Skip(data.Offset).Take(4).SequenceEqual(new byte[] { 1, 0, 0, 0 })) { _isNew.Remove(connection); var server = _serversByIp[connection.Source.Address.ToString()]; _serverToClient = connection; _clientToServer = null; _decrypter = new ConnectionDecrypter(server.Region); _decrypter.ClientToServerDecrypted += HandleClientToServerDecrypted; _decrypter.ServerToClientDecrypted += HandleServerToClientDecrypted; _messageSplitter = new MessageSplitter(); _messageSplitter.MessageReceived += HandleMessageReceived; OnNewConnection(server); } if (_serverToClient != null && _clientToServer == null && _serverToClient.Destination.Equals(connection.Source) && _serverToClient.Source.Equals(connection.Destination)) { _isNew.Remove(connection); _clientToServer = connection; } } if (!(connection == _clientToServer || connection == _serverToClient)) { return; } if (_decrypter == null) { return; } var dataArray = data.Array.Skip(data.Offset).Take(data.Count).ToArray(); if (connection == _clientToServer) { _decrypter.ClientToServer(dataArray); } else { _decrypter.ServerToClient(dataArray); } } }
public IrcHandler() { MessageSplitter = new MessageSplitter(); ChatConnection = new IrcConnection(); BackgroundWorker = new BackgroundWorker(); BackgroundWorker.WorkerReportsProgress = true; BackgroundWorker.WorkerSupportsCancellation = true; BackgroundWorker.DoWork += new DoWorkEventHandler(ChatConnection.GetMessages); BackgroundWorker.ProgressChanged += new ProgressChangedEventHandler(ReceiveMessage); }
private ITrackMessageProvider DownloaderStub() { var directory = AppDomain.CurrentDomain.BaseDirectory; var htmlSource = File.ReadAllText( directory + "/QSP/RouteFinding/Tracks/Nats/North Atlantic Tracks.html"); var msgs = new MessageSplitter(htmlSource).Split(); int westIndex = msgs[0].Direction == NatsDirection.West ? 0 : 1; int eastIndex = 1 - westIndex; var msg = new NatsMessage(msgs[westIndex], msgs[eastIndex]); return(new TrackMessageProvider(msg)); }
public void LastSplitPerfectLength() { var messageSplitter = new MessageSplitter(maxMessageLength: 25); const string message = "This message's last part fits perfectly without continuation dots"; Assert.That( messageSplitter.FitToMaxLength(message).ToArray(), Is.EqualTo(new[] { "This message's last ...", "part fits perfectly ...", "without continuation dots" })); }
public void SplitAtMaxIfNoSpace() { var messageSplitter = new MessageSplitter(maxMessageLength: 30); const string message = "This-message-gets-forcefully-split-because-it-has-no-spaces."; Assert.That( messageSplitter.FitToMaxLength(message).ToArray(), Is.EqualTo(new[] { "This-message-gets-forcefull...", "y-split-because-it-has-no-s...", "paces." })); }
public void SplitAtSpace() { var messageSplitter = new MessageSplitter(maxMessageLength: 30); const string message = "This message gets split into space-separated parts no longer than 30 chars."; Assert.That( messageSplitter.FitToMaxLength(message).ToArray(), Is.EqualTo(new[] { "This message gets split ...", "into space-separated parts ...", "no longer than 30 chars." })); }
/// <exception cref="Exception"></exception> public List <AusTrack> Parse() { allTracks = new List <AusTrack>(); var msgs = MessageSplitter.Split(allTxt); if (msgs.Count == 0) { throw new Exception("Failed to interpret AUSOTS message."); } foreach (var i in msgs) { TryAddTrk(i); } return(allTracks); }
public void OnlyEastboundExists() { string html = @"<i>- Last updated at 2016/02/02 15:05 GMT</i> <tr valign=>The following are active North Atlantic Tracks issued by Shanwick Center (EGGX) ...</th></tr> <font color=""#000099""> 021356 CZQXZQZX [Message E1] <font color=""#000099""> 021357 CZQXZQZX [Message E2] <font color=""#000099""> 021357 CZQXZQZX [Message E3] </td></tr></table>"; var msg = new MessageSplitter(html).Split(); Assert.AreEqual(1, msg.Count); var west = GetMsg(msg, NatsDirection.West); var east = GetMsg(msg, NatsDirection.East); Assert.IsTrue(west == null); Assert.IsTrue(east.Header == "The following are active North Atlantic Tracks issued by Shanwick Center (EGGX) ..."); Assert.IsTrue(east.LastUpdated == "Last updated at 2016/02/02 15:05 GMT"); Assert.IsTrue(east.Message == @"021356 CZQXZQZX [Message E1] 021357 CZQXZQZX [Message E2] 021357 CZQXZQZX [Message E3] "); }
// called from the tcp sniffer, so it needs to lock private void HandleTcpDataReceived(TcpConnection connection, byte[] data, int needToSkip) { { if (data.Length == 0) { if (needToSkip == 0 || !(connection == _clientToServer || connection == _serverToClient)) { return; } if (_decrypter == null) { return; } if (connection == _clientToServer) { _decrypter.Skip(MessageDirection.ClientToServer, needToSkip); } else { _decrypter.Skip(MessageDirection.ServerToClient, needToSkip); } return; } if (_isNew.ContainsKey(connection)) { if (_serversByIp.ContainsKey(connection.Source.Address.ToString()) && data.Take(4).SequenceEqual(new byte[] { 1, 0, 0, 0 })) { byte q; _isNew.TryRemove(connection, out q); var server = _serversByIp[connection.Source.Address.ToString()]; _serverToClient = connection; _clientToServer = null; ServerProxyOverhead = (int)connection.BytesReceived; _decrypter = new ConnectionDecrypter(server.Region); _decrypter.ClientToServerDecrypted += HandleClientToServerDecrypted; _decrypter.ServerToClientDecrypted += HandleServerToClientDecrypted; _messageSplitter = new MessageSplitter(); _messageSplitter.MessageReceived += HandleMessageReceived; _messageSplitter.Resync += OnResync; } if (_serverToClient != null && _clientToServer == null && _serverToClient.Destination.Equals(connection.Source) && _serverToClient.Source.Equals(connection.Destination)) { ClientProxyOverhead = (int)connection.BytesReceived; byte q; _isNew.TryRemove(connection, out q); _clientToServer = connection; var server = _serversByIp[connection.Destination.Address.ToString()]; OnNewConnection(server); } if (connection.BytesReceived > 0x10000) //if received more bytes but still not recognized - not interesting. { byte q; _isNew.TryRemove(connection, out q); connection.DataReceived -= HandleTcpDataReceived; connection.RemoveCallback(); } } if (!(connection == _clientToServer || connection == _serverToClient)) { return; } if (_decrypter == null) { return; } if (connection == _clientToServer) { _decrypter.ClientToServer(data, needToSkip); } else { _decrypter.ServerToClient(data, needToSkip); } } }
public void SplitMessageTest() { string str = @"20 JANUARY 2016 INTERNATIONAL FLEX TRACKS GROUP A: SOUTH EAST ASIA TDM TRK MY13 160119233001 1601192330 1601201400 JAMOR IBABI LEC CALAR OOD ARNTU LEESA 20S128E SANDY 15S122E ATMAP RTS/YMML ML H164 JAMOR RMK/AUSOTS GROUP A TDM TRK KS13 160120120001 1601201300 1601202300 SVC TRK KS13 NO TRACK - USE PUBLISHED FIXED ROUTES RMK/AUSOTS GROUP A INTERNATIONAL FLEX TRACKS GROUP B: MIDDLE EAST TDM TRK XB13 160120060001 1601200900 1601202200 DOGAR DAOVO PIBED CC 15S100E 20S106E JOLLY CAR NIPEM LST BOBET 30S132E 30S135E 30S140E IDODA AROLI CRANE RTS/CRANE Y94 PARRY Y195 GLENN BN YBBN RMK/AUSOTS GROUP B DOMESTIC FLEX TRACKS GROUP E TDM TRK BP13 160120093001 1601200930 1601201530 TAM CV PHONE 28S138E VIRUV 30S131E FRT NSM RTS/YBBN BN V179 TAM NSM Q10 HAMTN Q158 PH YPPH RMK/AUSOTS GROUP E "; var splitResult = MessageSplitter.Split(str); Assert.AreEqual(4, splitResult.Count); Assert.IsTrue(splitResult[0] == (@"TDM TRK MY13 160119233001 1601192330 1601201400 JAMOR IBABI LEC CALAR OOD ARNTU LEESA 20S128E SANDY 15S122E ATMAP RTS/YMML ML H164 JAMOR RMK/AUSOTS GROUP A")); Assert.IsTrue(splitResult[1] == (@"TDM TRK KS13 160120120001 1601201300 1601202300 SVC TRK KS13 NO TRACK - USE PUBLISHED FIXED ROUTES RMK/AUSOTS GROUP A")); Assert.IsTrue(splitResult[2] == (@"TDM TRK XB13 160120060001 1601200900 1601202200 DOGAR DAOVO PIBED CC 15S100E 20S106E JOLLY CAR NIPEM LST BOBET 30S132E 30S135E 30S140E IDODA AROLI CRANE RTS/CRANE Y94 PARRY Y195 GLENN BN YBBN RMK/AUSOTS GROUP B")); Assert.IsTrue(splitResult[3] == (@"TDM TRK BP13 160120093001 1601200930 1601201530 TAM CV PHONE 28S138E VIRUV 30S131E FRT NSM RTS/YBBN BN V179 TAM NSM Q10 HAMTN Q158 PH YPPH RMK/AUSOTS GROUP E")); }
// called from the tcp sniffer, so it needs to lock void HandleTcpDataReceived(TcpConnection connection, ArraySegment<byte> data) { lock (_eventLock) { if (data.Count == 0) return; if (_isNew.Contains(connection)) { _isNew.Remove(connection); if (_interestingIps.Contains(connection.Source.Address.ToString()) && data.Array.Skip(data.Offset).Take(4).SequenceEqual(new byte[] { 1, 0, 0, 0 })) { _serverToClient = connection; _clientToServer = null; _decrypter = new ConnectionDecrypter(); _decrypter.ClientToServerDecrypted += HandleClientToServerDecrypted; _decrypter.ServerToClientDecrypted += HandleServerToClientDecrypted; _messageSplitter = new MessageSplitter(); _messageSplitter.MessageReceived += HandleMessageReceived; OnNewConnection(); } if (_serverToClient != null && _clientToServer == null && (_serverToClient.Destination.Equals(connection.Source) && _serverToClient.Source.Equals(connection.Destination))) { _clientToServer = connection; } } if (!(connection == _clientToServer || connection == _serverToClient)) return; if (_decrypter == null) return; var dataArray = data.Array.Skip(data.Offset).Take(data.Count).ToArray(); if (connection == _clientToServer) _decrypter.ClientToServer(dataArray); else _decrypter.ServerToClient(dataArray); } }