Pokémon Script Project Index du Forum

S’enregistrer | Rechercher | Connexion
 Information des admins 
Si vous désirez parler de PSP ou obtenir du soutient là dessus, merci d'aller faire un tour sur https://pokemonworkshop.com/forum/index.php Imbécile heureux

Web_File v2
Aller à la page: 1, 2  >
 
Poster un nouveau sujet   Répondre au sujet    Pokémon Script Project Index du Forum -> Game Making -> Ressources techniques -> Scripts
Sujet précédent :: Sujet suivant   
Auteur Message
Nuri Yuri
Administrateur
Administrateur


Inscrit le: 15 Oct 2008
Messages: 6 383
~Entity~
Localisation: Nancy
Non renseigné (Visible...)
ID Steam: Nuri_Yuri

MessagePosté le: Sam 3 Sep - 16:23 (2011)    Sujet du message: Web_File v2

Bonjour, je vais vous présenter une Amélioration de mon script Web_File.

Qu'est-ce qu'est Web_File ?

Web_File est un script permettant d'avoir une communication minimale avec le serveur Apaches (serveur web) pour interagir avec un script ou télécharger des fichiers par exemple. Grâce à ce script vous pouvez donc mettre à jour vos jeu en téléchargeant le fichier In-Game ou coder un script permettant de faire fonctionner votre jeu Online en utilisant un serveur Apache et des scripts PHP pour les communications. (Lorsque vous ne pouvez pas avoir de serveur dédié.)

Les scripts et fichiers

Web_File aura besoins d'une DLL du script Socket et d'une initialisation de certaines APIs, attention le script Socket fournis contient des méthodes modifié et des méthodes ajouté donc il peut être incompatible avec ses versions précédentes.

Code:

#===
#¤Module API
#---
#%Contient toute les constantes D'apis que les script
#%pourraient appeler.
#---
#© 14/05/2011 - Nuri Yuri (塗 ゆり)
#& 28/05/2011 - Nuri Yuri (塗 ゆり) : Ajout de WPPS
#===
module API
  begin
    #===
    #Initialisation des nom de DLL
    #===
    Yuri_DLL="Yuri_API.dll"
    #===
    #Initialisation des constante
    #%Déclarez toute vos API ICI !
    #===
    INI_WS=Win32API.new(Yuri_DLL,"init_winsock","","i")
    CLN_WS=Win32API.new(Yuri_DLL,"clean_winsock","","i")
    SCK_RD=Win32API.new(Yuri_DLL,"socket_read","pipipii","p")
    TCP_serv_online=Win32API.new(Yuri_DLL,"TCPSocket_server_online","pi","i")
    TCP_serv_exist=Win32API.new(Yuri_DLL,"TCPSocket_server_exist","p","i")
  rescue
    print("Erreur dans le script API :\n",$!.message,"\nIl se peut que ce soit un problème de chargement d'une API")
    exit(-1)
  end
end


Code:
#==========================================#
#¤Script de gestion de Socket              #
#------------------------------------------#
#©Ruby
#==========================================#
module Win32
  Rtl_Move_MEM=Win32API.new("kernel32", "RtlMoveMemory", "ppl", "")
  def copymem(len)
    buf = "\0" * len
    Rtl_Move_MEM.call(buf, self, len)
    buf
  end
end
class Numeric
  include Win32
end
class String
  include Win32
end

