mirror of
https://github.com/dotMorten/NmeaParser.git
synced 2025-12-06 07:12:04 +01:00
Minor bug fixes. v1.3.1
This commit is contained in:
parent
edad246ab5
commit
4858870dbe
|
|
@ -1,7 +1,7 @@
|
|||
<?xml version="1.0"?>
|
||||
<package xmlns="http://schemas.microsoft.com/packaging/2010/07/nuspec.xsd">
|
||||
<metadata>
|
||||
<version>1.1.0</version>
|
||||
<version>1.3.1</version>
|
||||
<authors>Morten Nielsen</authors>
|
||||
<owners>Morten Nielsen</owners>
|
||||
<licenseUrl>http://opensource.org/licenses/ms-pl.html</licenseUrl>
|
||||
|
|
|
|||
|
|
@ -26,10 +26,10 @@ namespace NmeaParser
|
|||
{
|
||||
public abstract class NmeaDevice : IDisposable
|
||||
{
|
||||
private object lockObject = new object();
|
||||
private string message = "";
|
||||
private object m_lockObject = new object();
|
||||
private string m_message = "";
|
||||
private Stream m_stream;
|
||||
System.Threading.CancellationTokenSource tcs;
|
||||
System.Threading.CancellationTokenSource m_cts;
|
||||
TaskCompletionSource<bool> closeTask;
|
||||
|
||||
protected NmeaDevice()
|
||||
|
|
@ -37,7 +37,12 @@ namespace NmeaParser
|
|||
}
|
||||
public async Task OpenAsync()
|
||||
{
|
||||
tcs = new System.Threading.CancellationTokenSource();
|
||||
lock (m_lockObject)
|
||||
{
|
||||
if (IsOpen) return;
|
||||
IsOpen = true;
|
||||
}
|
||||
m_cts = new System.Threading.CancellationTokenSource();
|
||||
m_stream = await OpenStreamAsync();
|
||||
StartParser();
|
||||
MultiPartMessageCache.Clear();
|
||||
|
|
@ -45,7 +50,8 @@ namespace NmeaParser
|
|||
|
||||
private void StartParser()
|
||||
{
|
||||
var token = tcs.Token;
|
||||
var token = m_cts.Token;
|
||||
System.Diagnostics.Debug.WriteLine("Starting parser...");
|
||||
var _ = Task.Run(async () =>
|
||||
{
|
||||
var stream = m_stream;
|
||||
|
|
@ -74,17 +80,19 @@ namespace NmeaParser
|
|||
protected abstract Task<Stream> OpenStreamAsync();
|
||||
public async Task CloseAsync()
|
||||
{
|
||||
if (tcs != null)
|
||||
if (m_cts != null)
|
||||
{
|
||||
closeTask = new TaskCompletionSource<bool>();
|
||||
if (tcs != null)
|
||||
tcs.Cancel();
|
||||
tcs = null;
|
||||
if (m_cts != null)
|
||||
m_cts.Cancel();
|
||||
m_cts = null;
|
||||
}
|
||||
await closeTask.Task;
|
||||
await CloseStreamAsync(m_stream);
|
||||
MultiPartMessageCache.Clear();
|
||||
m_stream = null;
|
||||
lock (m_lockObject)
|
||||
IsOpen = false;
|
||||
}
|
||||
protected abstract Task CloseStreamAsync(Stream stream);
|
||||
|
||||
|
|
@ -92,15 +100,15 @@ namespace NmeaParser
|
|||
{
|
||||
var nmea = System.Text.Encoding.UTF8.GetString(data, 0, data.Length);
|
||||
string line = null;
|
||||
lock (lockObject)
|
||||
lock (m_lockObject)
|
||||
{
|
||||
message += nmea;
|
||||
m_message += nmea;
|
||||
|
||||
var lineEnd = message.IndexOf("\n");
|
||||
var lineEnd = m_message.IndexOf("\n");
|
||||
if (lineEnd > -1)
|
||||
{
|
||||
line = message.Substring(0, lineEnd).Trim();
|
||||
message = message.Substring(lineEnd + 1);
|
||||
line = m_message.Substring(0, lineEnd).Trim();
|
||||
m_message = m_message.Substring(lineEnd + 1);
|
||||
}
|
||||
}
|
||||
if (!string.IsNullOrEmpty(line))
|
||||
|
|
@ -170,15 +178,17 @@ namespace NmeaParser
|
|||
{
|
||||
if (m_stream != null)
|
||||
{
|
||||
if (tcs != null)
|
||||
if (m_cts != null)
|
||||
{
|
||||
tcs.Cancel();
|
||||
tcs = null;
|
||||
m_cts.Cancel();
|
||||
m_cts = null;
|
||||
}
|
||||
CloseStreamAsync(m_stream);
|
||||
m_stream = null;
|
||||
}
|
||||
}
|
||||
|
||||
public bool IsOpen { get; private set; }
|
||||
}
|
||||
|
||||
public sealed class NmeaMessageReceivedEventArgs : EventArgs
|
||||
|
|
|
|||
|
|
@ -24,6 +24,6 @@ using System.Runtime.InteropServices;
|
|||
// You can specify all the values or you can default the Build and Revision Numbers
|
||||
// by using the '*' as shown below:
|
||||
// [assembly: AssemblyVersion("1.0.*")]
|
||||
[assembly: AssemblyVersion("1.1.0.0")]
|
||||
[assembly: AssemblyFileVersion("1.1.0.0")]
|
||||
[assembly: AssemblyVersion("1.3.1.0")]
|
||||
[assembly: AssemblyFileVersion("1.3.1.0")]
|
||||
[assembly: ComVisible(false)]
|
||||
Loading…
Reference in a new issue