コード例 #1
0
ファイル: TextMessageHandler.cs プロジェクト: chembergj/VSPC
        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);
                });
        }
コード例 #2
0
 public void TestMessageToString()
 {
     var message = new AMessage();
     var myIdValue = message.MessageId.Value;
     message.Should().NotBeNull();
     message.ToString().Should().Be(myIdValue);
 }
コード例 #3
0
		public void Run()
		{
			Stopwatch timer = Stopwatch.StartNew();

			const int channelCount = 10000;
			const int seedCount = 500;

			var channels = new UntypedChannel[channelCount];
			var connections = new ChannelConnection[channelCount];

			var complete = new Future<int>();

			var latch = new CountdownLatch(channelCount*seedCount, complete.Complete);

			for (int i = 0; i < channelCount; i++)
			{
				int channelNumber = i;
				channels[i] = new ChannelAdapter();
				connections[i] = channels[i].Connect(x =>
					{
						x.AddConsumerOf<AMessage>()
							.UsingConsumer(message =>
								{
									if (channelNumber < channels.Length - 1)
										channels[channelNumber + 1].Send(message);

									latch.CountDown();
								});
					});
			}

			var body = new AMessage();

			for (int i = 0; i < seedCount; i++)
			{
				channels[i].Send(body);

				for (int j = 0; j < i; j++)
					latch.CountDown();
			}

			bool completed = complete.WaitUntilCompleted(2.Minutes());

			timer.Stop();

			connections.Each(x => x.Dispose());
			

			if (!completed)
			{
				Console.WriteLine("Process did not complete");
				return;
			}

			Console.WriteLine("Processed {0} messages in with {1} channels in {2}ms", seedCount, channelCount,
			                  timer.ElapsedMilliseconds);

			Console.WriteLine("That's {0} messages per second!", ((long)seedCount*channelCount*1000)/timer.ElapsedMilliseconds);
		}
コード例 #4
0
ファイル: MessageBroker.cs プロジェクト: chembergj/VSPC
 public void Publish(AMessage msg)
 {
     List<IVSPCMessageHandler> filteredHandlers;
     if (messageHandlers.TryGetValue(msg.GetType(), out filteredHandlers))
     {
         filteredHandlers.ForEach(h => h.HandleMessage(msg, context));
     }
 }
コード例 #5
0
ファイル: Form1.cs プロジェクト: chembergj/VSPC
 public void HandleMessage(AMessage message, VSPCContext context)
 {
     if (InvokeRequired)
     {
         BeginInvoke(new InvokeDelegate(() => HandleMessage(message, context)));
     }
     else
     {
         textBoxMessages.Text += message.ToString() + Environment.NewLine;
     }
 }
コード例 #6
0
ファイル: VSPCMessageHandler.cs プロジェクト: chembergj/VSPC
 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);
 }
コード例 #7
0
ファイル: Client.cs プロジェクト: gamepopper/GPNetwork
        public void RecieveMessages()
        {
            if (!Client.Connected)
                throw new NotConnectedException();

            try
            {
                while (isConnected)
                {
                    if (Stream.DataAvailable)
                    {
                        AMessage recieveMessage = binary.Deserialize(Stream) as AMessage;

                        if (recieveMessage != null)
                        {
                            lastMessage = recieveMessage;
                        }
                    }
                }
            }
            catch (Exception e)
            {
                Console.WriteLine("Unexpected Error: " + e.Message);
            }
        }
コード例 #8
0
ファイル: InnerMessageDispatcher.cs プロジェクト: lzchina/ET
        public void Dispatch(Session session, ushort opcode, int offset, byte[] messageBytes, AMessage message)
        {
            // 收到actor rpc request
            if (message is ActorRpcRequest actorRpcRequest)
            {
                Entity entity = Game.Scene.GetComponent <ActorManagerComponent>().Get(actorRpcRequest.Id);
                if (entity == null)
                {
                    Log.Warning($"not found actor: {actorRpcRequest.Id}");
                    ActorRpcResponse response = new ActorRpcResponse
                    {
                        RpcId = actorRpcRequest.RpcId,
                        Error = ErrorCode.ERR_NotFoundActor
                    };
                    session.Reply(response);
                    return;
                }
                entity.GetComponent <ActorComponent>().Add(new ActorMessageInfo()
                {
                    Session = session, Message = actorRpcRequest
                });
                return;
            }

            // 收到actor消息分发给actor自己去处理
            if (message is ActorRequest actorRequest)
            {
                Entity entity = Game.Scene.GetComponent <ActorManagerComponent>().Get(actorRequest.Id);
                if (entity == null)
                {
                    Log.Warning($"not found actor: {actorRequest.Id}");
                    ActorResponse response = new ActorResponse
                    {
                        RpcId = actorRequest.RpcId,
                        Error = ErrorCode.ERR_NotFoundActor
                    };
                    session.Reply(response);
                    return;
                }
                entity.GetComponent <ActorComponent>().Add(new ActorMessageInfo()
                {
                    Session = session, Message = actorRequest
                });
                return;
            }

            if (message is AMessage || message is ARequest)
            {
                Game.Scene.GetComponent <MessageDispatherComponent>().Handle(session, message);
                return;
            }

            throw new Exception($"message type error: {message.GetType().FullName}");
        }
