Le système de chat Socket.IO ne marche pas.
Je crée une application Android, je veux faire une partie de chat pour elle. Problème, lorsque j'essaie d'envoyer un message,
rien ne s'affiche. Dans la console, aucun message de connexion ne s'affiche.
Donc, j'ai essayé d'ouvrir l'URL dans mon navigateur Web, et ça marche. J'ai un message de connexion.
Si vous posez des questions sur mon code (voir ci-après), j'ai testé mon ListAdapter, il marche. Je suis à peu près
sûr que le problème vient de la communication entre l'application Android et le serveur Web.
Android chat fragment :
Code:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107
|
public class ChatFragment extends Fragment {
private ChatFragment activity;
private EditText input;
private ImageView fab;
private ListView listView;
ArrayList<String> userArray = new ArrayList<String>();
ArrayList<String> msgArray = new ArrayList<String>();
ArrayList<String> dateArray = new ArrayList<String>();
CustomListAdapter whatever;
private Socket mSocket;
{
try {
mSocket = IO.socket("http://###########");
} catch (URISyntaxException e) {}
}
@Nullable
@Override
public View onCreateView(@NonNull LayoutInflater inflater, @Nullable ViewGroup container, @Nullable Bundle savedInstanceState) {
return inflater.inflate(R.layout.fragment_chat, container, false);
}
@Override
public void onViewCreated(@NonNull View view, @Nullable Bundle savedInstanceState) {
whatever = new CustomListAdapter(this, userArray, msgArray, dateArray);
this.activity = this;
//Associating visual elements to variables
fab = (ImageView) getView().findViewById(R.id.fab);
input = (EditText) getView().findViewById(R.id.input);
//Defining the event for new messages
mSocket.on("chat message", onNewMessage);
//Start connection with server
mSocket.connect();
fab.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View view) {
//Sending the message to online chat
attemptSend();
// Clear the input
input.setText("");
}
});
}
private void attemptSend() {
String message = input.getText().toString().trim();
if (TextUtils.isEmpty(message)) {
return;
}
mSocket.emit("chat message", message);
}
private Emitter.Listener onNewMessage = new Emitter.Listener() {
@Override
public void call(final Object... args) {
getActivity().runOnUiThread(new Runnable() {
@Override
public void run() {
JSONObject data = (JSONObject) args[0];
String username;
String message;
try {
username = data.getString("username");
message = data.getString("message");
} catch (JSONException e) {
return;
}
// add the message to view
addMessage(username, message);
}
});
}
};
public void addMessage(String user, String msg){
SimpleDateFormat sdf = new SimpleDateFormat("yyyy/MM/dd HH:mm:ss", Locale.getDefault());
String currentDateandTime = sdf.format(new Date());
userArray.add(user);
msgArray.add(msg);
dateArray.add(currentDateandTime);
listView = (ListView) getView().findViewById(R.id.list_of_messages);
listView.setAdapter(whatever);
}
} |
Code HTML :
Code:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25
|
<!doctype html>
<html>
<head>
<title>GamingLink public chat</title>
</head>
<body>
<script src="/socket.io/socket.io.js"></script>
<script src="https://code.jquery.com/jquery-1.11.1.js"></script>
<script>
$(function () {
var socket = io();
$('form').submit(function(e){
e.preventDefault(); // prevents page reloading
socket.emit('chat message', $('#m').val());
$('#m').val('');
return false;
});
socket.on('chat message', function(msg){
$('#messages').append($('<li>').text(msg));
});
});
</script>
</body>
</html> |
Code NodeJs :
Code:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23
|
var app = require('express')();
var http = require('http').createServer(app);
var io = require('socket.io')(http);
app.get('/', function(req, res){
res.sendFile(__dirname + '/index.html');
});
io.on('connection', function(socket){
console.log('Un utilisateur c\'est connecté');
socket.on('disconnect', function(){
console.log('Un utilisateur c\'est déconnecté');
});
socket.on('chat message', function(msg){
console.log('message: ' + msg);
io.emit('chat message', msg);
});
});
http.listen(80, function(){
console.log('listening on *:3000');
}); |
J'espère que vous pourrez m'aider à résoudre mon bug, je suis vraiment novice dans l'utilisation de websockets.
Merci d'avance. Monsieur TM82.
-