معرفی سیستم Tracer
معرفی :
سیستم Tracer .....
جزییات سیستم Tracer :
وابستگی ها :
معرفی :
سیستم Tracer .....
جزییات سیستم Tracer :
وابستگی ها :
معرفی :
سیستم Bridge با ایجاد ساختاری ، باعث ایجاد یک شبکه مجازی مش بر پایه پروتکل HTTP بین سرور و کلاینت می شود.
با استفاده از این کتابخانه سرور و کلاینت می توانند با یکدیگر ارتباط برقرار کرده و اطلاعات را رد و بدل نمایند.
اطلاعاتی از قبیل همسان سازی دیتابیس بین سرور و کلاینتها ، ارسال نوتیفیکیشن از سرور به کلاینت ، تشخیص کانکت یا دیسکانکت بودن کلاینت و ...
جزییات سیستم Bridge :
*Events : در حال حاضر شامل کلاسهای BridgeEvents و BridgeEventsConfigs می باشد.کلاس BridgeEvents با ارث بری از کلاس پایه BaseEventContainer از کتابخانه HookEvents ، تمامی Event های خود را معرفی کرده که این کلاس به عنوان تایپ جنریک در متد Config کلاس BridgeEventsConfigs مورد استفاده قرار گرفته و باعث رجیستر شده Event ها به سیستم در زمان اجرای نرم افزار می گردد.
*Services : این بخش به سه قسمت Server و Client و Shared تقسیم بنده شده است.در قسمت Shared تمامی کلاسهایی که در Server و Client به صورت مشترک استفاده میشوند ، قرار گرفته است ، در قسمت کلاینت کلاس ها و اینترفیس های مرتبط به Client ها قرار داده شده است و در قسمت Server کلاس ها و اینترفیس های مرتبط به Server ها و Client ها قرار داده شده است.
جزییات قسمت Server :
1- کلاس BridgeServerHub : این کلاس با ارث بری از سرویس BridgeServerHubBase کتابخانه Grpc ، متد های ایجاد شده در فایل Protobuf را پیاده سازی می کند.که از طریق این سرویس به ازای هر Client یک استریم باز شده و Client جدید اضافه میشود و درخواست از Server به Client ارسال میگردد.
2- کلاس BridgeClientHub : این کلاس با ارث بری از سرویس BridgeClientHubBase کتابخانه Grpc ، متد های ایجاد شده در فایل Protobuf را پیاده سازی می کند.که از طریق این سرویس هر Client بعد از ارسال درخواست یک Hubجدید برای او ایجاد شده و به Hub Handlers اضافه میگردد و شروع به ارسال Task های خود میکند.
3- کلاس BridgeServer : از مهمترین کلاس های سیستم Bridge می باشد که وظیفه Config کردن Server و Client ، افزودن Client جدید ، حذف یک Client ، گرفتن اطلاعات یک Client ، Start و Stop یک Server و ... به عهده دارد.
4- کلاس BridgeServerClient : وظیفه این کلاس پر کردن اطلاعات یک Client در زمان ایجاد نمونه از این کلاس و همچنین افزودن Client به ClientHubHandler و چک کردن اینکه Client به طور کامل به سرور کانکت شده است یا خیر و در نهایت دیسکانکت کردن یک Client و حذف تمام وابستگی های آن می باشد.
5- کلاس BridgeServerClientHubHandler : نظارت بر درخواست ها و پاسخ ها ، صف تسک های در انتظار اجرا و همچنین وضعیت کانتکت بودن Client ها را دارد ، که در صورت فراخوانی متد StartAsync پس از بررسی وضعیت کانکشن Clinet در صورت کانکت بودن تسک های آنرا از لیست تسک های در صف انتظار پاک کرده و آنرا اجرا میکنند . و در پایان آبجکت مورد نظر را Dispose می کند.در این کلاس متدی با نام SendRequestAsync وجود دارد که وظیفه ارسال درخواست از Server به Client را انجام میدهد.
6- کلاس BridgeServerConfigBuilder : این کلاس وظیفه مدیریت و نگه داری Device ها ، هاب های Server و Client ، کانفیگ کردن کلاس ServerPort کتابخانه Grpc ، افزودن و یا بروز رسانی هاب های Server و Client ها و همچنین ایجاد کانتینر از Event های کتابخانه Bridge با استفاده از کتابخانه HookEvents را دارد.
7- کلاس Bridge : یک کلاس استاتیک برای استفاده در تمام قسمت های نرم افزار که دارای وظایفی از قبیل راه اندازی سیستم Bridge (مانند ایجاد Container برای Event ها با استفاده از کتابخانه HookEvents) در زمان اجرای اولیه نرم افزار و گرفتن Server های در حال اجرا و همچنین افزودن یک Server به عنوان یک Server فعال و در حال اجرا.
وابستگی ها:
1- سیستم کش
public class BridgeCacheConfig : IFileCacheConfig
{
public static Type FileCacheType = typeof(BridgeCacheConfig);
public void Config(FileCacheConfigBuilder builder)
{
builder.RegisterCache<BridgeCacheConfig>().AddDependencies(HookEventsCacheConfig.FileCacheType);
}
} public class BridgeEvents : BaseEventContainer
{
public string EN_BeforeRunServer => "BeforeRunServer";
public string EN_AfterRunServer => "AfterInitServer";
public string EN_AfterStartServer => "AfterStartServer";
public string EN_AfterStopServer => "AfterStopServer";
public virtual void BeforeRunServer(IBridgeServerConfigBuilder serverConfig)
{
}
public virtual void AfterInitServer(IBridgeServer server)
{
}
public virtual void AfterStartServer(IBridgeServer server)
{
}
public virtual void AfterStopServer(IBridgeServer server)
{
}
} public class BridgeEventsConfigs : IHookEventsConfig
{
public void Config(HookEventsConfigBuilder builder)
{
builder.RegisterEvent<BridgeEvents>(config =>
{
config.Event(e => e.EN_AfterRunServer).SetExceptionType(EventExceptionType.Skip);
config.Event(e => e.EN_BeforeRunServer).SetExceptionType(EventExceptionType.Skip);
config.Event(e => e.EN_AfterStartServer).SetExceptionType(EventExceptionType.Skip);
});
}
}
معرفی :
سیستم HookEvents یک پروژه میان افزار است که این امکان را برای نرم افزار ایجاد میکند که بدون وابستگی و از هر جای پروژه ، یک متد یا Event را فراخوانی کنیم ، به این صورت که پروژه ها و کتابخانه های دیگر Event های خود را ابتدا از طریق کلاسها و متد های HookEvents به برنامه رجیستر میکنند و سپس از طریق کانتینرهای خود به Event ها دسترسی دارند.
برای استفاده میتوان از سایر قسمتهای پروژه به Event ها Hook کرد.
جزییات سیستم HookEvents :
1- کلاس BaseEventContainer : کتابخانه هایی که می خواهند Event های خود را رجیستر کنند ، ابتدا باید کلاسی که ترجیحا با Events به پایان میرسد را ساخته و سپس از کلاس BaseEventContainer ارث بری نمایند و Event های مورد نیاز خود را در این کلاس پیاده سازی نمایند. مانند :
public class BridgeEvents : BaseEventContainer
{
public string EN_BeforeRunServer => "BeforeRunServer";
public string EN_AfterRunServer => "AfterInitServer";
public string EN_AfterStartServer => "AfterStartServer";
public string EN_AfterStopServer => "AfterStopServer";
public virtual void BeforeRunServer(IBridgeServerConfigBuilder serverConfig)
{
}
public virtual void AfterInitServer(IBridgeServer server)
{
}
public virtual void AfterStartServer(IBridgeServer server)
{
}
public virtual void AfterStopServer(IBridgeServer server)
{
}
} public interface IHookEventsConfig
{
void Config(HookEventsConfigBuilder builder);
} public void Config(HookEventsConfigBuilder builder)
{
builder.RegisterEvent<BridgeEvents>(config =>
{
config.Event(e => e.EN_AfterRunServer).SetExceptionType(EventExceptionType.Skip);
});
} public class BridgeEventsConfigs : IHookEventsConfig
{
public void Config(HookEventsConfigBuilder builder)
{
builder.RegisterEvent<BridgeEvents>(config =>
{
config.Event(e => e.EN_AfterRunServer).SetExceptionType(EventExceptionType.Skip);
});
}
}HookEvents.Instance.RegisterEvent(
config =>
{
config.Event(e => e.EN_AfterRunServer).SetExceptionType(EventExceptionType.Skip);
}
);HookEvents.Instance.Init()public static void MyMethod()
{
Events = HookEvents.Instance.Container<BridgeEvents>();
//Fire AfterInitServer Event
Events.AfterInitServer(server);
}
سیستم کش نرم افزار OneShot وظیفه خواندن و ذخیره اطلاعات دریافتی در فایل ها را دارد.
بخش های سیستم کش :
1- اینترفیس IFileCacheConfig : در حال حاضر شامل یک متد به نام Config می باشد که کلاس FileCacheConfigBuilder به عنوان ورودی میگیرد.
2- کلاس FileCacheConfigBuilder : در حال حاضر شامل یک متد جنریک به نام RegisterCache می باشد که فایل هایی که نیاز به کش شدن را دارند توسط این متدبه سیستم مدیریت کش (FileCacheConfigHandler) رجیستر می شوند.
3- کلاس FileCacheConfigHandler : وظیفه افزودن وابستگی و یا وابستگی ها یک فایل کش را به عهده دارد.
4- کلاس FileCache : وظایف کلاس FileCache
1- بارگزاری اولیه در زمان بالا آمدن برنامه که شامل خواندن تمامی فایل های کش شده به اضافه وابستگی های آنها می باشد.
2- چک کردن اینکه کلاس مورد نظر نیازی به کش شدن دارد یا خیر.
3- پاک کردن فایل کش از لیت فایل های کش شده.
4- حذف وابستگی های یک فایل کش شده.
5- حذف کردن تمام فایل های کش شده.
6- ذخیره اطلاعات به صورت سریالایز را در فایل و یا خواندن فایل و دسریالایز کردن آن برای استفاده در برنامه.
طریقه استفاده از سیستم کش :
1- استفاده از
FileCache.Init(); public class BridgeCacheConfig : IFileCacheConfig
{
public static Type FileCacheType = typeof(BridgeCacheConfig);
public void Config(FileCacheConfigBuilder builder)
{
builder.RegisterCache<BridgeCacheConfig>().AddDependencies(HookEventsCacheConfig.FileCacheType);
}
}FileCache.GetAndSet<TCache, TResult>(Func<TResult> func, uint counter = 0)