1399-01-31 20:14 ارسال نوتیفیکیشن به سایر سیستم های شبکه
zahmah

 
سلام
در سی شارپ 2013 میخواهم پیامی را بصورت Popup به سایر سیستم ها بفرستم. چند مشکل در این زمینه دارم:

- بخواهیم پیام را به یک یا چند سیستم بفرستیم

- شاید سیستمی خاموش بود و بخواهیم بعد از روشن شدن، پیام در tray ویندوز آن سیستم ظاهر شود

- شاید کاربر پیام را ببیند و تا زمانیکه کاربر خواسته ما را عملی نکرده بخواهیم چند بار پیام را به صورت دوره ای به او نمایش بدهیم

بهترین کامپننت برای اینکار چیست ؟

اگر لطف کنین نمونه کدی در این زمینه بذارین ممنون میشم
1399-02-04 19:59
حاجی شریفی
مؤسس سایت
 
سلام
ایده های زیادی میتوان برای یک سیستم پیام رسانی به کاربران ارائه داد ...
ولی چیزی که شما با مشخصات تان میخواهید یک برنامه با معماری ساده Server/Client ای با Database مشترک است.
چیزی شبیه تلگرام

پیشنهاد اول
اگر دنبال برنامه آماده هستید و مثلا نیاز به یک جور تلگرام درون سازمانی دارید، میتوانید از پروتکل XMPP استفاده کنید
XMPP یک پروتکل قدیمی برای جابجایی پیام است وبرنامه های رایگان زیادی برای سرور و کلاینت و موبایل و... روی آن عرضه شده است.

نرم افزارهای سرور XMPP
به عنوان مثال در سرور شرکت میتوانید ejabberd یا Openfire را نصب کنید.

نرم افزارهای کلاینت ویندوز و اندروئید و... XMPP
به عنوان کلاینت هم میتوانید از نرم افزار عالی Thunderbird یا Spark و... استفاده کنید.

پیشنهاد دوم
چرا بجای XMPP از SMTP استفاده نکنیم؟
یعنی چرا از یک ایمیل ساده درون سازمانی استفاده نکنید ؟!
الان در شرکت خودتان با ایمیل درون سازمانی خودمان در ارتباط هستیم
خود ویندوز برنامه Mail دارد یا میتوانید از Thunderbird و Outlook و... استفاده کنید.
اغلب گوشی های موبایل هم برنامه مشابهی دارند یا میتوانید برنامه K9 را نصب کنید.
همین شرایطی هم که گفتید وجود دارد.
الان تا کسی ایمیلی برای دیگری میزد Popup ای ظاهر میشود و رسیدن پیام جدید را اطلاع میدهد
کافیست در سرور نرم افزار غولی مانند Exchange Server گرفته تا برنامه کوچکی مانند hMailServer را نصب کنید.

پیشنهاد سوم (برنامه نویسی)
اگر واقعا نیازتان به یک برنامه ساده است، پیشنهاد میکنم از همین موارد قبلی استفاده کنید.
خودتان بخواهید کدنویسی کنید، باید ماه های طولانی کد بزنید تا به نقطه این برنامه های موجود برسید.

اگر وارد مسیر کدنویسی شدید که یا باید با یکی App-Server و App-Client و Database کار را انجام دهید.
یعنی هر کلاینت پیام خود را به سرور میدهد و سرور در دیتابیس ذخیره میکند و هر کلاینت که آنلاین شد پیام مختص همان کلاینت را به او میدهد.

و یا اگر خیلی بخواهیم ساده اش کنیم ...

میتوانید یک App با یک Database مشترک در نظر بگیرید که App مدام به دیتابیس سرکشی کند ( یا از تکنیک هایی مانند SqlDependency استفاده کنید) و پیام های جدید را دریافت کند.
یعنی با قبول امنیت کمتر، برنامه سرور را حذف کرده و هر کلاینت مستقیم به دیتابیس متصل شود پیام جدید را در دیتابیس ذخیره و پیام های خودش را از دیتابیس بخواند.

نقل قول نوشته شده توسط: zahmah
بهترین کامپننت برای اینکار چیست ؟

چیزی که شما میخواهید یک برنامه است و برنامه کاملا آماده داریم که این کار را انجام دهد و نام برخی موارد را خدمت تان عرض کردم
ولی Component برای چه؟ مثلا چه کاری انجام دهد؟ یک پنجره باشد با یک Label روش که متنی را نشان دهد؟ یعنی ما نمیتوانیم یک Window/Form/Page درست کنیم با یک Label رویش؟
مانند این است که من بخواهم یک برنامه حسابداری بنویسم و دنبال Component بگردم ! چه کند؟ مثلا اعداد را جمع کند
بله! قطعا شما از Library ها و Component هایی استفاده خواهید کرد ولی موارد عمومی مانند EF یا Castle یا Newtonsoft و... و... که همیشه استفاده میکنیم.