module Winsock
  DLL = "ws2_32"
  A_ACCEPT=Win32API.new(DLL, "accept", "ppl", "l")
  A_BLIND=Win32API.new(DLL, "bind", "ppl", "l")
  A_CLOSE_S=Win32API.new(DLL, "closesocket", "p", "l")
  A_CONNECT=Win32API.new(DLL, "connect", "ppl", "l")
  A_GHBADD=Win32API.new(DLL, "gethostbyaddr", "pll", "l")
  A_GHBNAME=Win32API.new(DLL, "gethostbyname", "p", "l")
  A_GHNAME=Win32API.new(DLL, "gethostname", "pl", "")
  A_GSBNAME=Win32API.new(DLL, "getservbyname", "pp", "p")
  A_HTONL=Win32API.new(DLL, "htonl", "l", "l")
  A_HTONS=Win32API.new(DLL, "htons", "l", "l")
  A_INET_ADD=Win32API.new(DLL, "inet_addr", "p", "l")
  A_INET_NTOA=Win32API.new(DLL, "inet_ntoa", "l", "p")
  A_LISTEN=Win32API.new(DLL, "listen", "pl", "l")
  A_RECV=Win32API.new(DLL, "recv", "ppll", "l")
  A_SELECT=Win32API.new(DLL, "select", "lpppp", "l")
  A_SEND=Win32API.new(DLL, "send", "ppll", "l")
  A_SSOPT=Win32API.new(DLL, "setsockopt", "pllpl", "l")
  A_SHUT_DOWN=Win32API.new(DLL, "shutdown", "pl", "l")
  A_SOCKET=Win32API.new(DLL, "socket", "lll", "l")
  A_LAST_ERR=Win32API.new(DLL, "WSAGetLastError", "", "l")
  def self.accept(*args)
    A_ACCEPT.call(*args)
  end
  def self.bind(*args)
    A_BLIND.call(*args)
  end
  def self.closesocket(*args)
    A_CLOSE_S.call(*args)
  end   
  def self.connect(*args)
    A_CONNECT.call(*args)
  end       
  def self.gethostbyaddr(*args)
    A_GHBADD.call(*args)
  end
  def self.gethostbyname(*args)
    A_GHBNAME.call(*args)
  end
  def self.gethostname(*args)
    A_GHNAME.call(*args)
  end
  def self.getservbyname(*args)
    A_GSBNAME.call(*args)
  end
  def self.htonl(*args)
    A_HTONL.call(*args)
  end
  def self.htons(*args)
    A_HTONS.call(*args)
  end
  def self.inet_addr(*args)
    A_INET_ADD.call(*args)
  end
  def self.inet_ntoa(*args)
    A_INET_NTOA.call(*args)
  end   
  def self.listen(*args)
    A_LISTEN.call(*args)
  end
  def self.recv(*args)
    A_RECV.call(*args)
  end
  def self.select(*args)
    A_SELECT.call(*args)
  end
  def self.send(*args)
    A_SEND.call(*args)
  end
  def self.setsockopt(*args)
    A_SSOPT.call(*args)
  end   
  def self.shutdown(*args)
    A_SHUT_DOWN.call(*args)
  end
  def self.socket(*args)
    A_SOCKET.call(*args)   
  end
  def self.WSAGetLastError(*args)
    A_LAST_ERR.call(*args)
  end
