2017-04-10 9 views
0

チャットアプリケーションの使用にsocket ioとandroidを使用しています。サーバー側はnodejsで、クライアント側はandroidです。私のチャットは正常に機能していますが、ユーザーがアクティブかどうかを確認したいと思います。たとえば、私はwheatherユーザー "abc"がアクティブであるかどうかをチェックしたいと思います。ソケットioとアンドロイドチャットアプリケーションでオンラインでユーザーをチェックする方法

Androidの部分です。私は参照を取得しています。

emit("login",userid); 

は、オンラインユーザーを取得するために使用されます。だから私は

public class OnlineActivity extends AppCompatActivity { 
private Socket mSocket; 

@Override 
protected void onCreate(Bundle savedInstanceState) { 
    super.onCreate(savedInstanceState); 
    setContentView(R.layout.activity_online); 

    ChatApplication app = (ChatApplication) getApplication(); 
    mSocket = app.getSocket(); 

    JSONObject user = new JSONObject(); 
    try { 
     user.put("userId", "abc"); 



    } catch (JSONException e) { 
     // TODO Auto-generated catch block 
     e.printStackTrace(); 
    } 

    mSocket.emit("login",user); 

    Log.d("LOG", String.valueOf(mSocket.emit("login",user))); 
    Log.d("LOG", String.valueOf(user)); 
} 
} 

は、サーバーのコードは、それが可能に私を助けてくださいどのように

var express = require('express'); 
var app = express(); 
var server = require('http').Server(app); 
var io = require('socket.io')(server); 
var port = process.env.PORT || 86; 
server.listen(port, function() { 
    console.log('Updated : Server listening at port %d', port); 
}); 
app.use('/js', express.static(__dirname + '/public/js')); 
app.use('/css', express.static(__dirname + '/public/css')); 
app.use(express.static(__dirname + '/public')); 
var usernames = {}; 
var numUsers = 0; 
io.on('connection', function (socket) { 
var addedUser = false; 
socket.on('new message', function (data) { 
    socket.broadcast.emit('new message', { 
    username: socket.username, 
    message: data, 
    timestamp: Date.now() 
    }); 
    console.log('I sent it'); 
}); 

// when the client emits 'add user', this listens and executes 
socket.on('add user', function (username) { 
    // we store the username in the socket session for this client 
    socket.username = username; 
    // add the client's username to the global list 
    usernames[username] = username; 
    ++numUsers; 
    addedUser = true; 
    socket.emit('login', { 
    numUsers: numUsers 
    }); 
    // echo globally (all clients) that a person has connected 
    socket.broadcast.emit('user joined', { 
    username: socket.username, 
    numUsers: numUsers 
    }); 
}); 

// when the client emits 'typing', we broadcast it to others 
socket.on('typing', function() { 
    socket.broadcast.emit('typing', { 
    username: socket.username 
    }); 
}); 

// when the client emits 'stop typing', we broadcast it to others 
socket.on('stop typing', function() { 
    socket.broadcast.emit('stop typing', { 
    username: socket.username 
    }); 
}); 

// when the user disconnects.. perform this 
socket.on('disconnect', function() { 
    // remove the username from global usernames list 
    if (addedUser) { 
    delete usernames[socket.username]; 
    --numUsers; 

    // echo globally that this client has left 
    socket.broadcast.emit('user left', { 
     username: socket.username, 
     numUsers: numUsers 
    }); 
    } 
}); 
}); 

の下に示されているでしょうか?

答えて

1

特定のユーザーがアクティブであるかどうかを確認するために、サーバー側で新しいイベントリスナーを追加します。

socket.on('isActive', function (user) { 
    const userId = user.userId; 
    const user = usernames[userId]; 
    const socketId = socket.id; 
    let response; 
    if(user) { 
    // User is active 
    response = {isActive: true}; 
    } else { 
    // User is not active 
    response = {isActive: false}; 
    } 
    const responseSocket = io.sockets.connected[socketId]; 
    if(responseSocket) { 
    responseSocket.emit('onIsActive', response); 
    } 
}); 

クライアント側では、特定のユーザーのアクティブなステータスを要求するイベントを発行します。

final JSONObject user = new JSONObject(); 
try { 
    user.put("userId", "abc"); 
} catch (final JSONException e) { 
    e.printStackTrace(); 
} 
mSocket.emit("isActive", user); 
+0

コードが正常に動作しています。アクティブなmsgをアンドロイドに送信する方法。 – Fazil

+0

私は答えを編集しました。 – AlexTa

関連する問題