;Tutorial de SOCKETS EN MIRC
;por [CaMu]sX
;uso pblico - eScripting.com.ar

Para que sirven?

Los sockets de mIRC nos permiten establecer conexin con algun servidor, tanto web como irc.
Es una de las opciones que tiene ms posibilidades en mIRC, en cuanto a acciones de extraer datos, conectar un clon
extraer informacin, etc.

Cmo se usan?

Los sockets en mIRC se controlan, como la mayora de apartados en mIRC, mediante eventos, comandos e identificadores.
A continuacin os muestro una lista de los componentes de cada grupo

 Eventos (ON)

Sockopen : el evento sockopen es el que actua al abrir el socket, como su nombre indica, el cul se especifica on *:SOCKOPEN:NOMBREDELSOCK:
                 podemos detectar si hay error al abrir el socket mediante el evento $sockerr.
Sockread : el evento sockread nos permite visualizar datos cuando se est leyendo mediante el sock, el cul se especifica on *:SOCKREAD:NOMBREDELSOCK:
                 podemos guardar los datos en una variable, como por ejemplo /sockread %variable
Sockwrite : el evento sockwrite nos permite realizar una accin al escribir en el sock a una direccin determinada, el cul se especifica on *:SOCKWRITE:NOMBREDELSOCK:
                 podemos hacer un simple /echo, el cual indique que se esta escribiendo en el sock
Sockclose : el evento sockclose nos permite realizar una accin cuando el socket se cierre, el cul se especifica on *:SOCKCLOSE:NOMBREDELSOCK:
                 podemos usarlo, por ejemplo, para borrar las variables que nos puedan haber quedado de los otros eventos
Socklisten : el evento socklisten actua cuando alguien intenta conectar a un puerto, en el cul estamos "escuchando", se especifica on *:SOCKLISTEN:NOMBREDELSOCK:
                 si se quiere aceptar la conexin, se usa el comando sockaccept, por el contrario, se cerraria la conexin

 Comandos (/)

sockopen : el comando sockopen nos permite abrir un socket a una direccin web o ip. Sintaxis: /sockopen <nombre> <direccin> <puerto>. 
                 el parametro -d sirve para especificar una ip como direccin de lazo. En caso de especificar la ip de lazo, se utiliza el parametro -d, como primer parametro, y la ip de lazo como segundo.
sockrename : simple comando para renombrar un sock abierto. Sintaxis: /sockrename <nombre> <nombre nuevo>
sockaccept : Como ya dijimos en el evento socklisten, sirve para aceptar una conexin que intenta conectar al mismo puerto que nuestro sock.
                   Sintaxis: /sockaccept <sock>
socklisten : el comando socklisten sirve para "escuchar" en un puerto especfico y sus respectivas conexiones. 
                 el parametro -d, como en el caso del sockopen, sirve para especificar una ip como direccin de lazo.
                 Sintaxis: /socklisten <nombre> <direccion> <puerto> (en caso de especificar la ip de lazo, al igual que en el sockopen, se utiliza el parametro -d, como primer parametro, y la ip de lazo como segundo.)
sockread : el comando sockread nos permite leer la "data" del socket, y guardarlo en una variable especfica.
                Sintaxis: /sockread <variable o valor binario>
sockwrite : el comando sockwrite se utiliza para mandar lineas de orden/datos a una conexin de socket.
                Sintaxis: /sockwrite (parametro -t para texto) (parametro -n para saltar linea en caso de que sea texto, y no variable binaria) <sock> <texto, variable o dato binario>

Hay algunos identificadores mas como socklist o sockmark, pero se suelen usar en niveles mas avanzados.

 Identificadores ($)

$sock(NOMBRE) -> Se utiliza para especificar muchas propieadades de un socket, a continuacin os muestro las mas usadas.
  - .name -> nos devuelve el nombre dado a la conexin
  - .rcvd -> devuelve la cantidad de bytes que se han recivido de la conexin
  - .sent -> devuelve la cantidad de bytes enviados a la conexin
  - .type -> devuelve el tipo de socket (UDP o TCP) , en este tutorial solo se explican los sockets TCP, los sockets UDP son para niveles mas avanzados.
  - .ls -> devuelve los segundos que han pasado desde el ultimo envio del socket
  - .lr -> devuelve los segundos que han pasado desde el ultimo recibo del socket
  - .to -> devuelve los segundos que lleva abierto el socket
  - .saddr -> devuelve la direccin del ultimo recibo (solo sockets UDP)
  - .sport -> devuelve el puerto del ultimo recibo (solo sockets UDP)

Algunos parametros como .wserr y wsmsg solo se usan para los errores del winsock.

$portfree -> devuelve el identificador $true si el puerto esta libre.
$sockname -> devuelve el nombre otorgado a un socket para identificarlo. Se suele usar en eventos para conocer la conexin sin especificar el nombre.
$sockerr -> error que se devuelve si el socket se ha abierto, pero ha habido un fallo en el proceso.
$sockbr -> devuelve los bytes que se han leido en un comando sockread.