end
class Socket
  attr_accessor :recv_size
  API_WRITE=Win32API.new("msvcrt", "_write", "lpl", "l")
  AF_UNSPEC = 0   
  AF_UNIX = 1
  AF_INET = 2
  AF_IPX = 6
  AF_APPLETALK = 16
  PF_UNSPEC = 0   
  PF_UNIX = 1
  PF_INET = 2
  PF_IPX = 6
  PF_APPLETALK = 16
  SOCK_STREAM = 1
  SOCK_DGRAM = 2
  SOCK_RAW = 3
  SOCK_RDM = 4
  SOCK_SEQPACKET = 5
  IPPROTO_IP = 0
  IPPROTO_ICMP = 1
  IPPROTO_IGMP = 2
  IPPROTO_GGP = 3
  IPPROTO_TCP = 6
  IPPROTO_PUP = 12
  IPPROTO_UDP = 17
  IPPROTO_IDP = 22
  IPPROTO_ND = 77
  IPPROTO_RAW = 255
  IPPROTO_MAX = 256
  SOL_SOCKET = 65535
  SO_DEBUG = 1
  SO_REUSEADDR = 4
  SO_KEEPALIVE = 8
  SO_DONTROUTE = 16
  SO_BROADCAST = 32
  SO_LINGER = 128
  SO_OOBINLINE = 256
  SO_RCVLOWAT = 4100
  SO_SNDTIMEO = 4101
  SO_RCVTIMEO = 4102
  SO_ERROR = 4103
  SO_TYPE = 4104
  SO_SNDBUF = 4097
  SO_RCVBUF = 4098
  SO_SNDLOWAT = 4099
  TCP_NODELAY = 1
  MSG_OOB = 1
  MSG_PEEK = 2
  MSG_DONTROUTE = 4
  IP_OPTIONS = 1
  IP_DEFAULT_MULTICAST_LOOP = 1
  IP_DEFAULT_MULTICAST_TTL   = 1
  IP_MULTICAST_IF = 2
  IP_MULTICAST_TTL = 3
  IP_MULTICAST_LOOP = 4
  IP_ADD_MEMBERSHIP = 5
  IP_DROP_MEMBERSHIP = 6
  IP_TTL = 7
  IP_TOS = 8
  IP_MAX_MEMBERSHIPS = 20
  EAI_ADDRFAMILY = 1
  EAI_AGAIN = 2
  EAI_BADFLAGS = 3
  EAI_FAIL = 4
  EAI_FAMILY = 5
  EAI_MEMORY = 6
  EAI_NODATA = 7
  EAI_NONAME = 8
  EAI_SERVICE = 9
  EAI_SOCKTYPE = 10
  EAI_SYSTEM = 11
  EAI_BADHINTS = 12
  EAI_PROTOCOL = 13
  EAI_MAX = 14
  AI_PASSIVE = 1
  AI_CANONNAME = 2
  AI_NUMERICHOST = 4
  AI_MASK = 7
  AI_ALL = 256
  AI_V4MAPPED_CFG = 512
  AI_ADDRCONFIG = 1024
  AI_DEFAULT = 1536
  AI_V4MAPPED = 2048   
  attr_accessor :recv_size
  def self.getaddress(host)
    gethostbyname(host)[3].unpack("C4").join(".")
  end 
  def self.getservice(serv)
    case serv
    when Numeric
      return serv
    when String
      return getservbyname(serv)
    else
      raise "Please us an interger or string for services."
    end
  end
  def self.gethostbyname(name)
    raise SocketError::ENOASSOCHOST if (ptr = Winsock.gethostbyname(name)) == 0
    host = ptr.copymem(16).unpack("iissi")
    [host[0].copymem(64).split("\0")[0], [], host[2], host[4].copymem(4).unpack("l")[0].copymem(4)]
  end
  def self.gethostname
    buf = "\0" * 256
    Winsock.gethostname(buf, 256)
    buf.strip
  end
  def self.getservbyname(name)
    case name
    when /echo/i
      return 7
    when /daytime/i
      return 13
    when /ftp/i
      return 21
    when /telnet/i
      return 23
    when /smtp/i
      return 25
    when /time/i
      return 37
    when /http/i
      return 80
    when /pop/i
      return 110
    else
      raise "Service not recognized."
    end
  end 
  def self.sockaddr_in(port, host)
    begin
      [AF_INET, getservice(port)].pack("sn") + gethostbyname(host)[3] + [].pack("x8")
    rescue
      nil
    end
  end
  def self.open(*args)
    socket = new(*args)
    if block_given?
      begin
          yield socket
      ensure
          socket.close
      end
    end
    nil
  end 
  def initialize(domain, type, protocol)
    SocketError.check if (@fd = Winsock.socket(domain, type, protocol)) == -1
    @fd
  end
  def accept(flags = 0)
    buf = "\0" * 16
    SocketError.check if Winsock.accept(@fd, buf, flags) == -1
    buf
  end
  def bind(sockaddr)
    SocketError.check if (ret = Winsock.bind(@fd, sockaddr, sockaddr.size)) == -1
    ret
  end   
  def close
    SocketError.check if (ret = Winsock.closesocket(@fd)) == -1
    ret
  end 
  def connect(sockaddr)
    ret = Winsock.connect(@fd, sockaddr, sockaddr.size)
    SocketError.check if ret == -1
    ret
  end
  def listen(backlog)
    SocketError.check if (ret = Winsock.listen(@fd, backlog)) == -1
    ret
  end   
  def select(timeout)
    SocketError.check if (ret = Winsock.select(1, [1, @fd].pack("ll"), 0, 0, [timeout, timeout * 1000000].pack("ll"))) == -1
    ret
  end
  def ready?
    not select(0) == 0
  end   
  def read(len)
    buf = "\0" * len
    Win32API.new("msvcrt", "_read", "lpl", "l").call(@fd, buf, len)
    buf
  end 
  def recv(len, flags = 0)
    buf = "\0" * len
    SocketError.check if (@recv_size=Winsock.recv(@fd, buf, buf.size, flags)) == -1
    buf[0,@recv_size]
  end
  def send(data, flags = 0)
    SocketError.check if (ret = Winsock.send(@fd, data, data.size, flags)) == -1
    ret
  end
  alias write send
  def gets
    # Create buffer
    buffer = ""
    # Loop Until "end of line"
    cm=false
    while ((char = recv(1)) != "\n" and not cm)
      if char == "\r"
        cm=true
      else
        buffer += char
      end
    end
    # Return recieved data
    return buffer
  end
end
class TCPSocket < Socket 
  def self.open(*args)
    socket = new(*args)
    if block_given?
      begin
        yield socket
      ensure
        socket.close
      end
    end
    nil
  end 
  def initialize(host, port)
    super(AF_INET, SOCK_STREAM, IPPROTO_TCP)
    connect(Socket.sockaddr_in(port, host))
  end
  #Ajouts
  def self.server_online?(host, port)
    a=API::TCP_serv_online.call(host.to_s,port.to_i)
    if a==-1
      return nil
    elsif a==0
      return false
    elsif a==1
      return true
    end
  end
 
  def self.server_exist?(host)
    a=API::TCP_serv_exist.call(host.to_s)
    if a==0
      return false
    elsif a==1
      return true
    end
  end
