Impact

This forum is read only and just serves as an archive. If you have any questions, please post them on github.com/phoboslab/impact

8 years ago by kaleong

Hi everyone,

I am new to develop HTML5 game with impact, as I search in class reference, there's no an official way to call webservice/aspx data, coz my game will also publish in IOS, I have also wrote a aspx for updating the parameter in game as level tuning without re-submit to store again, my question is : Is there anyway to call webservice or aspx in impact class, thanks for any kindly help.

8 years ago by yatayata

welcome to the community! its good to see someone else trying both web and native...

we have our own class for doing ajaxy stuff, built on top of the zepto.js framework. i'll bundle and post it later but basically:

  // ... plugin wrapper //

     	XhrRequest = ig.Class.extend({

         getJSON: function(url, params, success) {
           $.ajax({
             type: 'GET',
             url: this.appendParams(url, params),
             success: success,
             dataType: 'json',
             error: this.errorResult.bind(this)
           })
         },

then we can do

   this.xhr = new XhrRequest();
   this.xhr.getJSON('/users', {type: 'status'}, this.updateStats.bind(this))

I havent tried if this will work on iOS yet. if the JS interpreter has a XMLHttpRequest then it should work, but i guess i'll find out soon enough!

additionally we are using localStorage, this is a grey area for native.

apart from obvious DOM issues, what other areas do you think may cause problems between native and browser?

8 years ago by kaleong

Still study on developing both 'platforms' like a noob, I am trying to make the both version can share a same database(not just a ranking board, keep all players in a same world),may I ask is that anyway to get the plugin you wrote?? Million thanks for your reply~

8 years ago by copman

Hello!

With this you can call a REST WCF-Service from impact and use json
as in & output

jQuery is required

Server.js:


ig.module(
	'srv.server'
)
.requires(
	'impact.entity'
)
.defines(function(){

Server = ig.Entity.extend({

        serviceUrl:null,
        
	init: function(serviceUrl) {
            this.serviceUrl=serviceUrl;
        },
        
       getData: function(method,data,callback,error,bare)    {
        // *** Convert input data into JSON - REQUIRES Json2.js
        var json = JSON2.stringify(data);
        // *** The service endpoint URL
        var url = this.serviceUrl + method;
        $.ajax( {
            url: url,
            data: json,
            type: "POST",
            processData: false,
            contentType: "application/json",
            timeout: 10000,
            dataType: "text",  // not "json" we'll parse
            success:
            function(res)
            {
                if (!callback) return;
                // *** Use json library so we can fix up MS AJAX dates
                var result = JSON2.parse(res);
                // *** Bare message IS result
                if (bare)
                { callback(result); return; }
                // *** Wrapped message contains top level object node
                // *** strip it off
                for(var property in result)
                {
                    callback( result[property] );
                    break;
                    }
                },
                    
                    error:  function(xhr) {
                        if (!error) return;
                        if (xhr.responseText)
                        {
                            var err = JSON2.parse(xhr.responseText);
                            if (err)
                            error(err);
                            else
                            error( { Message: "Unknown server error." })
                        }
                        return;
                    }
            });
        }
});   
});

json2.min.js


if(!this.JSON2){JSON2=function(){function f(n){return n<10?'0'+n:n;}
var escapeable=/["\\\x00-\x1f\x7f-\x9f]/g,gap,indent,meta={'\b':'\\b','\t':'\\t','\n':'\\n','\f':'\\f','\r':'\\r','"':'\\"','\\':'\\\\'},rep;function quote(string){return escapeable.test(string)?'"'+string.replace(escapeable,function(a){var c=meta[a];if(typeof c==='string'){return c;}
c=a.charCodeAt();return'\\u00'+Math.floor(c/16).toString(16)+
(c%16).toString(16);})+'"':'"'+string+'"';}
function str(key,holder){var i,k,v,length,mind=gap,partial,value=holder[key];if(value&&typeof value==='object'&&typeof value.toJSON==='function'){value=value.toJSON(key);}
if(typeof rep==='function'){value=rep.call(holder,key,value);}
switch(typeof value){case'string':return quote(value);case'number':return isFinite(value)?String(value):'null';case'boolean':case'null':return String(value);case'object':if(!value){return'null';}
if(value.toUTCString)
{var xx='"\\/Date('+value.getTime()+')\\/"';return xx;}
gap+=indent;partial=[];if(typeof value.length==='number'&&!(value.propertyIsEnumerable('length'))){length=value.length;for(i=0;i<length;i+=1){partial[i]=str(i,value)||'null';}
v=partial.length===0?'[]':gap?'[\n'+gap+partial.join(',\n'+gap)+'\n'+mind+']':'['+partial.join(',')+']';gap=mind;return v;}
if(typeof rep==='object'){length=rep.length;for(i=0;i<length;i+=1){k=rep[i];if(typeof k==='string'){v=str(k,value,rep);if(v){partial.push(quote(k)+(gap?': ':':')+v);}}}}else{for(k in value){v=str(k,value,rep);if(v){partial.push(quote(k)+(gap?': ':':')+v);}}}
v=partial.length===0?'{}':gap?'{\n'+gap+partial.join(',\n'+gap)+'\n'+mind+'}':'{'+partial.join(',')+'}';gap=mind;return v;}}
return{stringify:function(value,replacer,space){var i;gap='';indent='';if(space){if(typeof space==='number'){for(i=0;i<space;i+=1){indent+=' ';}}else if(typeof space==='string'){indent=space;}}
if(!replacer){rep=function(key,value){if(!Object.hasOwnProperty.call(this,key)){return undefined;}
return value;};}else if(typeof replacer==='function'||(typeof replacer==='object'&&typeof replacer.length==='number')){rep=replacer;}else{throw new Error('JSON.stringify');}
return str('',{'':value});},parse:function(text,reviver){var j;function walk(holder,key){var k,v,value=holder[key];if(value&&typeof value==='object'){for(k in value){if(Object.hasOwnProperty.call(value,k)){v=walk(value,k);if(v!==undefined){value[k]=v;}else{delete value[k];}}}}
return reviver.call(holder,key,value);}
if(/^[\],:{}\s]*$/.test(text.replace(/\\["\\\/bfnrtu]/g,'@').replace(/"[^"\\\n\r]*"|true|false|null|-?\d+(?:\.\d*)?(?:[eE][+\-]?\d+)?/g,']').replace(/(?:^|:|,)(?:\s*\[)+/g,''))){var regEx=/(\"\d{4}-\d{2}-\d{2}T\d{2}:\d{2}.*?\")|(\"\\*\/Date\(.*?\)\\*\/")/g;text=text.replace(regEx,this.regExDate);j=eval('('+text+')');return typeof reviver==='function'?walk({'':j},''):j;}
throw new SyntaxError('JSON.parse');},regExDate:function(str,p1,p2,offset,s)
{str=str.substring(1).replace('"','');var date=str;if(/\/Date(.*)\//.test(str)){str=str.match(/Date\((.*?)\)/)[1];date="new Date("+parseInt(str)+")";}
else{var matches=str.split(/[-,:,T,Z]/);matches[1]=(parseInt(matches[1],0)-1).toString();date="new Date(Date.UTC("+matches.join(",")+"))";}
return date;},quote:quote};}();}

use it like this:

var server =new Server('http://localhost/resttest/Service1/');
		
		server.getData('rudi',{ symbol: 'rudi' },
			       function (result)
			       {
				 alert(result);
				},
				function(err){
					alert(err);
				}
				);

don't forget:

	<script type="text/javascript" src="lib/jquery/jquery-1.6.4.min.js"></script>
	<script type="text/javascript" src="lib/json/json2.min.js"></script>

the wcf-Rest Service:

 [ServiceContract]
    [AspNetCompatibilityRequirements(RequirementsMode = AspNetCompatibilityRequirementsMode.Allowed)]
    [ServiceBehavior(InstanceContextMode = InstanceContextMode.PerCall)]
    // NOTE: If the service is renamed, remember to update the global.asax.cs file
    public class Service1
    {

        [OperationContract]
        [WebInvoke(UriTemplate = "{id}", Method = "POST", BodyStyle = WebMessageBodyStyle.Wrapped, ResponseFormat = WebMessageFormat.Json)]
        public SampleItem Get(string id)
        {
            return new SampleItem() { Id = 4, StringValue = "blabla..." };
        }
}

hope this helps...
Page 1 of 1
« first « previous next › last »