مشروع برنامج محادثة, باستخدام مكونات indy
#11
السلام عليكم

بالنسبة للشبكة: أرى استكشاف DirectPlay في DirectX فهي توفر الكثير من الجهد و الوقت.

بالنسبة لقاعدة البيانات: ما رأيكم بـ SQLite ، فهي خفيفة و محكمة، فإذا استدعى الأمر الترقية إلى قاعدة بياناتServer فأنا أفضل PostgreSQL ، فهي مصدر مفتوح حقيقي (لا تتبع لجهة ربحية معينة) ، و نعم، Skype و ***** من مستخدميها.

أيضا: أرى أن تتم برمجة ما يخص الاتصال و قواعد البيانات على شكل طبقات Layers بحيث أن منطقيات البرنامج تكون منفصلة عن استدعاءات قواعد البيانات أو الاتصال. وبذلك يمكن استبدال تقنية الاتصال أو نوع قواعد البيانات بسهولة.

أمر آخر: أرى أن تكون في البرنامج خاصية حقيقية ينفرد بها تميزه عن باقي البرامج الشبيهة.
بالتوفيق.
الرد
#12
وعليكم السلام ورحمة الله,

اهلا وسهلا بك اخي shagrouni, سعدت كثيرا بمشاركتك اخي الكريم

إقتباس :بالنسبة للشبكة: أرى استكشاف DirectPlay في DirectX فهي توفر الكثير من الجهد و الوقت.
جميل, قرأت عن هذا قليلا الآن, تبدوا هذه المكتبة بالغعل جميلة, لكنّها تعتمد على ال UDP
هل لهذا تأثير على البرنامج ؟ ربما الرسآئل لا تصل الى الشخص الذي ارس له رسآلة,؟

بعض الميّيزات, (من الموسوعة الحرّة)
كود :
* IDirectPlay8Server, which allows access to server functionality
    * IDirectPlay8Client, which allows access to client functionality
    * IDirectPlay8Peer, which allows access to peer-to-peer functionality
كود :
# Various network address translation (NAT) interfaces that make it easier for players behind routers to host games. Most players on broadband internet connections face this problem.
# Various voice communication interfaces known as DirectPlay Voice that make it easier to support audio communication and voice input in games.

سؤآل, هل تغني هذه المكتبة عن استخدام مكونات ال Indy مثلا ؟

إقتباس :بالنسبة لقاعدة البيانات: ما رأيكم بـ SQLite ، فهي خفيفة و محكمة، فإذا استدعى الأمر الترقية إلى قاعدة بياناتServer فأنا أفضل PostgreSQL ، فهي مصدر مفتوح حقيقي (لا تتبع لجهة ربحية معينة) ، و نعم، Skype و ***** من مستخدميها.

بالنسبة لقآعدة SQLite فليس لدي اية مانع (ليس لدي خبرة عنها ايضى), نعتمدها ان شاء الله ان لم يكن هناك اعترآض من احد الإخوة خلال ثلاث ايّام ان شاء الله,

إقتباس :أيضا: أرى أن تتم برمجة ما يخص الاتصال و قواعد البيانات على شكل طبقات Layers بحيث أن منطقيات البرنامج تكون منفصلة عن استدعاءات قواعد البيانات أو الاتصال. وبذلك يمكن استبدال تقنية الاتصال أو نوع قواعد البيانات بسهولة.
ماذا تقصد ب Layers بارك الله لك ؟

إقتباس :أمر آخر: أرى أن تكون في البرنامج خاصية حقيقية ينفرد بها تميزه عن باقي البرامج الشبيهة.
جميل, هل من اقترآح, سأحاول التفكير بهذا الشئ انا ايضى ان شاء الله,

بالتوفيق للجميع اخوآني الكرام,
فرّج همّ المهمومين يا الله
اللهم فك قيد اسرانا و اسرى المسلمين
الرد
#13
shagrouni كتب :بالنسبة للشبكة: أرى استكشاف DirectPlay في DirectX فهي توفر الكثير من الجهد و الوقت.


حسب ما ذكر
كود :
DirectPlay was traditionally one of the components of DirectX that received less attention, but for DirectX version 8 it received a major overhaul and became a relatively lightweight networking library. However, as part of Microsoft's unveiling of XNA in 2004, Microsoft revealed that DirectPlay would be deprecated in favor of Games for Windows - Live technology already available on Xbox and being ported for use on Windows PCs. DirectPlay will be supported in DirectX DLLs for the lifetime of Microsoft Windows XP, but from the autumn of 2007 [2] the headers and libraries — vital components if developers wanted to develop new programs that utilize the technology — were absent from DirectX SDK.

أن المكتبة في طور النسيان لأن MS تطور نوعا أخر من من المكاتب بعصر ال XBox و التي تحاول نقلها أي التقنية الجديدة لل XBox إلى PC