end
class SocketError < StandardError
  ENOASSOCHOST = "getaddrinfo: no address associated with hostname."
  def self.check
    errno = Winsock.WSAGetLastError
    errno = Errno.constants.detect { |c| Errno.const_get(c).new.errno == errno }
    if errno != nil
      $socket_error=Errno.const_get(errno)
    end
  end
end


Code:
#==========================================#
#¤Script de communication minimal avec     #
# les serveurs Apache. (v 1.9)             #
#------------------------------------------#
#©Mangeuse de cannes - Modifié pour PSP v2              #
#==========================================#
class Web_File
  S_Nil=""
  S_Et="&"
  S_Eq="="
  S_RNRN="\r\n\r\n"
  S_RN="\r\n"
  S_dp=": "
  S_St="Status"
  S_sp=" "
  Err_OD="Erreur : Online désativé"
  Err_ITS="Erreur : impossible de trouver le Serveur !"
  Err_ICS="Erreur : impossible de se connecter au Serveur !"
  Err_NDT="Erreur : Aucune réponse..."
  H_Connection="Connection"
  H_XConnection="X-Cnection"
  H_size="Content-Length"
  V_Close="close"
  RE_Size=2048
  attr_accessor :url, :host, :data, :variables,:socket,:size,:dlsize,:closed,:header
  #===
  #§ Initialize
  #---
  #host : DNS du serveur
  #url : url de l'objet ex : "index.php", "/images/pic.png"
  #variables : Toutes les variables envoyé lors de la co
  #  ex : {"nombre" => "6", "string" => "chaine", "fichier" => "/index.php" ...}
  #===
  def initialize(host1,url1,variables={})
    @url=url1.to_s
    @host=host1.to_s
    @data=S_Nil
    @variables=variables
    @header={}
    @socket=false
    @size=0
    @dlsize=0
    @closed=true #Si ça été fermé.
  end
  #===
  #§ Lancement
  #===
  def run(post=true)
    unless $online
      print(Err_OD)
      return -1
    end
    #Ouverture de la soccket...
    @socket=TCPSocket.new(@host,80)
    #Création du data de réception
    @data=""
    #Création du buffer d'envois
    unless post
      send_buf="GET /#{@url}#{make_var(true)} HTTP/1.1\r\nHost: #{@host}\r\nConnection: Close\r\n\r\n"
    else
      post=make_var
      send_buf="POST /#{@url} HTTP/1.1\r\nHost: #{@host}\r\nConnection: Close\r\nContent-type: application/x-www-form-urlencoded; charset=utf-8\r\nContent-Length: #{post.size}\r\n\r\n#{post}"
    end
    @closed=false
    #Envois de la requette.
    @socket.send(send_buf)
    #Récupération des infos...
    tmp_data=@socket.recv(RE_Size*2)
    if tmp_data==S_Nil or !tmp_data
      print(Err_NDT)
      return 3
    end
    end_header=tmp_data.index(S_RNRN)+4
    get_header(tmp_data[0,end_header-4])
    @data << tmp_data[end_header,tmp_data.size-end_header]
    #Verification de la taille
    unless @header[H_size]
      @size=@data.size+1
      @dlsize=@size
    else
      @size=@header[H_size].to_i
      @header[H_size]=@size  #Conversion
      @dlsize=@data.size
    end
    if @dlsize >= @size
      @closed=true
      @socket.close
      return 4
    end
    return 0
  end
  #===
  #§ Mise à jour du DL
  #===
  def update(autoclose=true)
    #Reception
    tmp_data=@socket.recv(RE_Size)
    #Si data vide (considéré comme socket fermé)
    if tmp_data==S_Nil or !tmp_data
      if autoclose
        @closed=true
        @socket.close
      end
      return 3
    end
    @dlsize+=tmp_data.size #Mise à jour de la taille DL
    @data << tmp_data  #Ajout du data
    #Verification de la taille si >= fermeture
    if @dlsize >= @size
      @closed=true
      @socket.close
      return 2
    end
    return 0
  end
  #===
  #§ Get header
  #% Capture toute les données envoyé dans les header.
  #===
  def get_header(header_str)
    @header.clear
    header_arr=header_str.split(S_RN)
    #Verification de la première requette
    st=header_arr[0].split(S_sp)
    @header[S_St]=st[2].to_s
    @header[0]=st[1].to_i
    #Traitement du reste
    for i in 1...header_arr.length
      arr=header_arr[i].split(S_dp)
      @header[arr[0].to_s]=arr[1].to_s
    end
  end
  #===
  #§Encodage des données pour le serveur
  #% L'encodage est peut être incomplet
  #===
  def get_to_httpget(var)
    var.gsub("%","%25").gsub("$","%24").gsub("+","%2B").gsub(",","%2C").gsub("\"","%22").gsub("<","%3C").gsub(">","%3E").gsub("{","%7B").gsub("}","%7D").gsub("|","%7C").gsub("\\","%5C").gsub("^","%5E").gsub("~","%7E").gsub("[","%5B").gsub("]","%5D").gsub("`","%60").gsub(" ","%20")
  end
  def post_to_httppost(var)
    var.gsub!("%","%25") 
    var.gsub!("+","%2B") 
    var.gsub!(" ", "+") 
    var.gsub!("!", "%21") 
    var.gsub!("\"", "%22") 
    var.gsub!("#", "%23") 
    var.gsub!("$", "%24") 
    var.gsub!("&", "%26") 
    var.gsub!("'", "%27") 
    var.gsub!("(", "%28") 
    var.gsub!(")", "%29") 
    var.gsub!("*", "%2A") 
    var.gsub!(",", "%2C") 
    var.gsub!("/", "%2F") 
    var.gsub!(":", "%3A") 
    var.gsub!(";", "%3B") 
    var.gsub!("<", "%3C") 
    var.gsub!("=", "%3D") 
    var.gsub!(">", "%3E") 
    var.gsub!("?", "%3F") 
    var.gsub!("@", "%40") 
    var.gsub!("[", "%5B") 
    var.gsub!("\\", "%5C") 
    var.gsub!("]", "%5D") 
    var.gsub!("^", "%5E") 
    var.gsub!("`", "%60") 
    var.gsub!("{", "%7B") 
    var.gsub!("|", "%7C") 
    var.gsub!("}", "%7D") 
    var.gsub!("~", "%7E") 
    var.gsub!("€", "%80") 
    var.gsub!("", "%81") 
    var.gsub!("‚", "%82") 
    var.gsub!("„", "%84") 
    var.gsub!("…", "%85") 
    var.gsub!("†", "%86") 
    var.gsub!("‡", "%87") 
    var.gsub!("ˆ", "%88") 
    var.gsub!("‰", "%89") 
    var.gsub!("Š", "%8A") 
    var.gsub!("‹", "%8B") 
    var.gsub!("Œ", "%8C") 
    var.gsub!("Ž", "%8E") 
    var.gsub!("‘", "%91") 
    var.gsub!("’", "%92") 
    var.gsub!("“", "%93") 
    var.gsub!("”", "%94") 
    var.gsub!("•", "%95") 
    var.gsub!("–", "%96") 
    var.gsub!("—", "%97") 
    var.gsub!("˜", "%98") 
    var.gsub!("™", "%99") 
    var.gsub!("š", "%9A") 
    var.gsub!("›", "%9B") 
    var.gsub!("œ", "%9C") 
    var.gsub!("ž", "%9E") 
    var.gsub!("Ÿ", "%9F") 
    var.gsub!("¡", "%A1") 
    var.gsub!("¢", "%A2") 
    var.gsub!("£", "%A3") 
    var.gsub!("¤", "%A4") 
    var.gsub!("¥", "%A5") 
    var.gsub!("¦", "%A6") 
    var.gsub!("§", "%A7") 
    var.gsub!("¨", "%A8") 
    var.gsub!("©", "%A9") 
    var.gsub!("ª", "%AA") 
    var.gsub!("«", "%AB") 
    var.gsub!("¬", "%AC") 
    var.gsub!("­", "%AD") 
    var.gsub!("®", "%AE") 
    var.gsub!("¯", "%AF") 
    var.gsub!("°", "%B0") 
    var.gsub!("±", "%B1") 
    var.gsub!("²", "%B2") 
    var.gsub!("³", "%B3") 
    var.gsub!("´", "%B4") 
    var.gsub!("µ", "%B5") 
    var.gsub!("¶", "%B6") 
    var.gsub!("·", "%B7") 
    var.gsub!("¸", "%B8") 
    var.gsub!("¹", "%B9") 
    var.gsub!("º", "%BA") 
    var.gsub!("»", "%BB") 
    var.gsub!("¼", "%BC") 
    var.gsub!("½", "%BD") 
    var.gsub!("¾", "%BE") 
    var.gsub!("¿", "%BF") 
    var.gsub!("À", "%C0") 
    var.gsub!("Á", "%C1") 
    var.gsub!("Â", "%C2") 
    var.gsub!("Ã", "%C3") 
    var.gsub!("Ä", "%C4") 
    var.gsub!("Å", "%C5") 
    var.gsub!("Æ", "%C6") 
    var.gsub!("Ç", "%C7") 
    var.gsub!("È", "%C8") 
    var.gsub!("É", "%C9") 
    var.gsub!("Ê", "%CA") 
    var.gsub!("Ë", "%CB") 
    var.gsub!("Ì", "%CC") 
    var.gsub!("Í", "%CD") 
    var.gsub!("Î", "%CE") 
    var.gsub!("Ï", "%CF") 
    var.gsub!("Ð", "%D0") 
    var.gsub!("Ñ", "%D1") 
    var.gsub!("Ò", "%D2") 
    var.gsub!("Ó", "%D3") 
    var.gsub!("Ô", "%D4") 
    var.gsub!("Õ", "%D5") 
    var.gsub!("Ö", "%D6") 
    var.gsub!("×", "%D7") 
    var.gsub!("Ø", "%D8") 
    var.gsub!("Ù", "%D9") 
    var.gsub!("Ú", "%DA") 
    var.gsub!("Û", "%DB") 
    var.gsub!("Ü", "%DC") 
    var.gsub!("Ý", "%DD") 
    var.gsub!("Þ", "%DE") 
    var.gsub!("ß", "%DF") 
    var.gsub!("à", "%E0") 
    var.gsub!("á", "%E1") 
    var.gsub!("â", "%E2") 
    var.gsub!("ã", "%E3") 
    var.gsub!("ä", "%E4") 
    var.gsub!("å", "%E5") 
    var.gsub!("æ", "%E6") 
    var.gsub!("ç", "%E7") 
    var.gsub!("è", "%E8") 
    var.gsub!("ê", "%EA") 
    var.gsub!("ë", "%EB") 
    var.gsub!("ì", "%EC") 
    var.gsub!("í", "%ED") 
    var.gsub!("î", "%EE") 
    var.gsub!("ï", "%EF") 
    var.gsub!("ð", "%F0") 
    var.gsub!("ñ", "%F1") 
    var.gsub!("ò", "%F2") 
    var.gsub!("ó", "%F3") 
    var.gsub!("ô", "%F4") 
    var.gsub!("õ", "%F5") 
    var.gsub!("ö", "%F6") 
    var.gsub!("÷", "%F7") 
    var.gsub!("ø", "%F8") 
    var.gsub!("ù", "%F9") 
    var.gsub!("ú", "%FA") 
    var.gsub!("û", "%FB") 
    var.gsub!("ü", "%FC") 
    var.gsub!("ý", "%FD") 
    var.gsub!("þ", "%FE") 
    var
  end
  #===
  #§création de la requete contenant les variables
  #===
  def make_var(get=false)
    return S_Nil if @variables.keys.size==0
    #Création du data
    if get
      data="?"
    else
      data=""
    end
    #Si c'est la première variable
    first=true
    #Ajout des variables dans le data.
    for i in @variables.keys
      unless first
        data << S_Et
      else
        first=false
      end
      data << i.to_s << S_Eq << (get ? get_to_httpget(@variables[i].to_s) : post_to_httppost(@variables[i].to_s))
    end
    return data
  end
