Çoklu sohbet pencereleri

Delphi'de kod yazma ile ilgili sorularınızı bu foruma yazabilirsiniz.
Cevapla
Delhici
Üye
Mesajlar: 176
Kayıt: 20 Eyl 2003 09:04

Çoklu sohbet pencereleri

Mesaj gönderen Delhici »

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.
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...
Kullanıcı avatarı
Lost Soul
Üye
Mesajlar: 1064
Kayıt: 01 Nis 2007 02:55
Konum: mekan ANKARA toprak ELAZIĞ
İletişim:

Re: Çoklu sohbet pencereleri

Mesaj gönderen Lost Soul »

Creeate ederken kullandığınız kodları ve create ettiiğiniz forumdaki mesaj ile ilgili kodları paylaşısanız daha sağlıklı cevap alabilirsiniz.
Delhici
Üye
Mesajlar: 176
Kayıt: 20 Eyl 2003 09:04

Re: Çoklu sohbet pencereleri

Mesaj gönderen Delhici »

Ş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.
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...
Kullanıcı avatarı
Lost Soul
Üye
Mesajlar: 1064
Kayıt: 01 Nis 2007 02:55
Konum: mekan ANKARA toprak ELAZIĞ
İletişim:

Re: Çoklu sohbet pencereleri

Mesaj gönderen Lost Soul »

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)
Delhici
Üye
Mesajlar: 176
Kayıt: 20 Eyl 2003 09:04

Re: Çoklu sohbet pencereleri

Mesaj gönderen Delhici »

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..
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...
Kullanıcı avatarı
unicorn64
Üye
Mesajlar: 919
Kayıt: 04 Nis 2006 08:56
Konum: yine yeniden Ankara ^_^

Re: Çoklu sohbet pencereleri

Mesaj gönderen unicorn64 »

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...
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...

Resim
ikra
Üye
Mesajlar: 900
Kayıt: 28 Nis 2005 01:26
Konum: Simdilik Topragin Üstü

Re: Çoklu sohbet pencereleri

Mesaj gönderen ikra »

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...
kıdemsiz üye
Delhici
Üye
Mesajlar: 176
Kayıt: 20 Eyl 2003 09:04

Re: Çoklu sohbet pencereleri

Mesaj gönderen Delhici »

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
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...
ikra
Üye
Mesajlar: 900
Kayıt: 28 Nis 2005 01:26
Konum: Simdilik Topragin Üstü

Re: Çoklu sohbet pencereleri

Mesaj gönderen ikra »

her client, server'a baglandiginda otomatik olarak bir socket olusturulur.

Kod: Tümünü seç

OnClientConnect(Socket: TClientSocket)
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.
kıdemsiz üye
Delhici
Üye
Mesajlar: 176
Kayıt: 20 Eyl 2003 09:04

Re: Çoklu sohbet pencereleri

Mesaj gönderen Delhici »

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...
ikra
Üye
Mesajlar: 900
Kayıt: 28 Nis 2005 01:26
Konum: Simdilik Topragin Üstü

Re: Çoklu sohbet pencereleri

Mesaj gönderen ikra »

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.
kıdemsiz üye
ikra
Üye
Mesajlar: 900
Kayıt: 28 Nis 2005 01:26
Konum: Simdilik Topragin Üstü

Re: Çoklu sohbet pencereleri

Mesaj gönderen ikra »

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 :))
kıdemsiz üye
Delhici
Üye
Mesajlar: 176
Kayıt: 20 Eyl 2003 09:04

Re: Çoklu sohbet pencereleri

Mesaj gönderen Delhici »

Ş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...
ikra
Üye
Mesajlar: 900
Kayıt: 28 Nis 2005 01:26
Konum: Simdilik Topragin Üstü

Re: Çoklu sohbet pencereleri

Mesaj gönderen ikra »

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.
kıdemsiz üye
Cevapla