Pokémon Script Project Forum Index

Manuel | Search
 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
Goto page: 1, 2  >
 
Post new topic   Reply to topic    Pokémon Script Project Forum Index -> Game Making -> Ressources techniques -> Scripts
Previous topic :: Next topic   
Author Message
Nuri Yuri
Team SDK


Joined: 15 Oct 2008
Posts: 6,383
~Entity~
Localisation: Nancy
Non renseigné (Visible...)
ID Steam: Nuri_Yuri

PostPosted: Sat 3 Sep - 16:23 (2011)    Post subject: 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.


Last edited by Nuri Yuri on Fri 21 Oct - 10:59 (2011); edited 1 time in total
Back to top
Facebook Twitter
Publicité






PostPosted: Sat 3 Sep - 16:23 (2011)    Post subject: Publicité

PublicitéSupprimer les publicités ?
Back to top
Tinei
Membre


Joined: 12 Jun 2010
Posts: 245
Localisation: Quelque part dans l'univers
Masculin

PostPosted: Sat 3 Sep - 17:20 (2011)    Post subject: Web_File v2

Cool ! Merci beaucoup !
Back to top
Visit poster’s website
og_loc-TATOO
Membre


Joined: 11 Oct 2009
Posts: 3,383
Sailor Maniac
Localisation: noitasilacol

PostPosted: Mon 5 Sep - 16:36 (2011)    Post subject: 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
Back to top
Nuri Yuri
Team SDK


Joined: 15 Oct 2008
Posts: 6,383
~Entity~
Localisation: Nancy
Non renseigné (Visible...)
ID Steam: Nuri_Yuri

PostPosted: Mon 5 Sep - 16:40 (2011)    Post subject: 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.
Back to top
Facebook Twitter
Portoss_01
Membre


Joined: 17 Nov 2013
Posts: 360
Localisation: cormoranche

PostPosted: Sat 21 Dec - 00:06 (2013)    Post subject: Web_File v2

En gros ce script permet de faire un jeu online?
Back to top
Skype
Nuri Yuri
Team SDK


Joined: 15 Oct 2008
Posts: 6,383
~Entity~
Localisation: Nancy
Non renseigné (Visible...)
ID Steam: Nuri_Yuri

PostPosted: Sat 21 Dec - 00:33 (2013)    Post subject: Web_File v2

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


Joined: 23 Jan 2012
Posts: 325
Localisation: Réunion
ID Steam: 00

PostPosted: Sat 21 Dec - 07:27 (2013)    Post subject: 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.
Back to top
Visit poster’s website Skype Yahoo Messenger ICQ AIM GTalk/Jabber
TouzaxA
Membre


Joined: 27 Jul 2012
Posts: 2,669

PostPosted: Sat 21 Dec - 07:47 (2013)    Post subject: Web_File v2

Overheat45 wrote:
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.
Back to top
Nuri Yuri
Team SDK


Joined: 15 Oct 2008
Posts: 6,383
~Entity~
Localisation: Nancy
Non renseigné (Visible...)
ID Steam: Nuri_Yuri

PostPosted: Sat 21 Dec - 09:17 (2013)    Post subject: Web_File v2

En effet, on peut utiliser ce script dans ce but précis.
Back to top
Facebook Twitter
Overheat45
Membre


Joined: 23 Jan 2012
Posts: 325
Localisation: Réunion
ID Steam: 00

PostPosted: Thu 2 Jan - 05:34 (2014)    Post subject: Web_File v2

Ok. Merci. (Et désolé si j'ai mis du temps à répondre).
Back to top
Skype Yahoo Messenger ICQ AIM GTalk/Jabber
Zohran
Support Technique
Support Technique


Joined: 14 May 2011
Posts: 906
Localisation: France
Masculin

PostPosted: Mon 21 Jul - 20:30 (2014)    Post subject: 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?
Back to top
Nuri Yuri
Team SDK


Joined: 15 Oct 2008
Posts: 6,383
~Entity~
Localisation: Nancy
Non renseigné (Visible...)
ID Steam: Nuri_Yuri

PostPosted: Mon 21 Jul - 21:57 (2014)    Post subject: Web_File v2

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


Joined: 14 May 2011
Posts: 906
Localisation: France
Masculin

PostPosted: Tue 22 Jul - 15:41 (2014)    Post subject: Web_File v2

Arf !
Faudra adapter les scripts? Mais sans DLL, c'est pas possible ._. Nan?
Back to top
Nuri Yuri
Team SDK


Joined: 15 Oct 2008
Posts: 6,383
~Entity~
Localisation: Nancy
Non renseigné (Visible...)
ID Steam: Nuri_Yuri

PostPosted: Tue 22 Jul - 15:43 (2014)    Post subject: 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.
Back to top
Facebook Twitter
Otruch
Membre


Joined: 14 Jul 2013
Posts: 32

PostPosted: Sat 23 Aug - 19:30 (2014)    Post subject: 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.
Back to top
Contenu Sponsorisé






PostPosted: Today at 08:43 (2019)    Post subject: Web_File v2

Back to top
Display posts from previous:   
Post new topic   Reply to topic    Pokémon Script Project Forum Index -> Game Making -> Ressources techniques -> Scripts All times are GMT + 1 Hour
Goto page: 1, 2  >
Page 1 of 2

 
Jump to:  

Index | Free forum | Free support forum | Free forums directory | Report a 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)