gumshoe2029's Forum Posts

  • Oh... I was under the impression that you already had a personal license...

    You should definitely look at getting a personal license at a minimum. It is well worth it.

  • I suspect the problem is on your server code, not your Construct2 code. Did you look at that example?

  • var WebSocketServer = require('ws').Server

    , wss = new WebSocketServer({port: 8080});

    wss.on('connection', function(ws) {

    ws.on('message', function(message) {

    console.log('received: %s', message);

    });

    ws.send('something');

    });

    The one main problem that I see right off is that you rolled your onmessage method into your onconnection method.

    Those two need to be separate functions, like:

    var WebSocketServer = require('ws').Server, wss = new WebSocketServer({port: 8080});
    
    wss.on('connection', function(ws) {
            ws.send('Connected.');
     });
    
    ws.on('message', function(message) {
            console.log('received: %s', message);
                ws.send('Message received.');
        });
    [/code:2jwc88p6]
    
    You also need to make sure that you have the "Access-Control-Allow-Origin" header set to '*'  because Construct is very particular about security, and your websockets will not work if that header is not set on the server side.
    
    See this example for more info: [url=http://usualcarrot.com/nodejs-and-websocket-simple-chat-tutorial]http://usualcarrot.com/nodejs-and-webso ... t-tutorial[/url]
    
    You can see the compartmentalization in my Java WebSocket server code below:
    [code:2jwc88p6]
    public GalaxyChatEndPoint(){
        	mLog = new MessageLogManager(filePath, fLogger, SP);
        }
        
        /**
         * Callback hook for Connection open events. This method will be invoked when a
         * client requests for a WebSocket connection.
         * @param userSession the userSession which is opened.
         */
        @OnOpen
        public void onOpen(Session userSession){
        	try{
        		userSession.setMaxIdleTimeout(600000);//10 mins
            	sessionKey = ((PrincipalWithSession) userSession.getUserPrincipal()).getSessionKey();
            	gameSession = cache.get(sessionKey.getKey());
                connections.put(sessionKey, userSession);
                if(gameSession==null)
                	broadcast("<p>gumshoe joined chat.</p>");
                else
                	broadcast(String.format("<p>%s%s</p>", gameSession.getDisplayName()," joined chat."));
        	}catch(Exception e){
        		fLogger.error(Errors.err2String(e));
        		try {
    				connections.get(sessionKey).close();
    				connections.remove(sessionKey);
    			} catch (IOException e1){
    	    		fLogger.error(Errors.err2String(e1));
    			}
        	}
        }
         
        /**
         * Callback hook for Connection close events. This method will be invoked when a
         * client closes a WebSocket connection.
         * @param userSession the userSession which is opened.
         */
        @OnClose
        public void onClose() {
        	try{
        		if(gameSession==null)
        			broadcast("<p>gumshoe left chat.</p>");
        		else
        			broadcast(String.format("<p>%s%s</p>", gameSession.getDisplayName()," left chat."));
    			connections.get(sessionKey).close();
    			connections.remove(sessionKey);
        	}catch(Exception e){
        		fLogger.error(Errors.err2String(e));
        		try {
    				if(connections.get(sessionKey)!=null)connections.get(sessionKey).close();
    				if(connections.get(sessionKey)!=null)connections.remove(sessionKey);
    			} catch (IOException e1){
    	    		fLogger.error(Errors.err2String(e1));
    			}
        	}
        }
         
        /**
         * Callback hook for Message Events. This method will be invoked when a client
         * sends a message.
         * @param message The text message
         * @param userSession The session of the client
         */
        @OnMessage
        public void onMessage(String messageJson) {
        	try{
        		Date now = new Date();
        		String dateFmt = new SimpleDateFormat("EEE MMM HH:mm:ss z yyyy").format(now);
        		Message message = Message.fromJson(messageJson, gameSession);
        		globalMessageLog.put(currentMessageId.incrementAndGet(), message);
        		if(message.getDestination().getDestType()==DestinationType.GALAXY)
    	    		if(gameSession==null)
    	    			broadcast(String.format(galaxyChatFramework, dateFmt, "gumshoe", message.getContent()));
    	    		else
    	    			broadcast(String.format(galaxyChatFramework, dateFmt, gameSession.getDisplayName(), message.getContent()));
        		// this may need to be reworked...  perhaps to a raw message number system
        		Date time1159pm = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss").parse(new SimpleDateFormat("yyyy-MM-dd").format(now) + " 23:59:58");
        		
        		if(now.after(time1159pm)){
        			if(mLog.writeFile(globalMessageLog, now)){
        				globalMessageLog.clear();
        				currentMessageId.set(0);
        			}
        		}
        	}catch(Exception e){
        		fLogger.error(Errors.err2String(e));
    			try {
    				connections.get(sessionKey).close();
    				connections.remove(sessionKey);
    			} catch (IOException e1){
    	    		fLogger.error(Errors.err2String(e1));
    			}
        	}
        }
        
        private static void broadcast(String msg) throws Exception {
        	for(Session client : connections.values()){
        		synchronized (client) {
            		if(client.isOpen()) client.getBasicRemote().sendText(msg);
        		}
        	}
        }
    [/code:2jwc88p6]
  • Np. Glad it works for you.

  • Yep, np.

  • GSquadron No problem.

  • There is a lot of demand here, I imagine, but not many organizations can pay. We are looking for one more developer, but they will be required to work in Java.

    So, GSquadron would you be willing for work for knowledge rather than money (for now).

  • You have to use server side code to write XML (or any) file. Only server side code contained in a secure environment is adequately trusted to have write privileges on a computer.

    If you don't mind asking the user to save the XML, you can do what R0j0 suggests with the file download invoker.

  • If you are a quick learner, willing to work hard, and willing to learn Java, we will grab you for our project. You would also be required to sign a non-disclosure agreement, which requires that you be of legal consent age or your parents must sign it on your behalf.

  • You do not have permission to view this post

  • Yea, file servers serve files. Not web pages. That is why your browser interprets it as a file, because the HTTP Header for Content Type probably says: "file/text" or something similar.

  • Start with the economic models and the city/map structure/pseudo-structure.

    I am a big fan of the agile test-build method, but you need to design everything first. Once you have designs in place you can begin building prototypes, testing, and rebuilding.

    In order to build my game, I began by designing everything, from the servers, all of the way up to as many of the game mechanics as I could concretely design early on. Once you have all of your conceptual stuff laid out on paper (or Google docs, or wherever), only then should you begin test/building.

  • We use Amazon Web Services virtual servers and then install Apache Web Server to distribute our html files.

  • Filezilla FTP server on my own pc.

    That is not a web server, lol. You should look at using Apache or some other webserver.

    WAMP stack: https://bitnami.com/stack/wamp/installer (You get PHP and MySQL, which you may not need too)

  • Try Construct 3

    Develop games in your browser. Powerful, performant & highly capable.

    Try Now Construct 3 users don't see these ads
  • Sadly, no. I am a Java guy, so I used straight AJAX/WebSockets and the Java DataBase Connectors. Look through Google though... everything you want is there; it is just a matter of picking through the refuse to find the jewels.