Minor bug fixes. v1.3.1

This commit is contained in:
mort5161 2014-10-07 17:24:13 -07:00
parent edad246ab5
commit 4858870dbe
3 changed files with 30 additions and 20 deletions

View file

@ -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>

View file

@ -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

View file

@ -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)]