2016-11-29 1 views
0

私はSwiftアプリケーションでSocketIOを使用しています。このアプリケーションでは、サーバーが発信され、クライアントはリッスンします。私はユーザーが入力を開始したときに表示したい、これを達成する方法が不思議でした。Swiftのタイピングインジケータ

txtMessage.addTarget(self, action: #selector(self.textFieldDidChange(_:)), forControlEvents: UIControlEvents.EditingChanged) 

func textFieldDidChange(textField: UITextField) { 
    //todo: how to let other clients know?    
} 

タイピングが検出されたら、他のクライアントにそのことを知らせるにはどうしたらいいですか?クライアント自体がsocket.emitを実行することは可能ですか?それとも、サーバーに送信してサーバーで発光させる必要がありますか?

私はsocket.emitを実行しようとしましたが、socket.onはシグナルを受け取ることはありません。サーバーがsocket.emitを実行すると、私のsocket.onリスナーがシグナルを受信します。

答えて

0

次のようなものですか:(これはJavascriptであるが、概念は、あなたがそれをやって行くだろうかとここにある)

クライアント

const input = document.querySelector('input') 
const writing = document.querySelector('p') 

input.addEventListener('keyup',() => { 
    socket.emit('areTheyTyping', { 
    typing: true 
    }) 
    if (input.value.length === 0) { 
    socket.emit('areTheyTyping', { 
     typing: false 
    }) 
    } 
}) 

socket.on('areTheyTyping', function(data) { 
    if (data.typing) { 
    writing.innerHTML = 'User is writing' 
    } else { 
    writing.innerHTML = '' 
    } 
}) 

サーバー

io.on('connection', function(socket) { 
    const _id = socket.id 
    socket.on('areTheyTyping', function(data) { 
    if(data.typing) { 
     io.emit('areTheyTyping', {typing: true}) 
    } else { 
     io.emit('areTheyTyping', {typing: false}) 
    } 
    }) 
})