كما أن ال Indy يدعم كل هذه الأمور TCP و UDP و أغلب البروتوكولات و يمكن الاستفادة منها بشكل كامل كما أنها نوعا ما مدعومة عكس ال DirectX الغير مدعومة و التي على ما أظن توقفت بعام ال 2000 و قام عندها أحد الأشخاص باصدار UnDelphix

كود :
http://www.micrel.cz/Dx/

رأي أن نبقى على الاندي. ما رأيك أخي shagrouni و أخي AL-MOB4RM3G

بالنسبة لقاعدة البيانات أنا غير معترض طالما سأتعلم شيئا جديدا أما بالنسبة للبرمجة على شكل طبقات فإن شاء الله نتبعها
الرد
#14
مرحبا،

- DirectPlay تضمن لك وصول كل بايت إلى وجهته بالترتيب المطلوب دون مجهود إضافي من المبرمج.

- هل تغني هذه المكتبة عن استخدام مكونات ال Indy مثلا ؟
فيما يخص الإرسال و الاستقبال فهي تغني عن Indy ، و لكن Indy كما نعلم لديها الكثير
من الخدمات الفرعية و التي قد تجدها مفيدة، و لا يوجد ما يمنع من استخدام التقنيتين معا.

فيما يخص DirectX فأنا أجد أن مكونات DelphiX أو UnDelphix ممتازة وتعزل المبرمج
من صداع التعامل المباشر مع DirectX كما أنها تدعم دلفي 2010.

و عموما باستخدام مفهوم الطبقات و فصل أجزاء البرنامج إلى وحدات منفصلة حسب تخصصها؛
يمكن دعم أو تنفيذ أكثر من تقنية، بحيث تكون تقنية DX موجودة و كذلك Indy وغيرها في نفس الوقت،
و تكون من ضمن خيارات البرنامج (السيرفر).

- بالنسبة للدعم المستقبلي ل DirectPlay فهي نقطة جديرة بالاعتبار.

- المقصود بالطبقات Layers :
تقسيم منطقيات البرنامج إلى طبقات:
نورد الأمثلة التالية بأقل ما يمكن من تعقيد:
في الفورم التي تعرض قائمة الأسماء نحتاج لعرض اسم أحد المشتركين:

كود :
// Form frmChat
procedure TfrmChat.ShowContactDetail(UderId: string);
var
   sDisplayName: string;
begin
  sDisplayName := uChatManager.GetDisplayName(UsirId);
  lblDisplayName.Caption := sDisplayName;
  //...
  //....
end;

//Unit uChatManager
function GetDisplayName(UderId: string): string;
var
  sDisplayName: string;
begin
  sDisplayName := uChatDataManager.GetDisplayName(UsirId);
  if Trim(sDisplayName) <> '' then
    result := sDisplayName
  else
    result := '<Not Specified>';
end;

//Unit uChatDataManager
function GetDisplayName(UderId: string): string;
var
  sDisplayName: string;
  sSql: string;
  Q: TADOQuery;
begin
  sDisplayName := '';
  result := '';

  sSql := 'SELECT DisplayName FROM chatAccount WHERE Disply_Name = ' +
           QuotedStr(UserId);


  if ADO_USED then
  begin
    Q := TADOQuery.Create(nil);
    try
      Q.Connection := ADoConnection; //
      Q.SQL.Text := sSql;
      q.Open;
      if not q.FieldByName('DisplayName').IsNull then
        sDisplayName := q.FieldByName('DisplayName').AsString;
    finally
      q.Free;
    end;
  end;

  if SQLLITE_USED then
  begin
    //....
    //....
  end;

  result := sDisplayName;
end;
الفكرة هنا فيما يخص مفهوم الطبقات أن الفورم لا تعلم شيئا عن قاعدة البيانات، و لا عن منطقية البرنامج،
و لكنها تطلب المعلومة وتعرضها فقط. المعلومة تطلبها من الوحدة الخاصة بمنطقيات البرنامج و هي:
uChatManager الذي بدورها لا تعلم شيئا عن قاعدة البيانات ولكن تطلب المعلومة من وحدة uChatDataManager
التي لديها المعلومات الخاصة بقاعدة البيانات و جداولها و حقولها وأيضا تقرر ما نوع تقنية قواعد البيانات
التي يجب استخدامها وكيفية استدعائها (خشية التعقيد، هذه الوحدة أيضا يمكن فصلها).

فيما يخص الشبكة و الاتصال نأخذ المثال التالي:
تقوم الفورم مثلا بنشر Broadcast رسالة للجميع :

كود :
// Form frmChat
procedure TfrmChat.BroadCast(AText: string);
begin

  if uChatManager.BroadCast(SenderId, AText) then
    ShowMessage('OK');
  else
    ShowMessage('Not Ok');
