Пример #1
0
 private void Disconnect(UserClickedLogoffMessage msg, VSPCContext context)
 {
     context.FSDIsConnected = false;
     fsdSession.SendPDU(new PDUDeletePilot(msg.Callsign, context.CID));
     fsdSession.Disconnect();
     broker.Publish(new FSDDisconnectedMessage());
 }
Пример #2
0
        public void HandleMessage(AMessage message, VSPCContext context)
        {
            var  textMessage  = (ATextMessage)message;
            bool messageShown = false;

            mainWindow.DoInUIThread(() =>
            {
                foreach (var ccTab in mainWindow.CommChannelTabs.Where(t => !t.IsAllTab))
                {
                    if (ccTab.MessageBelongsToMe(textMessage, context.Callsign))
                    {
                        messageShown |= (!ccTab.IsAllTab || textMessage.SenderIsServer);     // Only mark message as shown if the message is shown in a tab other than "All" with server messages as exception
                        ccTab.ShowMessage(textMessage);
                    }
                }
                if (!messageShown && NewTabShouldBeOpened(textMessage, context))
                {
                    CommChannelTab newCommTab = mainWindow.AddNewCommTab(textMessage.Sender);
                    newCommTab.ShowMessage(textMessage);
                    messageShown = true;
                }

                var allTab = mainWindow.CommChannelTabs.Single(t => t.IsAllTab);
                if (messageShown || textMessage.SenderIsServer)
                {
                    allTab.ShowMessage(textMessage);
                }
            });
        }
Пример #3
0
 public override void HandleMessage(AMessage message, VSPCContext context)
 {
     if (message is UserClickedLoginMessage)
     {
         Connect((UserClickedLoginMessage)message, context);
     }
     else if (message is UserClickedLogoffMessage)
     {
         Disconnect((UserClickedLogoffMessage)message, context);
     }
     else if (message is PositionReportMessage)
     {
         SendPositionReportToFSDServer((PositionReportMessage)message, context);
     }
     else if (message is ErrorMessage)
     {
         Logger.Error("FSD Error received: {0} {1} {2}", ((ErrorMessage)message).ErrorCode, ((ErrorMessage)message).ErrorInfo, ((ErrorMessage)message).ErrorText);
     }
     else if (message is VSPC.Core.Messages.FLSIM.FlightsimConnectedMessage)
     {
         context.FlightsimIsConnected = true;
     }
     else if (message is VSPC.Core.Messages.FLSIM.FlightsimDisconnectedMessage)
     {
         context.FlightsimIsConnected = false;
     }
     else if (message is TextMessageSend)
     {
         SendTextMessage((TextMessageSend)message);
     }
     else
     {
         Logger.Error("Unexpected message type received in FSDMessageHandler: " + message.GetType().Name);
     }
 }
Пример #4
0
 public void HandleMessage(AMessage message, VSPCContext context)
 {
     if (InvokeRequired)
     {
         BeginInvoke(new InvokeDelegate(() => HandleMessage(message, context)));
     }
     else
     {
         textBoxMessages.Text += message.ToString() + Environment.NewLine;
     }
 }
Пример #5
0
 private void Connect(UserClickedLoginMessage msg, VSPCContext context)
 {
     this.context = context;
     fsdSession   = new FSDSession(new ClientProperties("Claus Joergensen Client", new Version(1, 0), 0x5820, "163f6a324730ed0aa1ba30b29148687c"), msg);
     fsdSession.ServerIdentificationReceived += fsdSession_ServerIdentificationReceived;
     fsdSession.ClientQueryReceived          += fsdSession_ClientQueryReceived;
     fsdSession.TextMessageReceived          += fsdSession_TextMessageReceived;
     fsdSession.ATCPositionReceived          += fsdSession_ATCPositionReceived;
     fsdSession.PilotPositionReceived        += fsdSession_PilotPositionReceived;
     fsdSession.NetworkError          += fsdSession_NetworkError;
     fsdSession.ProtocolErrorReceived += fsdSession_ProtocolErrorReceived;
     fsdSession.KillRequestReceived   += fsdSession_KillRequestReceived;
     fsdSession.IgnoreUnknownPackets   = true;
     fsdSession.Connect(msg.Server, 6809);
 }
Пример #6
0
 public void HandleMessage(Core.Messages.AMessage message, VSPCContext context)
 {
     if (message is FlightsimConnectedMessage)
     {
         FlightsimState = ConnectionState.Online;
         if (FSDState == ConnectionState.Online)
         {
             SwitchToOnlineMode();
         }
     }
     else if (message is FSDConnectedMessage)
     {
         FSDState = ConnectionState.Online;
         if (FlightsimState == ConnectionState.Online)
         {
             SwitchToOnlineMode();
         }
     }
     else if (message is FlightsimDisconnectedMessage)
     {
         FlightsimState = ConnectionState.Offline;
         if (FSDState == ConnectionState.Offline)
         {
             SwitchToOfflineMode();
         }
     }
     else if (message is FSDDisconnectedMessage)
     {
         FSDState = ConnectionState.Offline;
         if (FlightsimState == ConnectionState.Offline)
         {
             SwitchToOfflineMode();
         }
     }
     else if (message is CommErrorMessage)
     {
         HandleCommErrorMessage((CommErrorMessage)message);
     }
     else if (message is SimCommErrorMessage)
     {
         HandleCommErrorMessage((SimCommErrorMessage)message);
     }
     else if (message is TextMessageReceive)
     {
         HandleTextMessageReceive((TextMessageReceive)message);
     }
 }
Пример #7
0
 public void HandleMessage(Core.Messages.AMessage message, VSPCContext context)
 {
     if (message is TrafficPositionReportMessage && isSavingPosRepMessages)
     {
         var tp = (TrafficPositionReportMessage)message;
         saveFile.WriteLine(string.Format("{0}:{1}:{2}:{3}:{4}:{5}:{6}:{7}",
                                          tp.Latitude,
                                          tp.Longitude,
                                          tp.TrueAltitude,
                                          tp.PressureAltitude,
                                          tp.Groundspeed,
                                          tp.Heading,
                                          tp.BankAngle,
                                          tp.Pitch));
     }
     DoInUIThread(() => FSDMessages.Add((AFSDMessage)message));
 }
Пример #8
0
 public abstract void HandleMessage(AMessage message, VSPCContext context);
Пример #9
0
 private bool NewTabShouldBeOpened(ATextMessage textMessage, VSPCContext context)
 {
     return(!textMessage.SenderIsServer && textMessage.Receiver == context.Callsign);
 }
Пример #10
0
 private void SendPositionReportToFSDServer(PositionReportMessage positionReportMessage, VSPCContext context)
 {
     if (context.FSDIsConnected && fsdSession.Connected)
     {
         // TODO: TrueAlt + PressureAlt
         fsdSession.SendPDU(new PDUPilotPosition(context.Callsign, positionReportMessage.Transponder, positionReportMessage.SquawkingCharlie, positionReportMessage.Identing, NetworkRating.OBS, positionReportMessage.Latitude, positionReportMessage.Longitude, (int)Math.Round(positionReportMessage.TrueAltitude), (int)Math.Round(positionReportMessage.PressureAltitude), (int)Math.Round(positionReportMessage.Groundspeed), (int)Math.Round(positionReportMessage.Pitch), (int)Math.Round(positionReportMessage.Bank), (int)Math.Round(positionReportMessage.Heading)));
     }
 }
Пример #11
0
 public abstract void HandleMessage(AMessage message, VSPCContext context);