Beispiel #1
0
    def _request_ironython(self, *args, **kwargs):
        method, url = args
        headers = kwargs.get("headers")
        params = kwargs.get("params")
        json_data = kwargs.get("json_data")
        byte_data = kwargs.get("byte_data")
        urlencode = kwargs.get("urlencode")
        filepath = kwargs.get("filepath")

        try:
            # prepare params
            if params:
                url = self._add_url_params(url, params)

            web_request = WebRequest.Create(url)
            web_request.Method = method.upper()
            web_request.Timeout = self.timeout

            # prepare headers
            if headers:
                for key, value in headers.items():
                    if key == "Content-Type":
                        web_request.ContentType = value
                    elif key == "Content-Length":
                        web_request.ContentLength = value
                    else:
                        web_request.Headers.Add(key, value)

            byte_arrays = []
            if json_data:
                byte_arrays.append(
                    UTF8.GetBytes(json.dumps(json_data, ensure_ascii=False)))
            if filepath:
                byte_arrays.append(File.ReadAllBytes(filepath))
            if byte_data:
                pass
                # TODO - Add byte input for System.Net
            if urlencode:
                byte_arrays.append(UTF8.GetBytes(self._url_encode(urlencode)))

            for byte_array in byte_arrays:
                web_request.ContentLength = byte_array.Length
                with web_request.GetRequestStream() as req_stream:
                    req_stream.Write(byte_array, 0, byte_array.Length)
            try:
                with web_request.GetResponse() as response:
                    success = response.StatusDescription in SUCCESS_CODES

                    with response.GetResponseStream() as response_stream:
                        with StreamReader(response_stream) as stream_reader:
                            data = json.loads(stream_reader.ReadToEnd())
            except SystemError:
                return None, None
            finally:
                web_request.Abort()

        except Exception as e:
            raise e

        return data, success
Beispiel #2
0
    def run(self, Mml2vgmInfo, index):
        
        #設定値の読み込み
        Mml2vgmInfo.loadSetting()

        #ファイル選択
        xgmFn = Mml2vgmInfo.fileSelect("xgmファイルの選択")
        if xgmFn is None:
            return None

        if not File.Exists(xgmFn):
            Mml2vgmInfo.msg("ファイルが見つかりません")
            return None

        if Path.GetExtension(xgmFn).ToLower() != ".xgm":
            Mml2vgmInfo.msg("拡張子が.xgmではありません")
            return None

        #ファイル読み込み
        xgmDat = File.ReadAllBytes(xgmFn)

        #FCCチェック
        if xgmDat[0]!=88 or xgmDat[1]!=71 or xgmDat[2]!=77:
            Mml2vgmInfo.msg("FCCがXGMではありません")
            return None

        sampleDataBlockSize = xgmDat[0x100] + xgmDat[0x101] * 0x100
        #Mml2vgmInfo.msg(sampleDataBlockSize.ToString())
        
        versionInformation = xgmDat[0x102];
        #Mml2vgmInfo.msg(versionInformation.ToString())
        
        dataInformation = xgmDat[0x103];
        #Mml2vgmInfo.msg(dataInformation.ToString())
        
        isNTSC = (dataInformation & 0x1) == 0;
        #Mml2vgmInfo.msg(isNTSC.ToString())
        
        existGD3 = (dataInformation & 0x2) != 0;
        #Mml2vgmInfo.msg(existGD3.ToString())
        
        multiTrackFile = (dataInformation & 0x4) != 0;
        #Mml2vgmInfo.msg(multiTrackFile.ToString())

        sampleDataBlockAddr = 0x104;
        #Mml2vgmInfo.msg(sampleDataBlockAddr.ToString())

        adr = sampleDataBlockAddr + sampleDataBlockSize * 256
        musicDataBlockSize = xgmDat[adr] + xgmDat[adr+1]*0x100 + xgmDat[adr+2]*0x10000 + xgmDat[adr+3]*0x1000000
        #Mml2vgmInfo.msg(musicDataBlockSize.ToString())

        musicDataBlockAddr = sampleDataBlockAddr + sampleDataBlockSize * 256 + 4;
        #Mml2vgmInfo.msg(musicDataBlockAddr.ToString())

        gd3InfoStartAddr = musicDataBlockAddr + musicDataBlockSize;
        #Mml2vgmInfo.msg(gd3InfoStartAddr.ToString())

        #PCMテーブルを取得&出力
        lst = List[Byte]()
        n = 0
        while n < 63*4:
            ind=n+4
            if ind == xgmDat.Length:
                break
            lst.Add(xgmDat[ind])
            n+=1
        File.WriteAllBytes( xgmFn + ".pcmTable.bin" , lst.ToArray() )
        lst.Clear();

        #PCMデータを取得&出力
        if sampleDataBlockSize > 0:
            n=0
            while n < sampleDataBlockSize * 256:
                ind=n + sampleDataBlockAddr
                if ind == xgmDat.Length:
                    break
                lst.Add(xgmDat[ind])
                n+=1
            File.WriteAllBytes( xgmFn + ".pcmData.bin" , lst.ToArray() )
            lst.Clear();

        #SEQデータを取得&出力
        if musicDataBlockSize > 0:
            n=0
            while n<musicDataBlockSize:
                ind=n + musicDataBlockAddr
                if ind == xgmDat.Length:
                    break
                lst.Add(xgmDat[ind])
                n+=1
            File.WriteAllBytes( xgmFn + ".seqData.bin" , lst.ToArray() )
            lst.Clear();

        #GD3データを取得&出力
        if existGD3:
            n=0
            while n < xgmDat.Length - gd3InfoStartAddr:
                ind=n + gd3InfoStartAddr
                lst.Add(xgmDat[ind])
                n+=1
            File.WriteAllBytes( xgmFn + ".gd3.bin" , lst.ToArray() )
            lst.Clear();


        Mml2vgmInfo.msg("xgmファイルを分割しました")


        #戻り値を生成(何もしないけど念のため)
        si = ScriptInfo()
        si.responseMessage = ""
        
        return si