0

I am trying to send a socket using socket.io when the get request ?server in the url is received. I am loading the buttons which will redirect the page from a json file sent by the node.js server.

When the get request is received, a socket is sent to the server. The problem is on the serverside the socket isn't being received for some reason.

index.html

    <script src="jquery.js"></script>
    <script src="jquery-ui.js"></script>
    <script src="jquery-ui.min.js"></script>
    <script src="/socket.io/socket.io.js"></script>
    <link href="https://fonts.googleapis.com/css?family=Bungee|Roboto" rel="stylesheet">

    <div id="channels" style="height: 100%; width: 100%; position: absolute; top: 0%; left: 0%; background-color: #000;"></div>

    <style>
        html {
            color: #fff;
        }
    </style>

    <script>

function getParameterByName(name, url) {
    if (!url) {
      url = window.location.href;
    }
    name = name.replace(/[\[\]]/g, "\\$&");
    var regex = new RegExp("[?&]" + name + "(=([^&#]*)|&|#|$)"),
        results = regex.exec(url);
    if (!results) return null;
    if (!results[2]) return '';
    return decodeURIComponent(results[2].replace(/\+/g, " "));
}

    var socket = io();

    socket.on("server", function(server){
        console.log(server);
        $("#channels").append("<a href='?server="+server+"'><h1>"+server+"</h1></a>");
    });

    var server = getParameterByName("server");
            console.log("Connecting to",server);
            socket.emit("connect", server);

    </script>

server.js

   process.stdout.write('\033c'); // Clear the console on startup

var
   express = require("express"),
   app = express(),
   http = require("http").Server(app),
   io = require("socket.io")(http),
   path = require("path"),
   colorworks = require("colorworks").create();

      http.listen(8080, function(){
         console.log("server is running on port 8080");
      });

            app.use(express.static(__dirname + "/public2"));

            app.get("/", function(request, response){
                response.sendFile(__dirname + "/public2/index.html");
                console.log("Served file to client");
            });

    var database = require("./json/database_original.json");
    var number_servers = Object.keys(database.servers).length;

io.on("connection", function(socket){

    for (var i = 0; i < number_servers; i++){
        socket.emit("server", database.servers[i].serverJOIN);
        console.log("Server name sent: " + database.servers[i].serverJOIN);
    }

    socket.on("connect", function(server){
        console.log("Socket received: " + server);
    });

});

database.json

    {
        "servers": [
            {
                "serverNAME": "server1",
                "serverJOIN": "@server1"
            },
            {
                "serverNAME": "server2",
                "serverJOIN": "@server2"
            },
            {
                "serverNAME": "server3",
                "serverJOIN": "@server3"
            }
        ]
    }
Nicholas Smith
  • 674
  • 1
  • 13
  • 27

1 Answers1

0

you might want to use express-io instead as this specially made for this or if you are building a realtime web app then try using sailsjs which already has socketIO integrated to it.

https://stackoverflow.com/a/23282360/4394814

Refer to this, this might help you

Community
  • 1
  • 1
ndkcha
  • 175
  • 2
  • 12