بررسی بفرمائید، سوال جدیدی بود در خدمت هستم
روز و شب تان خوش
1399-02-05 02:19
zahmah

 
سلام
ببخشید من دنبال نوتیفیکیشن تحت شبکه هستم.
منظورم از کامپوننت هم چیزی شبیه ابزار نوتیفیکیشن DEV Component است منتها با کاربرد تحت شبکه.

شاید من بد عنوان کردم منظورم پیام رسانی نبود بلکه چیزی شبیه نوتیفیکیشن اندروید(در سی شارپ کار نکرده ام)
مثلا میخواهم اگر کاربری اطلاعاتی وارد دیتابیس کرد این تغییر بصورت نوتیفیکیشن به سایر کاربران اطلاع داده شود.
1399-02-05 05:17
حاجی شریفی
مؤسس سایت
 
با سلام مجدد
متوجه شدم چه میخواهید ولی همانطورکه عرض کردم چیزی که میخواهید یک برنامه/App است
Component برای چه؟ برای نشان دادن یک پنجره؟ یعنی شما بخواهید یک فرم سفید/زرد/سیاه کوچک با x , y کنار ساعت رایانه نشان دهید، برایش کامپونت می خواهید؟!
یعنی کار برنامه نویسی به جایی رسیده که یک پنجره کوچک کنار ساعت بخواهیم نشان دهیم باید کس دیگری برایم یک Component اش را بدهد؟!
مگر Notification چیزی غیر از یک Window خیلی ساده نهایت در کنار ساعت است؟

اگر بگویید نه فقط یک پنجره کنار ساعت نیست و چیز بیشتری میخواهم که در این صورت هم یعنی کل برنامه تان را میخواهید
برنامه شما با ویژگی هایی که عرض کردید، دیتابیس میخواهد، حداقل یک Table در SQLServer میخواهد، فیلدهایی شبیه ...
فرستنده
گیرنده
تاریخ
متن پیام
خوانده شده
و...

Component که خودش بیاید یک Table بسازد و در Table درج و حذف و اضافه و... کند و زمان بالا آمدن برنامه برود دیتابیس را چک کند و...و... دیگر Component نیست یک برنامه کامل است.
(( حداقل در یک بستر نیمه آماده یا Framework یا CMS این میتوانید تحت آن سکو/Platform یکجور AddIn یا Plugin یا Extension و... باشد تا کل کار را انجام دهد ولی باز هم شامل شما نمیشود ))

اگر نتوانستم منظورم را خوب برسانم ،پس خلاصه مطالب بالا را چنین عرض میکنم که خیر، من همچین Component ای نمیشناسم. ولی خودتان بخواهید انجامش دهیدواقعا سخت نیست.
موفق باشید.
1399-02-05 05:46
حاجی شریفی
مؤسس سایت
 
اگر کمک تان میکند ...
در متن اول هم نام SqlDependency را آوردم
یک کلاس است که تغییرات دیتابیس SQLServer روی یک جدول را اطلاع رسانی/Notification میکند.

مثلا
شما باید یک برنامه کوچک بنویسید که ConnectionString دیتابیس را داشته باشد.
فقط برای نشان دادن این Notification ها باید دوعدد فرم درست کنید.
و از کلاس فوق برای متوجه شدن Insert داخل جدول استفاده کند.
بعد که متوجه شد در رویداد OnChange بروید و سطرهای خوانده نشده را از جدول Select کنید و روی یک Window کوچک کنار ساعت نشان دهد.
حالا خواستید این Window کوچک با کمی رنگ و... کنار ساعت میتواند DevComponent باشد !
و این برنامه را باید در Startup هر رایانه قراردهید.
یک فرم هم برای Login باید درست کنید. ( که میتواند Save-Password و Auto-Login هم برای دفعات بعدی داشته باشد )
چون باید مشخص شود User جاری این برنامه کیست
تا فقط پیام های همان User را Select کنید و به او نشان دهید.

توضیحات بیشتر و نمونه کد
اگر کلاس فوق هم نبود، مثلا برای سایر دیتابیس ها هم میتوانید یک تایمر بگذارید که هر یک دقیقه برود و وجود پیام جدید را بررسی کند.