end;


//Unit uChatManager
function BroadCast(SenderId: string; AText: string): boolean;
var
  sDisplayName: string;
begin
  result := false;
  if (Trim(AText) <> '') and (SenderId <> '') then
  begin
    sDisplayName := uChatDataManager.GetDisplayName(SenderId);
    AText := sDisplayName + ': ' + AText;

    result := uChatNetManager.BroadCast(AText) then
  end;
end;

//Unit uChatNetManager
function BroadCast(AText: string): boolean;
begin

  if DX_Used then
  begin
   result := uNetDirectPlay.BroadCast(AText);  // unit for handling DirectPlay calls
  end;

  if INDY_Used then
  begin
    result := uNetIndy.BroadCast(AText); // unit for handling Indy calls
  end;
end;
تقوم الفورم التي لا تعلم شيئا عن تقنيات الاتصال و الشبكة بإرسال طلب نشر رسالة من الوحدة uChatManager ،
فتقوم الوحدة بمراجعة الرسالة و إضافة اسم المرسل لها. ولإنها هي أيضا معزولة عن تقنية الاتصال
المستخدمة فإنها تقوم بالاستعانة بالوحدة uChatNetManager ، التي ستقرر أي نوع من تقنيات الاتصال
سيتم استخدامها، فإذا كان المعتمد هو DirectPlay ستقوم بتمرير الرسالة إلى الوحدة uNetDirectPlay
التي تعلم كيف تتعامل مع هذه التقنية و تمرر الرسالة لها لنشرها. أما إذا كان المعتمد فهو INDY
لإتها تحول الرسالة إلى الوحدة الخاصة بالنعامل مع تقنيات اندي وهي uNetIndy.

طريقة فصل البرنامج إلى طبقات متخصصة تتيح لنا مرونة و سيطرة أكبر، مثل حرية وسهولة تغيير
التقنيات المستخدمة دون المساس بباقي وحدات البرنامج التي ليس لها علاقة مباشرة بهذه التقنيات.

شكرا للجميع.
الرد
#15
جزآكم الله خيرا اخوآني الأحباب,

إقتباس :و لكن indy كما نعلم لديها الكثير
من الخدمات الفرعية و التي قد تجدها مفيدة، و لا يوجد ما يمنع من استخدام التقنيتين معا.
إقتباس :و عموما باستخدام مفهوم الطبقات و فصل أجزاء البرنامج إلى وحدات منفصلة حسب تخصصها؛
يمكن دعم أو تنفيذ أكثر من تقنية، بحيث تكون تقنية dx موجودة و كذلك indy وغيرها في نفس الوقت،

ان كانت مكتبة DirectPlay لا تغنينا نهآئيا عن ال Indy فبرأيّي انه لايس هناك سبب لتعامل معها ان لم يكن بها ميّزة تتيح لنا شئ لا يمكن عمله بالإندي, وهذا يعود لسببين,

1. تبسيط الأمور في الدرجة الؤلى, فمثلي انا مثلا و اظن الكثير من امثالي لا يوجيد اصلا التعامل حتّى مع الإندي, فإن اختلطت الأمور, وأصبحنا نتعامل مع ال DirectPlay و الإندي في آن واحد فهذا سيصعب على من اراد تعلم عمل شات مثلا ان يتعلمه,

2. الإندي اكثر شهرة والله اعلم, يعني بالنسبة للمسـآعدة ان احتآج احد الى ذلك فما عليه الّى ان يسئل, ام بخصوص ال DirectPlay فأظن انه من ارآد مسـاعدة فسيوآجه صعوبة في الإجآبة والله اعلم (مجرد فكرة شخصيّة, لم ابحث في النت عن هذا)

خلآصة الأمر, أميل الى رأي الأخ o15s19 ,,حاليّيا,
إقتباس :رأي أن نبقى على الاندي. ما رأيك أخي shagrouni و أخي AL-MOB4RM3G

ما قولك اخي shagrouni,, موآفق؟ معترض بشدّة ؟ :rtfm:
ان شاء الله سنكون متفقين بالإجمآع Smile

والسلام عليكم
فرّج همّ المهمومين يا الله
اللهم فك قيد اسرانا و اسرى المسلمين
الرد
#16
السلام عليكم،
سادتي
اقتراحي بخصوص استخدام DirectX مجرد اقتراح، و دعوة لاستكشاف المزيد. أنا وجدته مفيدا،
استخدمته في برنامج من النوع الثقيل (خادم/ و محطات تزيد على 40 محطة، و حجم تبادل البيانات كبير
من حيث العدد والكمية والتوالي) وكل حركة تتم في محطة تنعكس على باقي المحطات لحظيا تقريبا, باختصار
هو برنامج نمذجة ومحاكاة من نوع: MOFPS أي : multiplayer online first-person shooter
قبل ذلك كنت استخدم Indy في نفس البرنامج ثم تحولت إلى DirectX لأنه يوفر علي الكثير من التفاصيل.
والبرنامج الآن يدعم كلا الأسلوبين.

