private void CheckAndAddIfNewClient(ClientPositionUpdate clientPositionUpdate) { if (clients.ContainsKey(clientPositionUpdate.Callsign)) { clients[clientPositionUpdate.Callsign].MobileClientOnline(); } else { clients[clientPositionUpdate.Callsign] = Client.NewMobileClientOnline(ClientConfigurationManager.Instance.DefaultRadioMobileConfig, clientPositionUpdate.Callsign); } }
public void SendPlayerLocation(Player player) { if (!_socket.Connected) { return; } ClientPositionUpdate update = new ClientPositionUpdate((int)player.Position.X, (int)player.Position.Y, player.Direction, player.Moving); SendResponse(update); }
public void Position(double latDeg, double lonDeg, double groundAltM) { _lastClientPosition = new ClientPositionUpdate() { Callsign = callsign, LatDeg = latDeg, LonDeg = lonDeg, GroundAltMeters = groundAltM }; if (started) { dataPublishInputQueue.Add(_lastClientPosition); //Server will just ignore if it's a fixed position } }
private void ClientDataReceived(Client client, IClientUpdate update) { // Don't process input from dead players if (client.LocalPlayer.Dead) { return; } if (update is ClientPositionUpdate) { ClientPositionUpdate posUpdate = (ClientPositionUpdate)update; client.LocalPlayer.X = posUpdate.X; client.LocalPlayer.Y = posUpdate.Y; client.LocalPlayer.Direction = posUpdate.Direction; client.LocalPlayer.Moving = posUpdate.Moving; } else if (update is ClientBombSet) { SetBomb(client, (ClientBombSet)update); } else if (update is ClientStatusUpdate) { ClientStatusUpdate statusUpdate = (ClientStatusUpdate)update; if (statusUpdate.Update == ClientUpdate.BombTrigger && client.LocalPlayer.ManualTrigger) { lock (_bombs) { _bombs.ForEach(bomb => { if (bomb.OwnerColor == client.LocalPlayer.Color) { bomb.Trigger(); } }); } } } }
private void TaskClientDataSub(CancellationToken cancelToken, BlockingCollection <object> queue, string bind) { using (var subSocket = new SubscriberSocket()) { subSocket.Options.ReceiveHighWatermark = 50; subSocket.Bind(bind); subSocket.Subscribe(""); while (!cancelToken.IsCancellationRequested) { var messageTopicReceived = subSocket.ReceiveFrameString(); int bytesReceived = 0; switch (messageTopicReceived) { case "ClientHeartbeat": ClientHeartbeat clientHeartbeat = subSocket.Deserialise <ClientHeartbeat>(out bytesReceived); serverStatistics.DataBytesReceived += bytesReceived; CheckAndAddIfNewClient(clientHeartbeat); break; case "ClientPositionUpdate": ClientPositionUpdate clientPositionUpdate = subSocket.Deserialise <ClientPositionUpdate>(out bytesReceived); serverStatistics.DataBytesReceived += bytesReceived; CheckAndAddIfNewClient(clientPositionUpdate); UpdateMobileClientPosition(clientPositionUpdate); break; case "ClientFrequencyUpdate": ClientFrequencyUpdate clientFrequencyUpdate = subSocket.Deserialise <ClientFrequencyUpdate>(out bytesReceived); serverStatistics.DataBytesReceived += bytesReceived; CheckAndAddIfNewClient(clientFrequencyUpdate); UpdateMobileClientFrequency(clientFrequencyUpdate); break; } } taskClientDataSub = null; } }
private IClientUpdate GetUpdate(byte[] buffer, int offset, int length) { MemoryStream ms = new MemoryStream(buffer, offset, length); ClientMessageTypes msgType = (ClientMessageTypes)ms.ReadByte(); switch (msgType) { case ClientMessageTypes.StatusUpdate: ClientStatusUpdate statusUpdate = Serializer.DeserializeWithLengthPrefix <ClientStatusUpdate>(ms, PrefixStyle.Base128); return(statusUpdate); case ClientMessageTypes.PositionUpdate: ClientPositionUpdate positionUpdate = Serializer.DeserializeWithLengthPrefix <ClientPositionUpdate>(ms, PrefixStyle.Base128); return(positionUpdate); case ClientMessageTypes.BombSet: ClientBombSet bombSetUpdate = Serializer.DeserializeWithLengthPrefix <ClientBombSet>(ms, PrefixStyle.Base128); return(bombSetUpdate); } return(null); }
private void UpdateMobileClientPosition(ClientPositionUpdate clientPositionUpdate) { clients[clientPositionUpdate.Callsign].Transceivers[0].LatDeg = clientPositionUpdate.LatDeg; clients[clientPositionUpdate.Callsign].Transceivers[0].LonDeg = clientPositionUpdate.LonDeg; clients[clientPositionUpdate.Callsign].Transceivers[0].GroundAltMeters = clientPositionUpdate.GroundAltMeters; }