end

Lien vers la DLL :
Megaupload : Lien (25 secondes si vous avez un compte MU, dans le cas contraire 45 secondes.)

Utilisation

Pour créer un objet Web_File il faut faire :
Code:
variable = Web_File.new("nom du serveur","url du fichier",{"variables" => "valeur"})
Le nom du serveur est l'host google.com par exemple, il ne faut surtout pas mettre de HTTP:// dedans.
L'url est l'url du fichier avec lequel Web_File va faire les transactions, le "/" début n'est pas à mettre.
Les variables sont optionnelles, c'est les variables qui seront envoyé au serveur lorsque vous lancerais une transaction.
Vous pouvez donc initialiser de cette façon :
Code:
variable = Web_File.new("nom du serveur","url du fichier")

Pour lancer une transaction il suffit de faire :
Code:
variable.run(bool)
Le bool doit être true pour faire un transaction POST et false pour une transaction GET, par défauts c'est de transaction POST.
Cette méthode retourne les valeurs suivantes :
-1 : Variable $online désactivé donc communication interdites.
3 : Le serveur n'a pas répondu ou a envoyé un buffer vide.
4 : Le téléchargement du fichier est fini ou le serveur n'a pas fourni d'informations sur la taille... Dans ce cas la socket est fermé.
0 : Tout s'est bien passé, il faudra finir de télécharger le fichier.

