Çoklu sohbet pencereleri
Forum kuralları
Forum kurallarını okuyup, uyunuz!
Forum kurallarını okuyup, uyunuz!
Çoklu sohbet pencereleri
Merhaba arkadaşlar
Ben serverdan , client'a sohbet programı ile uğraşıyorum şu an. Birden çok client servera mesaj gönderiyor. bende bu server'dan clientlara mesaj gönderiyorum. Sorunum şu.
Bir client mesaj gönderiyor ve ben onun için bir form create ediyorum.. İkinci client mesaj gönderdi mi onun için de bir form create ediyorum.
Ancak bu sefer de birinciden gelen mesaj ikinci foruma geliyor. yani mesajlar karışıyor. bunun nasıl önüne geçebilirim...
Teşekkür ederim.
Ben serverdan , client'a sohbet programı ile uğraşıyorum şu an. Birden çok client servera mesaj gönderiyor. bende bu server'dan clientlara mesaj gönderiyorum. Sorunum şu.
Bir client mesaj gönderiyor ve ben onun için bir form create ediyorum.. İkinci client mesaj gönderdi mi onun için de bir form create ediyorum.
Ancak bu sefer de birinciden gelen mesaj ikinci foruma geliyor. yani mesajlar karışıyor. bunun nasıl önüne geçebilirim...
Teşekkür ederim.
http://www.bargem.info
Yaşıyorum..... İnadına değil yaptıklarım. Herşey istediğim için oluyor. İstediğim için türkü dinliyorum. İstediğim için çalışıyorum. İstediğim için yaşıyorum ve istediğim için seni seviyorum...
Yaşıyorum..... İnadına değil yaptıklarım. Herşey istediğim için oluyor. İstediğim için türkü dinliyorum. İstediğim için çalışıyorum. İstediğim için yaşıyorum ve istediğim için seni seviyorum...
Re: Çoklu sohbet pencereleri
Creeate ederken kullandığınız kodları ve create ettiiğiniz forumdaki mesaj ile ilgili kodları paylaşısanız daha sağlıklı cevap alabilirsiniz.
Re: Çoklu sohbet pencereleri
Şu an kodları burdan gönderme ihtimalim yok. Kodlar evdeki bilgisayarda. Sadece nasıl bir mantık kurulabileceği hakkında fikriniz var mı?
Teşekkür ederim.
Teşekkür ederim.
http://www.bargem.info
Yaşıyorum..... İnadına değil yaptıklarım. Herşey istediğim için oluyor. İstediğim için türkü dinliyorum. İstediğim için çalışıyorum. İstediğim için yaşıyorum ve istediğim için seni seviyorum...
Yaşıyorum..... İnadına değil yaptıklarım. Herşey istediğim için oluyor. İstediğim için türkü dinliyorum. İstediğim için çalışıyorum. İstediğim için yaşıyorum ve istediğim için seni seviyorum...
Re: Çoklu sohbet pencereleri
ilk aklıma gelen
create edilmiş formların içinde form ismi kullanmamaya özen gösterin.
örneğin create edilen formlar TFormChat tipinde ise ilk ismi de FormChat şeklinde belirlenir genelde.
siz bu form ile ilgi (formun içinde) işlem yaparken FormChat.Ozellik şeklinde değil de self.Ozellik şeklinde kullanmalısınız.
diğer türlü Yaptığınız işlem create edilen form ile ilgili değil FormChat ile ilgili olur (tabii FormChat var ise)
create edilmiş formların içinde form ismi kullanmamaya özen gösterin.
örneğin create edilen formlar TFormChat tipinde ise ilk ismi de FormChat şeklinde belirlenir genelde.
siz bu form ile ilgi (formun içinde) işlem yaparken FormChat.Ozellik şeklinde değil de self.Ozellik şeklinde kullanmalısınız.
diğer türlü Yaptığınız işlem create edilen form ile ilgili değil FormChat ile ilgili olur (tabii FormChat var ise)
Re: Çoklu sohbet pencereleri
Formu create ederken bir sorun yok zaten. Sorun mesajı gönderen client hangi forma gelecek. Mesaj pencerelerinin karışmaması için ne yapılması gerek. Daha detaylı anlatmam gerekirse,
1. Ahmet mesaj gönderdi. ("Mesajı Server aldı ve yeni bir form create edip yeni form üzerindeki memo ya gelen bilgiyi ekledi.
2. Mehmet mesaj gönderdi. ("Mesajı Server aldı ve yine yeni bir form create etti. O form üzerindeki memo'ya bilgiyi ekledi.
3. Tekrar ahmet mesaj gönderdi. ("Mesajı server aldı ancak bu sefer mehmet'in mesaj pencesine mesajı ekledi. ) Yani mesaj pencereleri karıştı. Ahmet kendi mesaj penceresini bulamadı. Asıl sorun bu.
Yani asıl sorun 3. sıradaki sorun.
Nasıl yapılabilir sizce..
1. Ahmet mesaj gönderdi. ("Mesajı Server aldı ve yeni bir form create edip yeni form üzerindeki memo ya gelen bilgiyi ekledi.
2. Mehmet mesaj gönderdi. ("Mesajı Server aldı ve yine yeni bir form create etti. O form üzerindeki memo'ya bilgiyi ekledi.
3. Tekrar ahmet mesaj gönderdi. ("Mesajı server aldı ancak bu sefer mehmet'in mesaj pencesine mesajı ekledi. ) Yani mesaj pencereleri karıştı. Ahmet kendi mesaj penceresini bulamadı. Asıl sorun bu.
Yani asıl sorun 3. sıradaki sorun.
Nasıl yapılabilir sizce..
http://www.bargem.info
Yaşıyorum..... İnadına değil yaptıklarım. Herşey istediğim için oluyor. İstediğim için türkü dinliyorum. İstediğim için çalışıyorum. İstediğim için yaşıyorum ve istediğim için seni seviyorum...
Yaşıyorum..... İnadına değil yaptıklarım. Herşey istediğim için oluyor. İstediğim için türkü dinliyorum. İstediğim için çalışıyorum. İstediğim için yaşıyorum ve istediğim için seni seviyorum...
Re: Çoklu sohbet pencereleri
mesaj gönderen clientlerle mesaj gösterdiğiniz form arasında mantıksal bir bağ kurmalısınız.
mesela ilk aklıma gelen şöyle bir yöntem;
a- 2 tane listeniz olur.1.sinde client ipleri 2.sinde mesaj formlarını tutarsınız.
b- client bağlandığında ipsini alır ip listesine eklersiniz mesaj formunu create eder form listesine eklersiniz
c- clientten bir mesaj geldiğinde ipsini listede ararsınız, bulduğunuz index o kullanıcının mesajlarının olduğu formun, form listesindeki indexi olur, form listesinde o indexli forma ulaşır mesajı yazarsınız
d- client bağlantıyı kestiğinde ipsini listede ararsınız, bulduğunuz index deki ip yi listeden çıkarırsınız. form listesinden ilgili formu free ettikten sonra formu listeden çıkarırsınız...
mesela ilk aklıma gelen şöyle bir yöntem;
a- 2 tane listeniz olur.1.sinde client ipleri 2.sinde mesaj formlarını tutarsınız.
b- client bağlandığında ipsini alır ip listesine eklersiniz mesaj formunu create eder form listesine eklersiniz
c- clientten bir mesaj geldiğinde ipsini listede ararsınız, bulduğunuz index o kullanıcının mesajlarının olduğu formun, form listesindeki indexi olur, form listesinde o indexli forma ulaşır mesajı yazarsınız
d- client bağlantıyı kestiğinde ipsini listede ararsınız, bulduğunuz index deki ip yi listeden çıkarırsınız. form listesinden ilgili formu free ettikten sonra formu listeden çıkarırsınız...
bazen yükselmek için önce dibi görmek gerekir...
forumda soru sormadan önce bakılmalı bence
daha fazlası için...
yürümeyi öğrenmeden koşmaya çalışanlar için, tökezleyip düşmek kaçınılmazdır...
forumda soru sormadan önce bakılmalı bence
daha fazlası için...
yürümeyi öğrenmeden koşmaya çalışanlar için, tökezleyip düşmek kaçınılmazdır...
Re: Çoklu sohbet pencereleri
server sessionid olusturuyor olmali. sessionid sine ulasip, pencerenin ismini veyahut penceredeki bir variableyi o sessionid ile isimlendirirsin. daha sonra mesaj geldiginde, o sessionid nin penceresini bulur, mesaji gösterirsin.
eger ki sessionid yok ise, mesaji gönderen kisinin ismine göre bi pencere acarsin, kisi tekrar mesaj gönderdiginde, ismini atadigin pencereyi bulur mesaji gösterirsin.
bu durumda, kullanici off olup, farkli bir kullanici ayni isim ile on oldugunda, o kullanicinin sana gönderdigi mesaj, eski kullanicinin penceresinde görülecek. bu problem olusturabilir.
ip ile bu isi ayarlamaya kalksan, ayni internetcafe den giris yapan tüm kullanicilarin mesajlari ayni pencerede gösterilir. bu daha büyük bir problem.
eger server kismini sen yaziyorsan, her kullaniciya bir sessionid atamasi yap. gönderilen mesaja da bu sessionid yi ilave et...
eger ki sessionid yok ise, mesaji gönderen kisinin ismine göre bi pencere acarsin, kisi tekrar mesaj gönderdiginde, ismini atadigin pencereyi bulur mesaji gösterirsin.
bu durumda, kullanici off olup, farkli bir kullanici ayni isim ile on oldugunda, o kullanicinin sana gönderdigi mesaj, eski kullanicinin penceresinde görülecek. bu problem olusturabilir.
ip ile bu isi ayarlamaya kalksan, ayni internetcafe den giris yapan tüm kullanicilarin mesajlari ayni pencerede gösterilir. bu daha büyük bir problem.
eger server kismini sen yaziyorsan, her kullaniciya bir sessionid atamasi yap. gönderilen mesaja da bu sessionid yi ilave et...
kıdemsiz üye
Re: Çoklu sohbet pencereleri
Arkadaşlar
Çoklu sohbet için findwindow kullanmak zorunda kaldım. Yani mesajı gönderenin ismini form create edildikten sonra başlığa yazdırdım. Aynı kullanıcı yeni mesaj attığında ise findwindow ile bu mesaj pencresi ile birlikte içerisindeki memo bileşenini de buldurarak gelen mesajı sendkey yöntemi ile pencereye yazdırdım. Bu işe yaradı ancak çok uzun bir yöntem oldu. Ayrıca formlar minimize edildiğinde de gelen mesajı memoya yazdırmak için de mecburen formu aktif etmek zorunda kalıyorum. Buda çok saçma oluyor tabiki. Gelen Mesajı Aynı forma yazdırmak için başka ve daha sağlıklı bir yöntem olduğu kesin ama nasıl? Başka fikirlere ihtiyacım var..
Kolay gelsin
Çoklu sohbet için findwindow kullanmak zorunda kaldım. Yani mesajı gönderenin ismini form create edildikten sonra başlığa yazdırdım. Aynı kullanıcı yeni mesaj attığında ise findwindow ile bu mesaj pencresi ile birlikte içerisindeki memo bileşenini de buldurarak gelen mesajı sendkey yöntemi ile pencereye yazdırdım. Bu işe yaradı ancak çok uzun bir yöntem oldu. Ayrıca formlar minimize edildiğinde de gelen mesajı memoya yazdırmak için de mecburen formu aktif etmek zorunda kalıyorum. Buda çok saçma oluyor tabiki. Gelen Mesajı Aynı forma yazdırmak için başka ve daha sağlıklı bir yöntem olduğu kesin ama nasıl? Başka fikirlere ihtiyacım var..
Kolay gelsin
http://www.bargem.info
Yaşıyorum..... İnadına değil yaptıklarım. Herşey istediğim için oluyor. İstediğim için türkü dinliyorum. İstediğim için çalışıyorum. İstediğim için yaşıyorum ve istediğim için seni seviyorum...
Yaşıyorum..... İnadına değil yaptıklarım. Herşey istediğim için oluyor. İstediğim için türkü dinliyorum. İstediğim için çalışıyorum. İstediğim için yaşıyorum ve istediğim için seni seviyorum...
Re: Çoklu sohbet pencereleri
her client, server'a baglandiginda otomatik olarak bir socket olusturulur.
TCollection kullan.
her Socket icin bir pencere olustur ve hem Socket'i hemde Form'u CollectionItem'e ata.
Daha sonra OnClientRead(Socket: TClientSocket) teki Socket parametresi ile CollectionItem icinde IndexOf seklinde arama yapip bulunan socket'e ayit olan Form'a ulasabilirsin.
neden böyle bir yöntem?
ikra ismi ile sohbet programina baglandigini düsünelim.
sende ikra ismi ile bir pencere olusturdun. daha sonra ben bu pencere ile sohbete basladim ve 5 dakika sonra herhangi bir sebepten dolayi prorgami kapattim. tam o sira, ikra ismi ile tesadüfen bir baskasi sohbet programina baglandi.
o zaman ne olacak?
bana ayit olan pencere üzerinden sohbete baslayacak ve sen o kisiyi hala ben sanip sohbetine devam edeceksin.
oysaki, yukarida bahsettigim sekilde yapacak olursan, socket'e göre bir pencere olusturursun. socket disconnect oldugunda Free edersin, itemi silersin, pencere de beraberinde kapanir, yada, pencereye ayit socket bulunamadigi icin, pencere inaktif olur ve üzerinde (bu kullanici su an bagli degil) seklinde belirti olur.
dahada gelistirilebilinir.
ilk etapta aklima gelenler bunlar.
baska bi soru olursa bu baslik altinda sor, firsat buldukca (acizane bilgim dahilinde) cevap vermeye calisirim.
Kod: Tümünü seç
OnClientConnect(Socket: TClientSocket)
her Socket icin bir pencere olustur ve hem Socket'i hemde Form'u CollectionItem'e ata.
Daha sonra OnClientRead(Socket: TClientSocket) teki Socket parametresi ile CollectionItem icinde IndexOf seklinde arama yapip bulunan socket'e ayit olan Form'a ulasabilirsin.
neden böyle bir yöntem?
ikra ismi ile sohbet programina baglandigini düsünelim.
sende ikra ismi ile bir pencere olusturdun. daha sonra ben bu pencere ile sohbete basladim ve 5 dakika sonra herhangi bir sebepten dolayi prorgami kapattim. tam o sira, ikra ismi ile tesadüfen bir baskasi sohbet programina baglandi.
o zaman ne olacak?
bana ayit olan pencere üzerinden sohbete baslayacak ve sen o kisiyi hala ben sanip sohbetine devam edeceksin.
oysaki, yukarida bahsettigim sekilde yapacak olursan, socket'e göre bir pencere olusturursun. socket disconnect oldugunda Free edersin, itemi silersin, pencere de beraberinde kapanir, yada, pencereye ayit socket bulunamadigi icin, pencere inaktif olur ve üzerinde (bu kullanici su an bagli degil) seklinde belirti olur.
dahada gelistirilebilinir.
ilk etapta aklima gelenler bunlar.
baska bi soru olursa bu baslik altinda sor, firsat buldukca (acizane bilgim dahilinde) cevap vermeye calisirim.
kıdemsiz üye
Re: Çoklu sohbet pencereleri
Tşk İkra. Bu sorunu tekrar yazdıktan yarım saat sonra,Yani 5 gün önce senin ne demek istediğini anladım. Ve findcomponent özelliğini kullanarak form içerisindeki memo bileşenini buldurup üzerine yazdırdım. Yani çok çok güzel oldu. Artık mesaj pencelerinde kesinlikle karışma yok. Artık Tam bir messenger gibi çalışıyor programım. Fikir için çok teşekkür ederim. Ayrıca free etmeden önce liste içerisinden formun adını sildiriyorum. yani Tam senin dediğin gibi oldu. Tekrar çok teşekkür ederim.
http://www.bargem.info
Yaşıyorum..... İnadına değil yaptıklarım. Herşey istediğim için oluyor. İstediğim için türkü dinliyorum. İstediğim için çalışıyorum. İstediğim için yaşıyorum ve istediğim için seni seviyorum...
Yaşıyorum..... İnadına değil yaptıklarım. Herşey istediğim için oluyor. İstediğim için türkü dinliyorum. İstediğim için çalışıyorum. İstediğim için yaşıyorum ve istediğim için seni seviyorum...
Re: Çoklu sohbet pencereleri
bana sanki hala yanlis bir yol takip ediyormussun gibi geldi.
bahsettigim yöntemi tam olarak yapmis olsan, findcomponent, findwindow kullanmana gerek kalmayacak.
ama sen böyle rahat ediyorsan, taktir senin tabiiki )
hayrli olsun. güle güle kullan.
bahsettigim yöntemi tam olarak yapmis olsan, findcomponent, findwindow kullanmana gerek kalmayacak.
ama sen böyle rahat ediyorsan, taktir senin tabiiki )
hayrli olsun. güle güle kullan.
kıdemsiz üye
Re: Çoklu sohbet pencereleri
aklima bisey takildi
simdi sen bir cok mesaj yazdin. cok hizli klavye kullaniyorsun.
tam o sira, bilgisayar veyahut programin kisa bi donma yapti.
ama sen bu donma esnasinda bi sekilde 10 cümle kurdun ve enter tusuna bastin.
hangi mesajin gidecek? : ))
yarismaci arkadaslarima bonuslu, jokerli basarilar dilerim )
simdi sen bir cok mesaj yazdin. cok hizli klavye kullaniyorsun.
tam o sira, bilgisayar veyahut programin kisa bi donma yapti.
ama sen bu donma esnasinda bi sekilde 10 cümle kurdun ve enter tusuna bastin.
hangi mesajin gidecek? : ))
yarismaci arkadaslarima bonuslu, jokerli basarilar dilerim )
kıdemsiz üye
Re: Çoklu sohbet pencereleri
Şu an programda 33 kişi var . Ve hepsi aynı yazışıyorlar. Program donsa mesajlar server'a düşmeyeceği için, mesajlar ulaşmayacak. Zaten non-blocked tipini kullanmıyorum. Blocking kullanıyorum. Bu yüzden önce havuzda toplanıyor.Blocking kullanıyorum. Thread en kesin çözüm bence.
http://www.bargem.info
Yaşıyorum..... İnadına değil yaptıklarım. Herşey istediğim için oluyor. İstediğim için türkü dinliyorum. İstediğim için çalışıyorum. İstediğim için yaşıyorum ve istediğim için seni seviyorum...
Yaşıyorum..... İnadına değil yaptıklarım. Herşey istediğim için oluyor. İstediğim için türkü dinliyorum. İstediğim için çalışıyorum. İstediğim için yaşıyorum ve istediğim için seni seviyorum...
Re: Çoklu sohbet pencereleri
ben bi ara deneme yapmistim, nedenini bilmiyorum 9970 kisi baglanabiliyor.
bence socket'in havuzuna güvenme.
kendin bi havuz olustur, daha sonra bu havuzdan verileri gönder.
gelen verileride yine havuzda topla, daha sonra isleme sok.
programi indirebilecegim bi yer var mi?
bende baglanayim bi.
bence socket'in havuzuna güvenme.
kendin bi havuz olustur, daha sonra bu havuzdan verileri gönder.
gelen verileride yine havuzda topla, daha sonra isleme sok.
programi indirebilecegim bi yer var mi?
bende baglanayim bi.
kıdemsiz üye