Я хочу отправить сообщение определенному клиенту с помощью socket.io в swift (IOS)? - PullRequest
0 голосов
/ 15 марта 2020

Мой код в nodejs в порядке и работает нормально. Я могу отправить сообщение с сервера конкретному клиенту (я использую электронную почту для отправки сообщения) с кодом ниже:

io.sockets.in('julia.girldeveloper@example.com').emit('messages', 'Hello i am julia');

Но в Swift я не знаю, как отправить сообщение определенному клиенту.

Может кто-нибудь помочь мне написать приведенный выше код на Swift?

Ответы [ 2 ]

1 голос
/ 16 марта 2020

Вы можете использовать приведенный ниже код для языка Swift.

import SocketIO
import Foundation

let serverURL = "YourServerURL"

class SocketOpration {

    static let shared = SocketOpration(socketURL: URL(string: serverURL)!)

    let socketURL: URL
    var socket:SocketIOClient!
    var manager:SocketManager!


   init(socketURL: URL) {
        self.socketURL = socketURL
        self.manager = SocketManager(socketURL: self.socketURL, config: [.log(false)])
        self.socket = self.manager.defaultSocket
   }

    func setup() {

          socket.on(clientEvent: .connect) {[weak self] data, ack in
              print("socket connected")
          }

          socket.on(clientEvent: .disconnect) {[weak self] data, ack in
            print("socket disconnected")
          }


        // Get emit Call via On method ( emit will fire from Node )

         socket.on("messages") { [weak self](data, ack) in
            if data.count > 0 {
            }
         }

    }

}
1 голос
/ 15 марта 2020

Вы должны настроить его на сервере и на клиенте.

Здесь мой вопрос с длинным a go, но я объясню здесь также.

Каждый вашего подключенного пользователя вы должны дать ему идентификатор. Храните его в базе данных или на любой карте, которую можно использовать. Помните, что ID должен быть уникальным, например emails, userid или любым другим уникальным.

Сервер. js

const sessionsMap = {}; // I save user ID here

io.on('connection', (socket) => {
  socket.emit('askForUserId');

  socket.on('userIdReceived', (userId) => {
    sessionsMap[userId] = socket.id; // save the users on database or Object up to you
  });

  socket.on('send', (message) => {
    const receiverId = sessionsMap[message.receiverId];
    const messageData = message.data;
    socket.broadcast.to(receiverId).emit('mymessage', messageData);
  });
});

Клиент

Извините, я не знаю Быстро, но все равно (надеюсь, вы поняли), серверы обрабатывают сообщение, отправленное кому и пришедшее кому.

const userId = 'julia@mail.me'; // this should be unique

io.on('askForUserId', () => {
  io.emit(userId); // your connected user ID save it.
});

io.on('mymessage', (message) => {
  console.log('Yoho had message from', message.senderId)
  console.log(message.text)
});

// send message to other people
io.emit('send', { text: 'Hellow', receiverId: 'john@doe.net', senderId: 'julia@mail.me' })
...