ln.skyspot/hotspot/HotspotNetworkRuntime.cs

55 lines
1.5 KiB
C#

using System;
using ln.types.btree;
using ln.types.net;
using skyspot.session;
using skyspot.ip;
namespace skyspot.hotspot
{
public class HotspotNetworkRuntime
{
public HotspotNetwork HotspotNetwork { get; private set; }
MappingBTree<MAC, ClientSession> currentSessions = new MappingBTree<MAC, ClientSession>((ClientSession clientSession)=>clientSession.ClientMAC);
IPPool<ClientSession> pool = new IPPool<ClientSession>();
private HotspotNetworkRuntime()
{
}
public HotspotNetworkRuntime(HotspotNetwork hotspotNetwork)
{
HotspotNetwork = hotspotNetwork;
}
public ClientSession GetSession(MAC clientMac)
{
if (!currentSessions.ContainsKey(clientMac))
{
ClientSession newSession = new ClientSession(HotspotNetwork, clientMac);
FixupSession(newSession);
currentSessions.Add(newSession);
return newSession;
}
else
{
ClientSession clientSession = currentSessions[clientMac];
FixupSession(clientSession);
return clientSession; ;
}
}
public void RemoveSession(MAC clientMac)
{
currentSessions.RemoveKey(clientMac);
}
private void FixupSession(ClientSession clientSession)
{
if (clientSession.ClientIP == null)
{
// Todo: Implement IP allocation from pool
}
}
}
}