"Avec socket.io, je souhaite diffuser un message envoyé par l'utilisateur uniquement à un sous-ensemble de tous les clients, le sous-ensemble étant situé à une certaine distance de l'utilisateur émettant le message (disons 1km). besoin d'ajouter quelque chose comme ça (http://stackoverflow.com/questions/27928/how-do-i-calculate-distance-between-two-latitude-longitude-points) à la [socket.on 'broadcast', (message)] section du code ci-dessous (s'il vous plaît noter que ceci est coffeescript et tiré du repo de github d'exemple de géochat de Shoaib Burq (https://github.com/sabman/geochat-example)). " Maintenant, y compris les suggestions de Ricardo, en remplaçant l'ancienne section [socket.on 'broadcast', (message) ->] par son entrée (bien que j'ai changé "user" en "record" pour rester cohérent avec le reste du serveur code .coffee), et la section [find:] à la fin. Quelque chose ne va pas, cependant, et je ne suis pas sûr si cela a à voir avec le code html ou les mises à jour du café. Merci encore à l'avance ..socket.io: diffusion à des clients dans une certaine distance géographique?
Le code ne fonctionne toujours pas. Y compris les plus récentes suggestions de Ricardo:
socket.on 'broadcast', (message) ->
# find the sender and extract it's position
Character.find { clientId: socket.id }, (record) =>
chat_data =
user: record
conversation: message
[lat, lng] = record.geometry.coordinates
# find everyone within a 1km square
km = 1/111
area =
type: 'Polygon'
coordinates: [
[lat - km, lng - km]
[lat + km, lng - km]
[lat + km, lng + km]
[lat - km, lng + km]
]
Character.find { within: area }, (record) ->
// send message to each user
socket.broadcast.send JSON.stringify(chat_data)
J'ai l'impression que le problème peut résider dans la section 'find'. Par exemple, Ricardo a écrit
console.log ">> find #{JSON.stringify(attrs)}"
Mais dans le code d'origine, ce lit avec un "=>" au lieu de ">>":
console.log "=> find #{JSON.stringify(attrs)}"
qs = require 'querystring'
find: (query, callback) ->
console.log ">> find #{JSON.stringify(attrs)}"
q = { operator: "or", properties: attrs }
url = lyr_config_characters.api_url
key = lyr_config_characters.acl.get
if query.id?
url += "/#{attrs.id}?" + qs.stringify({ key })
else if query.within?
url += "/functions/within?" + qs.stringify({ key, input : query.within })
else
url += qs.stringify { key, input: q }
req =
method: "GET"
uri: url
headers: { "Content-Type": "application/json" }
request req, (error, response, body) ->
console.log error if error
console.log "<< find #{body}"
callback JSON.parse body ? '{}'
Merci!
Qu'est-ce que 'Character'? –
Merci, Ricardo. Le reste du code est ici: https://github.com/sabman/geochat-example/blob/master/server.coffee – keypulsations