2013-07-10 18 views
6

Próbuję użyć socket.io do połączenia mojego programu unity3d z serwerem node.js.Łączenie Unity3d z Node.js

Korzystając z UnitySocketIO, nawiązałem połączenie między klientem a serwerem.

Jednak metoda On lub Emit nie działa.

Czy ktoś może mi pomóc w rozwiązaniu tego problemu?

void Start() { 

    string socketUrl = "http://127.0.0.1:50122"; 
    Debug.Log("socket url: " + socketUrl); 

    this.socket = new Client(socketUrl); 
    this.socket.Opened += this.SocketOpened; 
    this.socket.Message += this.SocketMessage; 
    this.socket.SocketConnectionClosed += this.SocketConnectionClosed; 
    this.socket.Error += this.SocketError; 

    this.socket.Connect(); 
} 

private void SocketOpened (object sender, EventArgs e) { 
    Debug.Log("socket opened");     // i got this message 
    this.socket.On ("message", (data) => { 
     Debug.Log ("message : " + data); 
    }); 
    this.socket.Emit("join", "abc"); 
    Debug.Log("Emit done");     // i got this message 
} 

....

io.sockets.on('connection', function (socket) { 

    console.log('connect');     // i got this message 

    socket.emit('message', 'Hello World!'); 

    socket.on('join', function (id) { 
     console.log('client joined with id ' + id); 
     socket.emit('message', 'Hello ' + id); 
    }); 
}); 
+0

Masz to działa? Sam się z tym zmagam. – Jeff

+0

Rozwiązałeś to w końcu? Gdzie umieścić pliki DLL z UnitySocketIO? – Nikola

+0

@Nikola, po prostu umieść pliki dll w dowolnym miejscu w folderze Zasoby. Następnie (dla C#) po prostu dodaj 'using SocketIOClient;' do twojego skryptu. Nie jestem pewien, co to jest odpowiednik dla javascript, ale nie może być trudne do wymyślenia. – Harrison

Odpowiedz

2

Zdarzenie prawdopodobnie dołączony w niewłaściwej kolejności, spróbuj tak:

void Start() { 
    string socketUrl = "http://127.0.0.1:50122"; 
    Debug.Log("socket url: " + socketUrl); 

    this.socket = new Client(socketUrl); 
    this.socket.Opened += this.SocketOpened; 
    this.socket.Message += this.SocketMessage; 
    this.socket.SocketConnectionClosed += this.SocketConnectionClosed; 
    this.socket.Error += this.SocketError; 

    this.socket.On("message", (data) => { 
     Debug.Log("message: " + data); 
    }); 

    this.socket.Connect(); 
} 

a dla węzła:

io.sockets.on('connection', function(socket) { 
    console.log('client connected'); 
    socket.emit('message', 'Hello World!'); 
}); 

także nie zezwalaj klientowi na decydowanie o własnym identyfikatorze, ponieważ jest to "hac kable "w większości przypadków. Tylko serwer powinien podejmować ważne decyzje, a nie klienta.

+0

Dzięki za pomoc, ale dziennik "wiadomość" nadal nie pojawia się. – user1957032

+0

Możesz całkowicie zminimalizować swój przykład, aby ułatwić debugowanie i dowiedzieć się, jak to działa, a następnie zastosować go w aplikacji Unity. – moka