Exemple #1
0
 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);
     }
 }
Exemple #2
0
        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);
        }
Exemple #3
0
 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
     }
 }
Exemple #4
0
        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();
                            }
                        });
                    }
                }
            }
        }
Exemple #5
0
        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;
            }
        }
Exemple #6
0
        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);
        }
Exemple #7
0
 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;
 }