بسم الله الرحمن الرحيم
درس في انشاء برنامج خادم /عميل بالديركت بلاي 8
في البداية لن أطيل عليكم بالشرح والتدقيق والكلام الكثير في مثل هذه الدروس لان الهدف هنا ليس انشاء مقالة مختصة بالديركت بلاي او الحديث عنه وانما طريق مبسطة للاستفادة من هذا الكائن الذي يخشى الحديث عنه الكثير
قبل التطرق الى الدرس فقط يجب علينا ان نعرف شئ أساسي وهو أننا سنستعمل كائن من كائنات الديركت اكس ومن ثم فالأمثلة التي سنتطرق اليها يجب أن يضاف لها المرجع الخاص بالديركت اكس
1-إنشاء برنامج الخادم :
بعد اضافة المرجع الخاص بالديركت اكس كما سبق وان ذكرنا نبدا الآن بالتعريف بالمتغيرات التي سنستعملها في برنامجنا
نحتاج لانجاز برنامجنا 3 متغيرات أساسية هي
1- متغير أساسي وهو نسخة من الكائن ديركت اكس وليكن dx الذي سيكون له الدور الأساسي في انشاء بقية المتغيرات
2- متغير يقوم بعمل الخادم من النوع ديركت بلاي سرفر
3- متغير يقوم بانشاء عناوين الip ونوع البروتوكولات
Private dx As New DirectX8 Private dps As DirectPlay8Server Private dpa As DirectPlay8Address
وللاستفادة من الاحداث الخاصة بالديركت بلاي يجب اضافة السطر
Implements DirectPlay8Event
بعد اضافة السطر الأخير سنرى أن جميع الأحداث(17) الخاصة بالكائن DirectPlay8Event أصبحت متوفرة سنتطرق بالتدريج لكل حدث حين الحاجة لذكره المهم الآن يجب علينا ان تكون كل الأحداث مكتوبة الآن أي ال17 حدث موجودة في الكود بدون كتابة أي اجراء حتى لا يحصل خطا في تنفيذ البرنامج
بماننا استدعينا أحداث الكائن فيجب أن تتواجد كل هذه الاحداث المهم الطريقة بسيطة
فقط علينا الذهاب في صفحة الكود واختيار DirectPlay8Event فنجد جميع الأحداث الخاصة به ومن ثم نختار الواحد تلو الآخر حتى يصبح لدينا مايلي:
Private Sub DirectPlay8Event_AddRemovePlayerGroup(ByVal lMsgID As Long, ByVal lPlayerID As Long, ByVal lGroupID As Long, fRejectMsg As Boolean) End Sub Private Sub DirectPlay8Event_AppDesc(fRejectMsg As Boolean) End Sub Private Sub DirectPlay8Event_AsyncOpComplete(dpnotify As DxVBLibA.DPNMSG_ASYNC_OP_COMPLETE, fRejectMsg As Boolean) End Sub Private Sub DirectPlay8Event_ConnectComplete(dpnotify As DxVBLibA.DPNMSG_CONNECT_COMPLETE, fRejectMsg As Boolean) End Sub Private Sub DirectPlay8Event_CreateGroup(ByVal lGroupID As Long, ByVal lOwnerID As Long, fRejectMsg As Boolean) End Sub Private Sub DirectPlay8Event_CreatePlayer(ByVal lPlayerID As Long, fRejectMsg As Boolean) End Sub Private Sub DirectPlay8Event_DestroyGroup(ByVal lGroupID As Long, ByVal lReason As Long, fRejectMsg As Boolean) End Sub Private Sub DirectPlay8Event_DestroyPlayer(ByVal lPlayerID As Long, ByVal lReason As Long, fRejectMsg As Boolean) End Sub Private Sub DirectPlay8Event_EnumHostsQuery(dpnotify As DxVBLibA.DPNMSG_ENUM_HOSTS_QUERY, fRejectMsg As Boolean) End Sub Private Sub DirectPlay8Event_EnumHostsResponse(dpnotify As DxVBLibA.DPNMSG_ENUM_HOSTS_RESPONSE, fRejectMsg As Boolean) End Sub Private Sub DirectPlay8Event_HostMigrate(ByVal lNewHostID As Long, fRejectMsg As Boolean) End Sub Private Sub DirectPlay8Event_IndicateConnect(dpnotify As DxVBLibA.DPNMSG_INDICATE_CONNECT, fRejectMsg As Boolean) End Sub Private Sub DirectPlay8Event_IndicatedConnectAborted(fRejectMsg As Boolean) End Sub Private Sub DirectPlay8Event_InfoNotify(ByVal lMsgID As Long, ByVal lNotifyID As Long, fRejectMsg As Boolean) End Sub Private Sub DirectPlay8Event_Receive(dpnotify As DxVBLibA.DPNMSG_RECEIVE, fRejectMsg As Boolean) End Sub Private Sub DirectPlay8Event_SendComplete(dpnotify As DxVBLibA.DPNMSG_SEND_COMPLETE, fRejectMsg As Boolean) End Sub Private Sub DirectPlay8Event_TerminateSession(dpnotify As DxVBLibA.DPNMSG_TERMINATE_SESSION, fRejectMsg As Boolean) End Sub
الآن نذهب الى تهيئة الخادم :
في البداية يجب علينا تهيئة الكائنين dps و dpa بكتابة السطرين :
Set dps = dx.DirectPlayServerCreate Set dpa = dx.DirectPlayAddressCreate
في برامج من هذا النوع نحدد مواصفات أو معلومات التطبيق المنشئ سواء كان عميل او خادم
وهذه المعلومات تدرج في متغير من النوع DPN_APPLICATION_DESC
Dim appdesc As DPN_APPLICATION_DESC
With appdesc
.guidApplication = "{0AC3AAC4-5470-4cc0-ABBE-6EF0B614E52A}"
.lMaxPlayers = 1000
.SessionName = "Server"
.lFlags = DPNSESSION_CLIENT_SERVER
End Withالقيمة الأولى تحدد قيمة ال GUID globally unique identifier المستعمل في الريجيستري للتطبيق
الثانية طبعا الحدى الأقصى للمتصلين
الثالثة اسم الجلسة
نوع التطبيق أو الجلسة المنشئة
لكي يستطيع برنامجنا المنشئ بتلقي الأحداث الخاصة بالديركت بلاي يجب علينا ربطه بالفورم
dps.RegisterMessageHandler Me
الآن نقوم بتحديد نوع البروتوكول والمنفذ الذي سيتم الاستماع منه لانتظار الاتصال طبعا باستعمال dpa
dpa.SetSP DP8SP_TCPIP dpa.AddComponentLong DPN_KEY_PORT, 1090
الثابت DP8SP_TCPIP يرمز الى نوع البروتوكول الذي هو TCP/IP الذي سنستعمله
ثم نضيف قيمة البور تحت اسم DPN_KEY_PORT الذي هو في الحقيقة ="port"
الآن يمكن تشغيل الخادم :
dps.Host appdesc, dpa
لا تنسوا ايقاف عمل الخادم قبل انهاء البرنامج
If Not dps Is Nothing Then dps.UnRegisterMessageHandler If Not dps Is Nothing Then dps.Close Set dps = Nothing Set dpa = Nothing Set dx = Nothing
في الدرس القادم سنرى كيف ننشئ برنامج العميل ثم نعود لبرنامج الخادم لنرى كيف نستعمل أحداث الديركت بلاي
بالتوفيق للجميع