Pour continuer le téléchargement il faut faire :
Code:
variable.update

Cette méthode retourne :
3 : Dernier buffer Vide, socket fermé si le paramètre été true (paramètre par défauts.)
2 : Téléchargement fini.
0 : Tout s'est bien passé, téléchargement à finir.

Cette classe a des variables modifiables qui sont :
Code:
variable.url #Url du fichier de communication
variable.host #Nom du serveur
variable.data #Data complet reçus.
variable.variables #Hash des variables qui sont envoyé, si vous voulez en changer ex variable.variables["user"]="Yuri"
variable.size #Taille du fichier donné par le serveur.
variable.dlsize #Taille téléchargé du fichier <= variables.data.size
variable.closed #Si la socket est fermé donc qu'un téléchargement est fini ou qu'il n'y en a pas encore eu
variable.header #Header donné par le serveur.


Conseil

Lorsque vous faites un jeu online en utilisant Web_File, il est conseillé de ne pas faire de communications toute les frames mais plutot toute les secondes vois 5 secondes pour pas surcharger le serveur et faire du bien aux scripts...
Il est conseillé pour que TCPSocket fonctionne correctement de mettre dans les premiers Scripts :
API::INI_WS.call
et mettre $online=true si vous voulez que le online soit toujours activé.
Puis si vous n'êtes pas un porc, mettre à la fin de Main :
API::CLN_WS.call

