delphi4arab منتديات دلفي للعرب
ارسآل رسآئل الى اكثر من غرفة الى الكلينتس عن طريق الإندي ؟ - نسخة قابلة للطباعة

+- delphi4arab منتديات دلفي للعرب (https://delphi4arab.net/forum)
+-- قسم : منتديات دلفي للعرب التعليمية (https://delphi4arab.net/forum/forumdisplay.php?fid=3)
+--- قسم : سؤال و جواب حول دلفي (https://delphi4arab.net/forum/forumdisplay.php?fid=15)
+--- الموضوع : ارسآل رسآئل الى اكثر من غرفة الى الكلينتس عن طريق الإندي ؟ (/showthread.php?tid=1449)

الصفحات: 1 2 3


ارسآل رسآئل الى اكثر من غرفة الى الكلينتس عن طريق الإندي ؟ - AL-MOB4RM3G - 28-12-2009

o15s19 كتب :عليك نور
هذا ما قصدته

طيب جميل,
بارك الله لك على التوضيح,
والسلام عليكم


ارسآل رسآئل الى اكثر من غرفة الى الكلينتس عن طريق الإندي ؟ - kachwahed - 29-12-2009

لماذا FRoomNumber من نوع String (أو Char) أليس من المفروض أن يكون Integer؟


ارسآل رسآئل الى اكثر من غرفة الى الكلينتس عن طريق الإندي ؟ - mohfa - 29-12-2009

كذلك لدي ملاحظة , اليس من المستحسن ان يكون FRoomNumber من نوع Dynamic Array , الا اذا كنت تريد حصره في عدد معين .


ارسآل رسآئل الى اكثر من غرفة الى الكلينتس عن طريق الإندي ؟ - AL-MOB4RM3G - 29-12-2009

اولا, جزاك الله خيرا,
امّا فيما يخص FRoomNumber فهو الآن Integer بعد ان استخدمت ال Case الآن,,
كنت اضعه في String لأنه يرسل من الكلينت في حالة ال String وليس integer,
وبعدها لم اقم بتحويله الى Integer ,, لكن بما انك طرحت الموضوع,
هل التعامل مع ال Integer اسرع دآئما ؟ مثلا في حالتي انا, هل هناك فرق بين 1 String او integer ؟

بارك الله لكم


ارسآل رسآئل الى اكثر من غرفة الى الكلينتس عن طريق الإندي ؟ - mohfa - 29-12-2009

هل عدد الغرف محصور في عدد معين ؟


ارسآل رسآئل الى اكثر من غرفة الى الكلينتس عن طريق الإندي ؟ - AL-MOB4RM3G - 29-12-2009

اهلا بك اخ Mohfa :bye1:

نعم, الغرف في مشروعي حالياً ستكون ثلآثة فقط,,

بارك الله لك,


ارسآل رسآئل الى اكثر من غرفة الى الكلينتس عن طريق الإندي ؟ - AL-MOB4RM3G - 09-01-2010

إقتباس :ألاحظ أنك تستخدم ClientsIPList و ClientsPortList يعني قائمتين
طيب أنت فينك تستخدم قائمة واحدة تضم كلا الاثنين لاحظ هذا الكود
هنا لإضافة على القائمة مع ملاحظة أن ال '=' يمكنك استبدالها بشئ أخر و لكن هذه المتعارف عليها

PHP كود :
ClientsIPList[0].Add(FUserName + '=' + FUserPort) ; 

السلام عليكم من جديد,

طيب الا يمكن الإستفآدة من اكثر من = في القآئمة ؟ بارك الله لكم,

يعني مثلا شئ من هذا ؟ (ملآحظة, لم تنجح معي العمليّة في الأسفل)

كود :
List.Add(Edit1.Text+ '=' +Edit2.Text+ '=' +Edit3.Text);

يتم عمل حآجز وآحد فقط, يعني يحسب ال = الؤلى فقط,

وعند استدعآء الثآنية يتم استدعآء الثآنية و الثآلثة,

ما الحلّ بارك الله لكم,


ارسآل رسآئل الى اكثر من غرفة الى الكلينتس عن طريق الإندي ؟ - o15s19 - 12-01-2010

AL-MOB4RM3G كتب :السلام عليكم من جديد,

طيب الا يمكن الإستفآدة من اكثر من = في القآئمة ؟ بارك الله لكم,

يعني مثلا شئ من هذا ؟ (ملآحظة, لم تنجح معي العمليّة في الأسفل)

كود :
List.Add(Edit1.Text+ '=' +Edit2.Text+ '=' +Edit3.Text);

يتم عمل حآجز وآحد فقط, يعني يحسب ال = الؤلى فقط,

وعند استدعآء الثآنية يتم استدعآء الثآنية و الثآلثة,

ما الحلّ بارك الله لكم,

لا يمكن الاستفادة أكثر من ذلك من ال TStringList

الحل حسب معلوماتي المتوفرة و التجربة التي قمت بها هي كالتالي

نقوم بإنشاء كلاس يحوي الأشاء الأساسية التي نريدها

كود :
type TClient = Class // Create Class Of Client Public IP: String; Port: String; Name: String; Connected: Boolean; end;

ثم عند اتصال الكلاينت نقوم بتعريف متغير و ليكن CT

كود :
CT : TClient ;

و عند الاتصال نضيف معلومات الكلاينت التي نريدها

كود :
CT := TClient.Create ; CT.IP := AContext.Binding.PeerIP ; CT.Port := IntToStr(AContext.Binding.PeerPort) ; CT.Name := 'Something you want' ; CT.Connected := True ;

و عند الاستدعاء نقوم بالبحث و المطابقة حسب قيمة معينة مثل الأي بي (بحالتي) أو الاسم أو ال Mac Addres أو قيمة تحددها أنت

طبعا هنا ال Clients هي عبارة عن TList نقوم بتعريفها عند انشاء البرنامج و نقوم باضافة الكلاينت الجديد لها طبعا

كود :
Clients.Add(CT) ;

كود :
for I := 0 to Clients.Count - 1 do begin if TClient(Clients[i]).IP = AContext.Binding.PeerIP then begin //do something like TClient(Clients[i]).Connected := True ; end; end;

حلول أخرى لم اجرببها بعد Record و TThreadList . و جاري تطويرها (لأن هناك مشكلة تشغل بالي)


ارسآل رسآئل الى اكثر من غرفة الى الكلينتس عن طريق الإندي ؟ - AL-MOB4RM3G - 13-01-2010

جميل اخي الكريم, بارك الله لك,

إقتباس :حلول أخرى لم اجرببها بعد record و tthreadlist . و جاري تطويرها (لأن هناك مشكلة تشغل بالي)

طيب, بما انه تم انشآء مشروع محآدثة جمآعي, قد يكون من المستحسن لو ننآقش هذه الأمور ان شاء الله في ذلك الموضوع بدل من ان اسئلك عنه الآن هنا, Smile (لآن هذا السؤآل كما تعلمون, يخص ذلك المشروع )

على كل حال, اشكرك على جوآبك اخي
بارك الله لكم,


ارسآل رسآئل الى اكثر من غرفة الى الكلينتس عن طريق الإندي ؟ - AL-MOB4RM3G - 25-01-2010

اخوآني الكراك, فقط سؤآل,

فيما يخص الكود الذي وضعه الأخ عبد العزيز, فكرت فيه اليوم قليلا,
PHP كود :
I := ClientsIPList[StrItemNum].Count - 1;
for 
x := 0 to Thread.Count - 1 do
  
begin
  ac
:= Thread[x];
  for 
e:=0 to i do
  If (
ac.Binding.PeerIP = ClientsIPList[StrItemNum].Strings[e]) and (IntToStr(ac.Binding.PeerPort) = ClientsPortList[StrItemNum].Strings[e])  then
    begin
      ac
.Connection.IOHandler.WriteLn('_CS_RoomUsersListSends');
      
ac.Connection.IOHandler.Write(Str, True,Tencoding.UTF8);
    
end;
  
end; 

ان كان عدد المستخدمين كثير, لنفترض 100000 مستخدم, في ممثلا 1000 غرفة مثلا,
هل يتم استدعآء هذا الكود ليعمل لووب كلّما كتب احد المستخدمين في غرفة من الغرف ؟ الن يكون هذا عبئ كبير على السرفر ؟ وخصوصا انه هناك اكيد 2 من المستخدمين من يكتبان في نفس الوقت,

ام انه هناك طريقة لعمل Session او Room في السرفر بطريقة احسن, ؟

بارك الله لكم