示例#1
0
 private void CheckAndAddIfNewClient(ClientFrequencyUpdate clientFrequencyUpdate)
 {
     if (clients.ContainsKey(clientFrequencyUpdate.Callsign))
     {
         clients[clientFrequencyUpdate.Callsign].MobileClientOnline();
     }
     else
     {
         clients[clientFrequencyUpdate.Callsign] = Client.NewMobileClientOnline(ClientConfigurationManager.Instance.DefaultRadioMobileConfig, clientFrequencyUpdate.Callsign);
     }
 }
示例#2
0
 public void Frequency(string frequency)
 {
     _lastClientFrequencyUpdate = new ClientFrequencyUpdate()
     {
         Callsign = callsign, Frequency = frequency
     };
     if (started)
     {
         dataPublishInputQueue.Add(_lastClientFrequencyUpdate);         //Server will just ignore if it's a fixed position
     }
 }
示例#3
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;
            }
        }
示例#4
0
 private void UpdateMobileClientFrequency(ClientFrequencyUpdate clientFrequencyUpdate)
 {
     clients[clientFrequencyUpdate.Callsign].Frequency = clientFrequencyUpdate.Frequency;
 }