コード例 #9
0
ファイル: AVSPCMessageHandler.cs プロジェクト: chembergj/VSPC
 public abstract void HandleMessage(AMessage message, VSPCContext context);
コード例 #10
0
ファイル: Client.cs プロジェクト: gamepopper/GPNetwork
 public void SendMessage(AMessage sendMessage)
 {
     if (sendMessage.Message != "")
     {
         sendMessage.ID = ClientNumber;
         binary.Serialize(Stream, sendMessage);
     }
 }
コード例 #11
0
 public Task Handle(AMessage message, IMessageHandlerContext context)
 {
     return(Task.FromResult(0));
 }
コード例 #12
0
 public Task <SagaWithNoCorrelation.SagaData> FindBy(AMessage message, SynchronizedStorageSession session, ReadOnlyContextBag context, CancellationToken cancellationToken = default) => null;
コード例 #13
0
 public MessageValidator(AMessage mess)
 {
     _mess = mess;
 }
コード例 #14
0
 public Task <SagaWithNoCorrelation.SagaData> FindBy(AMessage message, SynchronizedStorageSession session, ReadOnlyContextBag context)
 {
     return(null);
 }
コード例 #15
0
ファイル: AWindowHelper.cs プロジェクト: 67-6f-64/SputnikAsm
 /// <summary>
 ///     Sends the specified message to a window or windows.
 ///     The SendMessage function calls the window procedure for the specified window and does not return until the window
 ///     procedure has processed the message.
 /// </summary>
 /// <param name="message">The message data to send.</param>
 public static IntPtr SendMessage(AMessage message)
 {
     return(SendMessage(message.HWnd, message.Msg, message.WParam, message.LParam));
 }
コード例 #16
0
        public async void Dispatch(Session session, Opcode opcode, int offset, byte[] messageBytes, AMessage message)
        {
            // gate session收到actor消息直接转发给actor自己去处理
            if (message is AActorMessage)
            {
                long       unitId     = session.GetComponent <SessionPlayerComponent>().Player.UnitId;
                ActorProxy actorProxy = Game.Scene.GetComponent <ActorProxyComponent>().Get(unitId);
                actorProxy.Send(message);
                return;
            }

            // gate session收到actor rpc消息,先向actor 发送rpc请求,再将请求结果返回客户端
            if (message is AActorRequest aActorRequest)
            {
                long       unitId     = session.GetComponent <SessionPlayerComponent>().Player.UnitId;
                ActorProxy actorProxy = Game.Scene.GetComponent <ActorProxyComponent>().Get(unitId);
                uint       rpcId      = aActorRequest.RpcId;
                AResponse  response   = await actorProxy.Call <AResponse>(aActorRequest);

                response.RpcId = rpcId;
                session.Reply(response);
                return;
            }

            if (message != null)
            {
                Game.Scene.GetComponent <MessageDispatherComponent>().Handle(session, message);
                return;
            }

            throw new Exception($"message type error: {message.GetType().FullName}");
        }
        public void TestDisposeWhileHandlingMessageOnReceive()
        {
            DeleteQueues();
            try
            {
                var publishedMessage = new AMessage();

                using (var sendingBus = DependencyResolver.Get<ISendingBus>())
                {
                    var receivingBus = DependencyResolver.Get<IReceivingBus>();

                    var subscriptionId = SubscriptionId.FromString("TestDisposeWhileHandlingMessageOnReceive");

                    var messageReceived = false;

                    receivingBus.Receive<AMessage>(subscriptionId, m =>
                    {
                        messageReceived = true;
                        Thread.Sleep(10000); // It will take 10 seconds, but the ReceivingBus will be disposed after just 1 second
                    });

                    sendingBus.Send(publishedMessage, subscriptionId, StorageType.NonPersistent);

                    Thread.Sleep(1000);

                    Assert.IsTrue(messageReceived, "Message should be received by the message handler!");

                    try
                    {
                        receivingBus.Dispose();
                    }
                    catch
                    {
                        Assert.Fail("Exception disposing ReceivingBus while handling received message!");
                    }
                }
            }
            finally
            {
                DeleteQueues();
            }
        }
        public void TestAutoConnectAfterReceive()
        {
            DeleteQueues();
            try
            {
                var publishedMessage = new AMessage();
                MessageId receivedMessageId = null;
                var expectedMessageId = publishedMessage.MessageId;

                using (var sendingBus = DependencyResolver.Get<ISendingBus>())
                {
                    using (var receivingBus = DependencyResolver.Get<IReceivingBus>())
                    {
                        var subscriptionId = SubscriptionId.FromString("TestAutoConnectAfterReceive");

                        receivingBus.Receive<AMessage>(subscriptionId, m => receivedMessageId = ((AMessage)m).MessageId);

                        RestartMessageBrokerToForceConnectionToBeLost();

                        sendingBus.Send(publishedMessage, subscriptionId, StorageType.NonPersistent);

                        Thread.Sleep(1000);

                        receivedMessageId.Should().Be(expectedMessageId, "The sent message should be received even if the connection was closed after the receiving!");
                    }
                }
            }
            finally
            {
                DeleteQueues();
            }
        }
