2016-08-30 6 views
3

Ich baue eine Chat-App. Ich habe einen Client (Ionic 2), der mit einem Server (Java) kommuniziert. Der Client kann Nachrichten erfolgreich vom Server empfangen (z. B. "Welcome to the chat!" wird beim Herstellen der Verbindung empfangen), aber wenn ich versuche, eine Nachricht vom Client an den Server zu senden, wird die Nachricht nicht empfangen (DataListener<Message> wird nicht über das Ereignis "chat_message:send" aufgerufen.) .Sockets.io empfängt, sendet aber keine Nachrichten

Bitte irgendwelche Vorschläge?

Server-Code:

import com.corundumstudio.socketio.AckRequest; 
import com.corundumstudio.socketio.Configuration; 
import com.corundumstudio.socketio.SocketIOClient; 
import com.corundumstudio.socketio.SocketIOServer; 
import com.corundumstudio.socketio.listener.ConnectListener; 
import com.corundumstudio.socketio.listener.DataListener; 
import com.corundumstudio.socketio.listener.DisconnectListener; 

public class Server { 

    public static void main(String[] args) { 
     Configuration config = new Configuration(); 
     config.setHostname("localhost"); 
     config.setPort(3700); 
     final SocketIOServer server = new SocketIOServer(config); 

     server.addConnectListener(new ConnectListener() { 
      @Override 
      public void onConnect(SocketIOClient client) { 
       System.out.println("onConnected"); 
       client.sendEvent("chat_message:message", new Message("Welcome to the chat!")); 
      } 
     }); 

     server.addDisconnectListener(new DisconnectListener() { 
      @Override 
      public void onDisconnect(SocketIOClient client) { 
       System.out.println("onDisconnected"); 
      } 
     }); 

     server.addEventListener("chat_message:send", Message.class, new DataListener<Message>() { 
      @Override 
      public void onData(SocketIOClient client, Message data, AckRequest ackSender) throws Exception { 
       System.out.println("onSend: " + data.toString()); 
       server.getBroadcastOperations().sendEvent("chat_message:message", data); 
      } 
     }); 

     System.out.println("Starting server..."); 
     server.start(); 
     System.out.println("Server started"); 

    } 
} 

und

public class Message { 
    private String message; 

    public Message(String message) { 
     this.message = message; 
    } 

    public String getMessage() { 
     return message; 
    } 
    public void setMessage(String message) { 
     this.message = message; 
    } 
} 

Client-Code:

import { Component, NgZone } from '@angular/core'; 
import { Http } from "@angular/http"; 
import { MessageModel } from '../model/messageModel'; 
import { UtilityService } from '../utils/utilityService'; 
declare var io; 

@Component({ 
    templateUrl: 'build/pages/chat/chat.html', 
    providers: [UtilityService] 
}) 

export class ChatPage { 

    private socketHost: string = "http://localhost:3700"; 
    private messages: MessageModel[] = []; 
    private zone: NgZone = null; 
    private chatBox: string = null; 
    private socket: any = null; 
    private utilityService: UtilityService = null; 

    constructor(http: Http, utilityService: UtilityService) { 
    this.utilityService = utilityService; 
    this.setUpMessageService(http); 
    } 

    setUpMessageService(http: Http): void { 
    this.messages = []; 
    this.zone = new NgZone({ enableLongStackTrace: false }); 
    let url = this.socketHost + "/fetch"; 

    http.get(url).subscribe((success) => { 
     var data = success.json(); 
     console.log(data); 
     for (var i = 0; i < data.length; i++) { 
     this.messages.push(data[i].message); 
     } 
    }, (error) => { 
     console.log(JSON.stringify(error)); 
    }); 
    this.chatBox = ""; 

    this.socket = io(this.socketHost); 
    this.socket.on("chat_message:message", (messageModel: MessageModel) => { 
     this.zone.run(() => { 
     console.log('run: ' + messageModel); 
     this.messages.push(messageModel); 
     }); 
    }); 
    } 

    send(msg) { 
    if (msg && msg != "") { 
     let messageModel: MessageModel = new MessageModel(); 
     messageModel.message = msg; 
     console.log(messageModel); 
     this.socket.emit("chat_message:send", messageModel); 
    } 
    this.chatBox = ""; 
    } 
} 

und

import { Injectable } from "@angular/core"; 

    @Injectable() 
    export class MessageModel { 
      public message: string = null; 
    } 

Antwort

0

Wenn ich die Nachricht als String und nicht als MessageModel vom Client senden, funktioniert es.

Verwandte Themen