Files
Articulate-Network/Server.cs
Ryan 87a569ee9e Created Manager Initializer & Started on Packet Serializing/Deserializing
Manager Initializer initializes all managers found inheriting the IManager interface
Packet Manager
- Created LoadPacketInfo which gets PropertyInfo using reflection, and caches the returned information
- Started on Send<Packet>(Packet)
- Started on serializing packets to stream
- Started on packet deserializer
Created PacketIgnore attribute to ignore properties in a packet when serializing
2021-12-06 15:18:29 +10:00

80 lines
1.9 KiB
C#

using Articulate_Network.Interfaces;
using Articulate_Network.Managers;
using System;
using System.Collections.Generic;
using System.Linq;
using System.Net;
using System.Net.Sockets;
using System.Reflection;
using System.Text;
using System.Threading.Tasks;
namespace Articulate_Network
{
public class Server
{
List<IManager> managers = new List<IManager>();
TcpListener tcp;
public Server()
{
InitializeManagers();
Console.WriteLine($"Initialized {managers.Count} manager{(managers.Count > 1 ? "s" : "")}");
}
public async Task<bool> Start(string ip, int port)
{
tcp = new TcpListener(IPAddress.Parse(ip), port);
bool connected = await Task.Run(async () =>
{
try
{
tcp.Start();
return true;
}
catch (Exception e)
{
Console.WriteLine(e.Message);
return false;
}
}
);
return false;
}
public async Task<bool> SendPacket(IPacket packet)
{
return false;
}
public void InitializeManagers()
{
var @interface = typeof(IManager);
foreach (Assembly assembly in AppDomain.CurrentDomain.GetAssemblies())
{
var managersFound = assembly.GetTypes().Where(t => @interface.IsAssignableFrom(t) && !t.IsAbstract);
foreach (var m in managersFound)
{
var manager = (IManager)Activator.CreateInstance(m);
manager.Initialize();
managers.Add(manager);
}
}
}
public T Get<T>()
{
return (T)managers.SingleOrDefault(t => typeof(T) == t.GetType());
}
}
}