diff --git a/src/JT808.DotNetty.Test/JT808DefaultChannelId.cs b/src/JT808.DotNetty.Test/JT808DefaultChannelId.cs new file mode 100644 index 0000000..be2c1bd --- /dev/null +++ b/src/JT808.DotNetty.Test/JT808DefaultChannelId.cs @@ -0,0 +1,28 @@ +using DotNetty.Transport.Channels; +using JT808.DotNetty.Metadata; +using System; +using System.Collections.Generic; +using System.Text; + +namespace JT808.DotNetty.Test +{ + public class JT808DefaultChannelId : IChannelId + { + private static readonly JT808AtomicCounter jT808AtomicCounter = new JT808AtomicCounter(); + + public string AsLongText() + { + return jT808AtomicCounter.Increment().ToString(); + } + + public string AsShortText() + { + return jT808AtomicCounter.Increment().ToString(); + } + + public int CompareTo(IChannelId other) + { + return 0; + } + } +} diff --git a/src/JT808.DotNetty.Test/JT808SessionManagerTest.cs b/src/JT808.DotNetty.Test/JT808SessionManagerTest.cs index 04a1e66..4eba9a1 100644 --- a/src/JT808.DotNetty.Test/JT808SessionManagerTest.cs +++ b/src/JT808.DotNetty.Test/JT808SessionManagerTest.cs @@ -11,18 +11,95 @@ namespace JT808.DotNetty.Test { JT808SessionManager jT808SessionManager = new JT808SessionManager(new LoggerFactory()); - [Fact] + string TerminalPhoneNo = "123456789123"; + + [Fact] public void Test1() { var channel = new EmbeddedChannel(); - jT808SessionManager.TryAddOrUpdateSession(new Metadata.JT808Session(channel, "123456789123")); + jT808SessionManager.TryAddOrUpdateSession(new Metadata.JT808Session(channel, TerminalPhoneNo)); } [Fact] public void Test2() { var channel = new EmbeddedChannel(); - jT808SessionManager.TryAddSession(new Metadata.JT808Session(channel, "123456789123")); + jT808SessionManager.TryAddSession(new Metadata.JT808Session(channel, TerminalPhoneNo)); + } + + [Fact] + public void Test3() + { + var channel = new EmbeddedChannel(); + jT808SessionManager.TryAddSession(new Metadata.JT808Session(channel, TerminalPhoneNo)); + jT808SessionManager.TryAddOrUpdateSession(new Metadata.JT808Session(channel, TerminalPhoneNo)); + var sessionInfo=jT808SessionManager.GetSessionByTerminalPhoneNo(TerminalPhoneNo); + Assert.Equal(TerminalPhoneNo, sessionInfo.TerminalPhoneNo); + Assert.Equal("embedded", sessionInfo.SessionID); + } + + [Fact] + public void Test4() + { + var channel = new EmbeddedChannel(); + jT808SessionManager.TryAddSession(new Metadata.JT808Session(channel, TerminalPhoneNo)); + jT808SessionManager.TryAddOrUpdateSession(new Metadata.JT808Session(channel, TerminalPhoneNo)); + jT808SessionManager.Heartbeat(TerminalPhoneNo); + } + + [Fact] + public void Test5() + { + var channel = new EmbeddedChannel(); + jT808SessionManager.TryAddSession(new Metadata.JT808Session(channel, TerminalPhoneNo)); + jT808SessionManager.TryAddOrUpdateSession(new Metadata.JT808Session(channel, TerminalPhoneNo)); + var sessionInfo = jT808SessionManager.GetSessionByID("embedded"); + Assert.Equal(TerminalPhoneNo, sessionInfo.TerminalPhoneNo); + Assert.Equal("embedded", sessionInfo.SessionID); + } + + + [Fact] + public void Test6() + { + var channel = new EmbeddedChannel(); + jT808SessionManager.TryAddSession(new Metadata.JT808Session(channel, TerminalPhoneNo)); + jT808SessionManager.TryAddOrUpdateSession(new Metadata.JT808Session(channel, TerminalPhoneNo)); + var sessionInfo = jT808SessionManager.RemoveSessionByID("embedded"); + Assert.Equal(TerminalPhoneNo, sessionInfo.TerminalPhoneNo); + Assert.Equal("embedded", sessionInfo.SessionID); + } + + + [Fact] + public void Test7() + { + var channel = new EmbeddedChannel(); + jT808SessionManager.TryAddSession(new Metadata.JT808Session(channel, TerminalPhoneNo)); + jT808SessionManager.TryAddOrUpdateSession(new Metadata.JT808Session(channel, TerminalPhoneNo)); + var sessionInfo = jT808SessionManager.RemoveSessionByTerminalPhoneNo(TerminalPhoneNo); + Assert.Equal(TerminalPhoneNo, sessionInfo.TerminalPhoneNo); + Assert.Equal("embedded", sessionInfo.SessionID); + } + + [Fact] + public void Test8() + { + var channel = new EmbeddedChannel(); + jT808SessionManager.TryAddSession(new Metadata.JT808Session(channel, TerminalPhoneNo)); + jT808SessionManager.TryAddOrUpdateSession(new Metadata.JT808Session(channel, TerminalPhoneNo)); + var realSessionInfos = jT808SessionManager.GetRealAll(); + var relevanceSessionInfos = jT808SessionManager.GetRelevanceAll(); + } + + [Fact] + public void Test9() + { + var channel = new EmbeddedChannel(); + jT808SessionManager.TryAddSession(new Metadata.JT808Session(channel, TerminalPhoneNo)); + jT808SessionManager.TryAddOrUpdateSession(new Metadata.JT808Session(channel, TerminalPhoneNo)); + var realSessionCount = jT808SessionManager.RealSessionCount; + var relevanceSessionCount = jT808SessionManager.RealSessionCount; } } } diff --git a/src/JT808.DotNetty.Test/SeedSession.cs b/src/JT808.DotNetty.Test/SeedSession.cs new file mode 100644 index 0000000..9acbb98 --- /dev/null +++ b/src/JT808.DotNetty.Test/SeedSession.cs @@ -0,0 +1,22 @@ +using DotNetty.Transport.Channels.Embedded; +using System; +using System.Collections.Generic; +using System.Text; +using Xunit; + +namespace JT808.DotNetty.Test +{ + public class SeedSession + { + public List embeddedChannels = new List(); + + [Fact] + public void Init() + { + for(var i = 0; i < 10; i++) + { + embeddedChannels.Add(new EmbeddedChannel(new JT808DefaultChannelId())); + } + } + } +} diff --git a/src/JT808.DotNetty/JT808SessionManager.cs b/src/JT808.DotNetty/JT808SessionManager.cs index eb829d9..cb0e6cd 100644 --- a/src/JT808.DotNetty/JT808SessionManager.cs +++ b/src/JT808.DotNetty/JT808SessionManager.cs @@ -189,9 +189,9 @@ namespace JT808.DotNetty return SessionIdDict.Select(s=>s.Value); } - public List GetRelevanceAll() + public IEnumerable GetRelevanceAll() { - return SessionIdDict.Join(TerminalPhoneNo_SessionId_Dict, m => m.Key, s => s.Value, (m, s) => m.Value).ToList(); + return SessionIdDict.Join(TerminalPhoneNo_SessionId_Dict, m => m.Key, s => s.Value, (m, s) => m.Value); } }