لكن أيضا توجد الناحية التعليمية: المشروع كما فهمت لأغراض التعلم، برمجة (TCP/IP)
و DirectX تعزلك عن معرفة ما يجري ولا تقدم للمبتدئ ما يفيده في تعلم هذا المجال لأنها تهتم بكل
التفاصيل، بالمقابل فإن Indy تعطي للمبتدئ فكرة أعمق، ولكن لا ننسى أيضا أنها تقوم بتغليف الكثير من
التفاصيل، ومن برمج ببروتوكولات TCP/IP مباشرة سوف يفهم ماذا أعني.

الخلاصة: إذا كانت الأغلبية مرتاحة لاستخدام Indy اللهم فبارك، المهم هو الحماس للتقنية التي تريد
استخدامها، و التحرك السريع لتنفيذها.

أحبكم في الله
خالد الشقروني.
الرد
#17
إقتباس :اقتراحي بخصوص استخدام DirectX مجرد اقتراح، و دعوة لاستكشاف المزيد. أنا وجدته مفيدا،
استخدمته في برنامج من النوع الثقيل (خادم/ و محطات تزيد على 40 محطة، و حجم تبادل البيانات كبير
من حيث العدد والكمية والتوالي) وكل حركة تتم في محطة تنعكس على باقي المحطات لحظيا تقريبا, باختصار
هو برنامج نمذجة ومحاكاة من نوع: MOFPS أي : multiplayer online first-person shooter
قبل ذلك كنت استخدم Indy في نفس البرنامج ثم تحولت إلى DirectX لأنه يوفر علي الكثير من التفاصيل.
والبرنامج الآن يدعم كلا الأسلوبين.

السلام عليكم من جديد,
بخصوص البرنآمج الذي برمجته اخي الشقروني, هل هو تجآري ام انه متوفر على النت ؟ (اود رؤيته وتجربته بارك الله لك ان كان متوفر على النتSmile )

إقتباس :الخلاصة: إذا كانت الأغلبية مرتاحة لاستخدام Indy اللهم فبارك، المهم هو الحماس للتقنية التي تريد
استخدامها، و التحرك السريع لتنفيذها.
جميل, إذن فأنت موآفق على هذا, على بركة الله إذن,

بخصوص قآعدة SQLite اي من البرآمج تفضل تستخدم اخي الشقروني ؟
البرنآمج الأصلي يبدوا على Terminal, ولكن هناك برآمج مثل,

SQLITE Expert, ويوجد هناك نسخة مجّآنيّة ايضى,,
كود :
http://www.sqliteexpert.com/download.html

هنآك ايضى, SQLite Database Browser, ايضى مجّآني,
كود :
http://sourceforge.net/projects/sqlitebrowser/files/

لكن ايّهما تفضّل؟ حتى يستخدم جميعنا نفس البرنامج (تسهل بعض الشئ لو استخدمنا نفس البرنامج لنتعامل مع القآعدة)

إقتباس :أحبكم في الله
احبك الذي احببتنا فيه اخي الحبيب,

باتوفيق,
فرّج همّ المهمومين يا الله
اللهم فك قيد اسرانا و اسرى المسلمين
الرد
#18
مرحبا،
أخي الكريم، ليس لدي خبرة في استخدام SqlLite و لكن من بعض الاختبارات
السابقة بخصوص دلفي فأنا ارتحت مع : A simple Delphi wrapper for Sqlite 3
كود :
http://www.itwriting.com/blog/?page_id=659
و يبدو من الموقع أن صاحبه لا يزال مواظب على رعايته.

أيضا هذه الصفحة تسرد مجموعة من المكونات الخاصة ب SQLite
كود :
http://stackoverflow.com/questions/850435/delphi-components-to-use-with-sqlite

بالنسبة لأدوات استعراض الجداول ومناولتها، فأي واحد يكون كافيا شرط أن يدعم العربية و اليونيكود.
SQLite Database Browser يبدو كافيا.

بالنسبة للبرنامج الذي أشرت إليه، فهو برنامج خاص لصالح إحدى الجهات

تحياتي
الرد
#19
السلام عليكم
كمساهمة Big Grin
DevArt UniDAC v.3.00.0.5
بالتوفيق Smile.
اللهم احقن دماء المسلمين، لا تنسوهم بالدعاء...
الرد
#20
kachwahed كتب :السلام عليكم
كمساهمة :d
devart unidac v.3.00.0.5
بالتوفيق Smile.

مساهمة في وقتها
بارك الله بك
الرد


التنقل السريع :


مستخدمين يتصفحوا هذا الموضوع: 1 ضيف