28-12-2009, 10:12 AM
السلام عليكم ورحمة الله
اخوآني الكرام,
اوآجه مشكلة والله المستعان,,
في الرآبط ادنى السورس + الكلينت و السرفر على شكل Exe
اود ان اعمل شات عن طريق الإندي لعدة غرف,
يعني سيكون هناك 3 شات رووم و ان كتب احد المتصلين في الغرفة 1 فلن يقرآ المكتوب الّى المتصلين في الغرفة 1 وهكذا,,
الذي يحدث معي ان المشكلة في حالة اكثر من غرفة في نفس الوقت,,
جربوا البرنامج بارك الله لكم,,
1. شغّل السرفر,,
2. ادخل 2 كلينتس او اكثر الى الغرفة 1,, كل شئ تمام, و الكونتاكت ليست يتم تطويره عادي و بالشكل المطلوب وهذا ما ****ه,,
3. ادخل مع ثالث كلينت الى الغرفة 2 في اثنآء وجود 2 من الكلينتس متصلين في الغرفة 1,,
4. ادخل برآبع كلينت الى الغرفة 2 وهنا يحدث الخلل,,
فقط رآبع كلينت يتم عمل ارسآل ال كونتاكت ليست له,, وهذه هي المشكلة,, الوآجب في هذه الحآلة ان يتم عمل update لكل المتصلين في الغرفة 2,,
السبب اظن انني اعرف,,
استخدم هذا الكود,,
وأظن ان الخلل يحدث مع المقآرنة في هذا السطر,
كيف احلّ هذه المشكلة بارك الله لكم وجزآكم خيرا ,,
رآبط البرنآمج مع السورس هنا,
ملآحظة, يمكن للإخوة تحميل الملف,
وبدآخل سرفر و الكلينت جاهز على شكل .exe ,,
اشكر الأخ o15s19 من كل قلبي :laugh:
اخوآني الكرام,
اوآجه مشكلة والله المستعان,,
في الرآبط ادنى السورس + الكلينت و السرفر على شكل Exe
اود ان اعمل شات عن طريق الإندي لعدة غرف,
يعني سيكون هناك 3 شات رووم و ان كتب احد المتصلين في الغرفة 1 فلن يقرآ المكتوب الّى المتصلين في الغرفة 1 وهكذا,,
الذي يحدث معي ان المشكلة في حالة اكثر من غرفة في نفس الوقت,,
جربوا البرنامج بارك الله لكم,,
1. شغّل السرفر,,
2. ادخل 2 كلينتس او اكثر الى الغرفة 1,, كل شئ تمام, و الكونتاكت ليست يتم تطويره عادي و بالشكل المطلوب وهذا ما ****ه,,
3. ادخل مع ثالث كلينت الى الغرفة 2 في اثنآء وجود 2 من الكلينتس متصلين في الغرفة 1,,
4. ادخل برآبع كلينت الى الغرفة 2 وهنا يحدث الخلل,,
فقط رآبع كلينت يتم عمل ارسآل ال كونتاكت ليست له,, وهذه هي المشكلة,, الوآجب في هذه الحآلة ان يتم عمل update لكل المتصلين في الغرفة 2,,
السبب اظن انني اعرف,,
استخدم هذا الكود,,
PHP كود :
procedure TLogRoomSync.DoSynchronize;// Synchronization
var
StrItemNum, i, e, x : Integer;
Thread : Tlist;
ac : TidContext;
Str : Tstrings;
begin
if FRoomNumber = '0' then // Room 1
begin
form1.UserListBox_1.Items.Add(FUserName);
Str := Form1.UserListBox_1.Items;
ClientsIPList[0].Add(FUserIP); //// Client IP Add To StringList
ClientsPortList[0].Add(FUserPort);
StrItemNum := 0;
end
else if FRoomNumber = '1' then // Room 2
begin
form1.UserListBox_2.Items.Add(FUserName);
Str := Form1.UserListBox_2.Items;
ClientsIPList[1].Add(FUserIP);
ClientsPortList[1].Add(FUserPort);
StrItemNum := 1;
end
else if FRoomNumber = '2' then // Room 3
begin
form1.UserListBox_3.Items.Add(FUserName);
Str := Form1.UserListBox_3.Items;
ClientsIPList[2].Add(FUserIP);
ClientsPortList[2].Add(FUserPort);
StrItemNum := 2;
end;
Thread:= form1.idtcpServer1.Contexts.LockList;
I := ClientsIPList[StrItemNum].Count - 1; // Counts of Clients in specefik room
E := -1;
for x := 0 to Thread.Count - 1 do // ALL Connection With the IdTcpServer1
begin
e := e + 1;
if e >= i then e := i;// + 1
ac:= Thread[x];
If (ac.Binding.PeerIP = ClientsIPList[StrItemNum].Strings[e]) and (IntToStr(ac.Binding.PeerPort) = ClientsPortList[StrItemNum].Strings[e]) then
begin
//Showmessage('List Sent To: '+ ac.Binding.PeerIP+': '+ inttostr(ac.Binding.PeerPort));
ac.Connection.IOHandler.WriteLn('_CS_RoomUsersListSends');
ac.Connection.IOHandler.Write(Str, True,Tencoding.UTF8);
end;
end;
form1.idTcpServer1.Contexts.UnlockList;
end;
وأظن ان الخلل يحدث مع المقآرنة في هذا السطر,
PHP كود :
If (ac.Binding.PeerIP = ClientsIPList[StrItemNum].Strings[e]) and (IntToStr(ac.Binding.PeerPort) = ClientsPortList[StrItemNum].Strings[e]) then
كيف احلّ هذه المشكلة بارك الله لكم وجزآكم خيرا ,,
رآبط البرنآمج مع السورس هنا,
إقتباس :http://www.mediafire.com/?hnhnl2kzjno
ملآحظة, يمكن للإخوة تحميل الملف,
وبدآخل سرفر و الكلينت جاهز على شكل .exe ,,
اشكر الأخ o15s19 من كل قلبي :laugh:
(وآظن ان الخلل في الأعلى هو الخلل الأخير الذي اصادفه في مشروعي قبل ال Beta)