crgt8g
crgt8g

Reputation: 11

Kryonet server / client connection successful but having issues printing out emoji

I'm using Kryonet API for a chat app. I managed to get the server / client connected. Text messages are sent and received successfully but I'm having difficulty posting emoji's. When debugging I'm able to print emoji's in the terminal but not in the chat.

I also tried:

String smiley = "\uD83D\uDE00" and 
String smiley = ":smiley:string &#128516";
String result = EmojiParser.parseToUnicode(smiley);
import com.esotericsoftware.kryonet.Connection;
import com.esotericsoftware.kryonet.Listener;
import com.vdurmont.emoji.EmojiParser;
import packets.*;
import java.awt.*;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.io.IOException;
import com.esotericsoftware.kryonet.Client;
import javax.swing.*;

public class Main<java> implements ActionListener {

    private static final JFrame frame = new JFrame("Chat Client");
    private static final JTextArea textArea = new JTextArea();
    private static final JTextField textField = new JTextField(25);
    private static final JButton sendButton = new JButton("Send");
    private static Icon emojiIcon = new ImageIcon("/Emoticons/smiley.png");
    private static final JButton emojiButton = new JButton(emojiIcon);


    private final Client client;
    private String username;

    public Main() {
        client = new Client();
        client.start();

        try
        {
            client.connect(5000, "127.0.0.1", 23900, 23901);

        }
        catch (IOException e)
        {
            JOptionPane.showMessageDialog(null, "Cannot connect to server.");
            return;
        }

        client.getKryo().register(Packet.class);
        client.getKryo().register(Packet1Connect.class);
        client.getKryo().register(Packet2ClientConnected.class);
        client.getKryo().register(Packet3ClientDisconnect.class);
        client.getKryo().register(Packet4Chat.class);

        client.addListener(new Listener()
        {
            public void received(Connection connection, Object object)
            {
                if (object instanceof Packet)
                {
                    if (object instanceof Packet2ClientConnected)
                    {
                        Packet2ClientConnected p2 = (Packet2ClientConnected) object;
                        textArea.append(p2.clientName + " connected.\n");
                    }
                    else if(object instanceof Packet3ClientDisconnect)
                    {
                        Packet3ClientDisconnect p3 = (Packet3ClientDisconnect) object;
                        textArea.append(p3.clientName + " disconnected.\n");
                    }
                    else if(object instanceof Packet4Chat)
                    {
                        Packet4Chat p4 = (Packet4Chat) object;
                        textArea.append(p4.username + ": " + p4.message + "\n");
                    }
                }
            }
        });

        username = JOptionPane.showInputDialog("Please enter your username.");

        Packet1Connect p1 = new Packet1Connect();
        p1.username = username;
        client.sendTCP(p1);

        frame.setSize(450, 375);
        frame.setLocationRelativeTo(null);
        frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);

        Panel p = new Panel();

        sendButton.addActionListener(this);
        textArea.setEditable(false);
        textArea.setLineWrap(true);
        textArea.setWrapStyleWord(true);
        JScrollPane areaScrollPane = new JScrollPane(textArea);
        areaScrollPane.setVerticalScrollBarPolicy(JScrollPane.VERTICAL_SCROLLBAR_ALWAYS);
        areaScrollPane.setPreferredSize(new Dimension(430, 275));

        emojiButton.addActionListener(this);
        sendButton.add(emojiButton);
        textArea.setEditable(false);
        textArea.setLineWrap(true);
        textArea.setWrapStyleWord(true);
        areaScrollPane.setVerticalScrollBarPolicy(JScrollPane.VERTICAL_SCROLLBAR_ALWAYS);
        areaScrollPane.setPreferredSize(new Dimension(430, 275));

        p.add(areaScrollPane);
        p.add(textField);
        p.add(sendButton);
        p.add(emojiButton);

        frame.add(p);
        frame.setVisible(true);

    }

    public static void main(String[] args) {
        new Main();
    }

    @Override
    public void actionPerformed(ActionEvent e) {
        String message = textField.getText();
        if (e.getSource() == sendButton)
        {
            if (!message.equalsIgnoreCase(""))
            {
                Packet4Chat p4 = new Packet4Chat();
                p4.username = username;
                p4.message = message;
                client.sendTCP(p4);
                textField.setText("");
            }
        }
        else if(e.getSource() == emojiButton)
        {
            // Insert smiley
            String smiley = ":smiley:string &#128516";
            String result = EmojiParser.parseToUnicode(smiley);
            Packet4Chat p4 = new Packet4Chat();
            p4.username = username;
            p4.message = message + result;
            client.sendTCP(p4);
            textField.setText("");
        }
    }
}

The output in the chat produces: "string &#128516" instead of a smiley emoji.

Upvotes: 1

Views: 56

Answers (0)

Related Questions