コード例 #19
0
 public void TestMessageReferenceInequality()
 {
     var aMessage = new AMessage();
     var anotherMessage = new AMessage();
     Assert.False(aMessage.Equals(anotherMessage), "Message inequality failed: {0} != {1}", aMessage, anotherMessage);
 }
コード例 #20
0
 public MessageInfo(ushort opcode, AMessage message)
 {
     this.Opcode  = opcode;
     this.Message = message;
 }
コード例 #21
0
ファイル: TCPServer.cs プロジェクト: kimballjohnson/GPNetwork
        private void ClientMethod(Object obj)
        {
            Client client = obj as Client;

            if (client != null)
            {
                try
                {
                    while (client.Connected)
                    {
                        AMessage recievedMessage = binary.Deserialize(client.Stream) as AMessage;

                        if (recievedMessage != null)
                        {
                            if (recievedMessage.Type == MessageType.LEAVE && recievedMessage.ID == client.ClientNumber)
                            {
                                client.Connected = false;
                                userList.Remove(client);
                            }

                            if (recievedMessage.Type == MessageType.CLIENTCOUNT)
                            {
                                messageQueue.Enqueue("Client Count Request From: " + recievedMessage.ID);
                                recievedMessage.Message = "" + userList.Count;
                                SendMessageToAll(recievedMessage);
                            }
                            else if (recievedMessage.Type == MessageType.INFOTO1)
                            {
                                string id = recievedMessage.Message.Split(';')[0];
                                recievedMessage.Message = recievedMessage.Message.Substring(id.Length + 1);

                                messageQueue.Enqueue("Client " + recievedMessage.ID + " - " + recievedMessage.Message + " - To: " + id);

                                SendMessageToOne(recievedMessage, Convert.ToInt32(id));
                            }
                            else if (recievedMessage.Type == MessageType.INFOEXCEPT1)
                            {
                                string id = recievedMessage.Message.Split(';')[0];
                                recievedMessage.Message = recievedMessage.Message.Substring(id.Length + 1);

                                messageQueue.Enqueue("Client " + recievedMessage.ID + " - " + recievedMessage.Message + " - Except: " + id);

                                SendMessageToAllButOne(recievedMessage, Convert.ToInt32(id));
                            }
                            else
                            {
                                messageQueue.Enqueue("Client " + recievedMessage.ID + " - " + recievedMessage.Message + " - To All");
                                SendMessageToAll(recievedMessage);
                            }
                        }
                    }
                }
                catch (Exception e)
                {
                    messageQueue.Enqueue(e.Message + ": " + e.TargetSite);
                }
                finally
                {
                    userList.Remove(client);
                    messageQueue.Enqueue("Client " + client.ClientNumber + " Removed");
                }
            }
        }