Crédits

塗 ゆり Codage de la DLL, codage de la classe Web_File, recherche de la classe TCPSocket sur google.
La classe TCPSocket trouvé n’avait que pour crédits Ruby.


Dernière édition par Nuri Yuri le Ven 21 Oct - 10:59 (2011); édité 1 fois
Revenir en haut
Facebook Twitter
Publicité






MessagePosté le: Sam 3 Sep - 16:23 (2011)    Sujet du message: Publicité

PublicitéSupprimer les publicités ?
Revenir en haut
Tinei
Membre


Inscrit le: 12 Juin 2010
Messages: 245
Localisation: Quelque part dans l'univers
Masculin

MessagePosté le: Sam 3 Sep - 17:20 (2011)    Sujet du message: Web_File v2

Cool ! Merci beaucoup !
Revenir en haut
Visiter le site web du posteur
og_loc-TATOO
Membre


Inscrit le: 11 Oct 2009
Messages: 3 383
Sailor Maniac
Localisation: noitasilacol

MessagePosté le: Lun 5 Sep - 16:36 (2011)    Sujet du message: Web_File v2

Juste une question, ce script permet-il de coder pendant le jeu ?

(ça me serait d'une très grande utilité) Imbécile heureux
Revenir en haut
Nuri Yuri
Administrateur
Administrateur


Inscrit le: 15 Oct 2008
Messages: 6 383
~Entity~
Localisation: Nancy
Non renseigné (Visible...)
ID Steam: Nuri_Yuri

MessagePosté le: Lun 5 Sep - 16:40 (2011)    Sujet du message: Web_File v2

Bah, si t'as une page PHP qui te chie un jolis code ruby et que tu l’exécute après l'avoir récupérer oui.
Revenir en haut
Facebook Twitter
Portoss_01
Membre


Inscrit le: 17 Nov 2013
Messages: 360
Localisation: cormoranche

MessagePosté le: Sam 21 Déc - 00:06 (2013)    Sujet du message: Web_File v2

En gros ce script permet de faire un jeu online?
Revenir en haut
Skype
Nuri Yuri
Administrateur
Administrateur


Inscrit le: 15 Oct 2008
Messages: 6 383
~Entity~
Localisation: Nancy
Non renseigné (Visible...)
ID Steam: Nuri_Yuri

MessagePosté le: Sam 21 Déc - 00:33 (2013)    Sujet du message: Web_File v2

Non, il permet de charger des pages web en leur envoyant des données.
Revenir en haut
Facebook Twitter
Overheat45
Membre


Inscrit le: 23 Jan 2012
Messages: 325
Localisation: Réunion
ID Steam: 00

MessagePosté le: Sam 21 Déc - 07:27 (2013)    Sujet du message: Web_File v2

Je croie que j'ai très bien compris mais, ce script permettrais-t-il de faire des choses comme le cadeau mystère.
Revenir en haut
Visiter le site web du posteur Skype Yahoo Messenger ICQ AIM GTalk/Jabber
TouzaxA
Membre


Inscrit le: 27 Juil 2012
Messages: 2 669

MessagePosté le: Sam 21 Déc - 07:47 (2013)    Sujet du message: Web_File v2

Overheat45 a écrit:
Je croie que j'ai très bien compris mais, ce script permettrais-t-il de faire des choses comme le cadeau mystère.


Théoriquement, c'est un peu le principe.
Revenir en haut
Nuri Yuri
Administrateur
Administrateur


Inscrit le: 15 Oct 2008
Messages: 6 383
~Entity~
Localisation: Nancy
Non renseigné (Visible...)
ID Steam: Nuri_Yuri

MessagePosté le: Sam 21 Déc - 09:17 (2013)    Sujet du message: Web_File v2

En effet, on peut utiliser ce script dans ce but précis.
Revenir en haut
Facebook Twitter
Overheat45
Membre


Inscrit le: 23 Jan 2012
Messages: 325
Localisation: Réunion
ID Steam: 00

MessagePosté le: Jeu 2 Jan - 05:34 (2014)    Sujet du message: Web_File v2

Ok. Merci. (Et désolé si j'ai mis du temps à répondre).
Revenir en haut
Visiter le site web du posteur Skype Yahoo Messenger ICQ AIM GTalk/Jabber
Zohran
Support Technique
Support Technique


Inscrit le: 14 Mai 2011
Messages: 906
Localisation: France
Masculin

MessagePosté le: Lun 21 Juil - 20:30 (2014)    Sujet du message: Web_File v2

Salut Yuri, merci beaucoup pour ce script, je sens qu'il pourrait m'être sacrément utile !
Pourrais-tu réuploader le fichier DLL svp?
Revenir en haut
Nuri Yuri
Administrateur
Administrateur


Inscrit le: 15 Oct 2008
Messages: 6 383
~Entity~
Localisation: Nancy
Non renseigné (Visible...)
ID Steam: Nuri_Yuri

MessagePosté le: Lun 21 Juil - 21:57 (2014)    Sujet du message: Web_File v2

._.
Nan, j'ai formaté mon PC une floppé de fois entre temps, faudra adapter les scripts.
Revenir en haut
Facebook Twitter
Zohran
Support Technique
Support Technique


Inscrit le: 14 Mai 2011
Messages: 906
Localisation: France
Masculin

MessagePosté le: Mar 22 Juil - 15:41 (2014)    Sujet du message: Web_File v2

Arf !
Faudra adapter les scripts? Mais sans DLL, c'est pas possible ._. Nan?
Revenir en haut
Nuri Yuri
Administrateur
Administrateur


Inscrit le: 15 Oct 2008
Messages: 6 383
~Entity~
Localisation: Nancy
Non renseigné (Visible...)
ID Steam: Nuri_Yuri

MessagePosté le: Mar 22 Juil - 15:43 (2014)    Sujet du message: Web_File v2

Tu supprime toutes les lignes qui utilise la DLL ça devrait fonctionner. Je te conseille de bien regarder quand même :p
La DLL servait à initialiser Winshock et vérifier si un serveur était dispo. Si tu utilises RGSS104E.dll t'as pas besoins.
Revenir en haut
Facebook Twitter
Otruch
Membre


Inscrit le: 14 Juil 2013
Messages: 32

MessagePosté le: Sam 23 Aoû - 19:30 (2014)    Sujet du message: Web_File v2

Finalement je vais utiliser TCP socket, le script et la DLL pour reproduire le protocole Websocket.

J'ai de la lecture à faire pour étudier ça, mais c'est largement moins du sucide que faire sa propre DLL Websocket en utilisant Win32API.
Revenir en haut
Contenu Sponsorisé






MessagePosté le: Aujourd’hui à 16:55 (2017)    Sujet du message: Web_File v2

Revenir en haut
Montrer les messages depuis:   
Poster un nouveau sujet   Répondre au sujet    Pokémon Script Project Index du Forum -> Game Making -> Ressources techniques -> Scripts Toutes les heures sont au format GMT + 1 Heure
Aller à la page: 1, 2  >
Page 1 sur 2

 
Sauter vers:  

Index | Creer un forum | Forum gratuit d’entraide | Annuaire des forums gratuits | Signaler une violation | Conditions générales d'utilisation
Powered by phpBB © 2001, 2005 phpBB Group
Thème par Thomas et l'équipe de la refonte PSP 2012 (version 1.0)
Traduction par : phpBB-fr.com