Problemas al hacer un chat

22/07/2004 - 17:41 por nelson cancino | Informe spam
Hola necesito hacer un chat en Fox y tengo el sgte inconvenientes:

Tengo un servidor y varios clientes, cada cliente tiene su propio socket
que lo haga creando un objeto dentro del formulario e insertandolo dentro
de una tabla. Despues de conectarse un cliente, mando una orden se seteo
con el nombre de usuario elegido.

Boton de seteo: - cliente
vlMandar="999*SET"+ALLTRIM(ThisForm.Text2.value)
ThisForm.socket.object.sendData(vlMandar)
IF ThisForm.socket.object.state=7
this.Enabled=.f.
endif

servidor * accion del seteo
vlDatos=""
SELECT crSOCK001A
GO top
SCAN
if crSock001a.sock!=prSock
vlDatos=STR(crSock001a.usuid,3)+"*ALT"+crSock001a.USU
vlLen%5-LEN(vldatos)
vlDatos=vldatos+REPLICATE(" ",vlLen)
thisForm.&vlSockNew..socket.object.sendData(vlDatos)
ThisForm.edtMsg.value=ThisForm.edtMsg.value+vldatos+CHR(13)+CHR(10)
endif
SELECT crSock001a
ENDSCAN
el vlSockNew es el que mando el seteo y le paso la lista de todos los
usuarios conectados(indice y nick) con la operatoria ALT para que el
cliente lo reciba y lo de alta
*** cliente dataarrivar
LPARAMETERS bytestotal

Local vlDatos
vlDatos=""
store replicate(" ",255) to vlDatos
this.object.getData(@vlDatos,,255)

ThisForm.Edit1.value=ThisForm.Edit1.value+;
allTRIM(vldatos)
DO case
case SUBSTR(vldatos,5,3)="ALT"
*** alta de usuario
INSERT INTO crUsu001a
VALUES(.f.,SUBSTR(vldatos,8),VAL(SUBSTR(vldatos,1,3)))
GO top
ThisForm.Grid1.Refresh()
***

El problema que tengo es que el cliente solo lee el primer send, o sea si
tengo 1 y 2 clientes y se conecta 3, 3 recibe unicamente como el ALT del 1
y no de 2, como que el segundo alt queda en buffer.
Si alguien me puede dar una mano, se lo agradeceria.





-
PortalFox :: Nada corre como un zorr
http://www.portalfox.co

PortalFox - NNTP Forum Gatewa
 

Leer las respuestas

#1 Gustavo Jui
26/07/2004 - 18:48 | Informe spam
Hola Nelson,

Creo que tu problema esta en que estableces solo una conexion para todos los
clientes, siendo que deberias establecer conexiones independientes por cada
cliente.

Te podria ayudar mejor si mandas el código del Metodo ConnectionRequest del
Socket del servidor

Saludos
Gustavo Jui
Santiago de Chile

"nelson cancino" escribió en el mensaje
news:%
Hola necesito hacer un chat en Fox y tengo el sgte inconvenientes:

Tengo un servidor y varios clientes, cada cliente tiene su propio socket
que lo haga creando un objeto dentro del formulario e insertandolo dentro
de una tabla. Despues de conectarse un cliente, mando una orden se seteo
con el nombre de usuario elegido.

Boton de seteo: - cliente
vlMandar="999*SET"+ALLTRIM(ThisForm.Text2.value)
ThisForm.socket.object.sendData(vlMandar)
IF ThisForm.socket.object.state=7
this.Enabled=.f.
endif

servidor * accion del seteo
vlDatos=""
SELECT crSOCK001A
GO top
SCAN
if crSock001a.sock!=prSock
vlDatos=STR(crSock001a.usuid,3)+"*ALT"+crSock001a.USU
vlLen%5-LEN(vldatos)
vlDatos=vldatos+REPLICATE(" ",vlLen)
thisForm.&vlSockNew..socket.object.sendData(vlDatos)
ThisForm.edtMsg.value=ThisForm.edtMsg.value+vldatos+CHR(13)+CHR(10)
endif
SELECT crSock001a
ENDSCAN
el vlSockNew es el que mando el seteo y le paso la lista de todos los
usuarios conectados(indice y nick) con la operatoria ALT para que el
cliente lo reciba y lo de alta
*** cliente dataarrivar
LPARAMETERS bytestotal

Local vlDatos
vlDatos=""
store replicate(" ",255) to vlDatos
this.object.getData(@vlDatos,,255)

ThisForm.Edit1.value=ThisForm.Edit1.value+;
allTRIM(vldatos)
DO case
case SUBSTR(vldatos,5,3)="ALT"
*** alta de usuario
INSERT INTO crUsu001a
VALUES(.f.,SUBSTR(vldatos,8),VAL(SUBSTR(vldatos,1,3)))
GO top
ThisForm.Grid1.Refresh()
***

El problema que tengo es que el cliente solo lee el primer send, o sea si
tengo 1 y 2 clientes y se conecta 3, 3 recibe unicamente como el ALT del 1
y no de 2, como que el segundo alt queda en buffer.
Si alguien me puede dar una mano, se lo agradeceria.






PortalFox :: Nada corre como un zorro
http://www.portalfox.com

PortalFox - NNTP Forum Gateway

Preguntas similares