public void ChunkIfNeeded_SmallMessage_ReturnedWithoutChanges()
        {
            var message = new BinaryMessage
            {
                MessageId = Guid.NewGuid(),
                Content   = GetByteArray(100)
            };
            var headers           = new MessageHeaderCollection();
            var serializedMessage = _serializer.Serialize(message, headers);
            var rawBrokerMessage  =
                new RawBrokerMessage(message, headers,
                                     new TestProducerEndpoint("test")
            {
                Chunk = new ChunkSettings
                {
                    Size = 500
                }
            })
            {
                RawContent = serializedMessage
            };

            var chunks = ChunkProducer.ChunkIfNeeded(rawBrokerMessage);

            chunks.Should().HaveCount(1);
            chunks.First().Should().BeEquivalentTo(rawBrokerMessage);
        }
        public void ChunkIfNeeded_LargeMessage_Chunked()
        {
            var message = new BinaryMessage
            {
                MessageId = Guid.NewGuid(),
                Content   = GetByteArray(1400)
            };
            var headers = new MessageHeaderCollection
            {
                { MessageHeader.MessageIdKey, "1234" }
            };

            var serializedMessage = _serializer.Serialize(message, headers);
            var rawBrokerMessage  =
                new RawBrokerMessage(message, headers,
                                     new TestProducerEndpoint("test")
            {
                Chunk = new ChunkSettings
                {
                    Size = 500
                }
            })
            {
                RawContent = serializedMessage
            };

            var chunks = ChunkProducer.ChunkIfNeeded(rawBrokerMessage);

            chunks.Should().HaveCount(4);
            chunks.Should().Match(c => c.All(m => m.RawContent.Length < 1000));
        }
예제 #3
0
 internal static void Push(RtmpConnection connection, IMessage message, IMessageClient messageClient)
 {
     if (connection != null)
     {
         object obj2 = message;
         if (message is BinaryMessage)
         {
             BinaryMessage message2 = message as BinaryMessage;
             message2.Update(messageClient);
             byte[]    body   = message2.body as byte[];
             RawBinary binary = new RawBinary(body);
             obj2 = binary;
         }
         else
         {
             message.SetHeader("DSDstClientId", messageClient.ClientId);
             message.clientId = messageClient.ClientId;
         }
         RtmpChannel channel = connection.GetChannel(3);
         FlexInvoke  invoke  = new FlexInvoke {
             Cmd      = "receive",
             InvokeId = connection.InvokeId,
             Response = obj2
         };
         channel.Write(invoke);
     }
 }
예제 #4
0
 public static Started ReadDataFrom(BinaryReader reader)
 {
     return(new Started
     {
         Command = BinaryMessage.ReadFrom(reader)
     });
 }
예제 #5
0
 public override void DisAssembleBinaryResult(byte[] message, List <List <byte> > dataRequestBytes)
 {
     if (message != null)
     {
         m_messageFromPLC = new BinaryMessage(message, m_messageToPLC, dataRequestBytes);
     }
 }
예제 #6
0
        private void send(IDestination destination, BinaryMessage message, int ttl, Action <IMessage> tuneMessage = null)
        {
            ITextMessage textMessage = m_Session.CreateTextMessage();

            textMessage.Text = Encoding.UTF8.GetString(message.Bytes ?? new byte[0]);
            IMessage sonicMessage = textMessage;

            sonicMessage.SetStringProperty(TransportConstants.JAILED_PROPERTY_NAME, m_JailedTag);
            sonicMessage.JMSType = message.Type;
            if (tuneMessage != null)
            {
                tuneMessage(sonicMessage);
            }

            foreach (var param in m_CustomHeaders)
            {
                sonicMessage.SetStringProperty(param.Key, param.Value);
            }

            IMessageProducer producer = m_Session.CreateProducer(destination);

            using (Disposable.Create(producer.Close))
            {
                producer.Send(sonicMessage, Constants.DeliveryMode.PERSISTENT, TransportConstants.MESSAGE_DEFAULT_PRIORITY, ttl);
            }
        }
예제 #7
0
        private void send(BinaryMessage message, Endpoint endpoint, int ttl, string processingGroup)
        {
            if (endpoint.Destination == null)
            {
                throw new ArgumentException("Destination can not be null");
            }
            if (m_Disposing.WaitOne(0))
            {
                throw new InvalidOperationException("Engine is disposing");
            }

            using (m_RequestsTracker.Track())
            {
                try
                {
                    var procGroup = m_TransportManager.GetProcessingGroup(endpoint.TransportId, processingGroup);
                    procGroup.Send(endpoint.Destination.Publish, message, ttl);
                }
                catch (Exception e)
                {
                    m_Logger.ErrorException(string.Format("Failed to send message. Transport: {0}, Queue: {1}", endpoint.TransportId, endpoint.Destination), e);
                    throw;
                }
            }
        }
#pragma warning restore 67

        /// <inheritdoc />
        public void Send(BinaryMessage message)
        {
            // Create bytes from message
            var bytes = _validator.Interpreter.SerializeMessage(message);

            _serialPort.Write(bytes, 0, bytes.Length);
        }
예제 #9
0
        private void send(Destination destination, BinaryMessage message, int ttl, Action <Message> tuneMessage = null)
        {
            Message sonicMessage;

            switch (m_MessageFormat)
            {
            case MessageFormat.Text:
                var textMessage = m_Session.createTextMessage();
                textMessage.setText(Encoding.UTF8.GetString(message.Bytes ?? new byte[0]));
                sonicMessage = textMessage;
                break;

            case MessageFormat.Binary:
            default:
                var bytesMessage = m_Session.createBytesMessage();
                bytesMessage.writeBytes(message.Bytes ?? new byte[0]);
                sonicMessage = bytesMessage;
                break;
            }

            sonicMessage.setStringProperty(SonicTransportConstants.JAILED_PROPERTY_NAME, m_JailedTag);
            sonicMessage.setJMSType(message.Type);

            if (tuneMessage != null)
            {
                tuneMessage(sonicMessage);
            }
            MessageProducer producer = m_Session.createProducer(destination);

            using (Disposable.Create(producer.close))
            {
                producer.send(sonicMessage, DeliveryMode.PERSISTENT, DefaultMessageProperties.DEFAULT_PRIORITY, ttl);
            }
            //TODO: destroy session
        }
예제 #10
0
    public void ProcessMessage(BinaryMessage t_recvdMsg)
    {
        GameMessageReader t_reader = new GameMessageReader();
        t_reader.InitAdapter(ref t_recvdMsg);

        switch(t_reader.GetFunctionCode())
        {
            case (ushort)Function_Codes.FUNCTION_USER_NEWROOM:
                {
                    string t_name = "";
                    ushort t_roomType = 0;
                    t_reader.Decode_FunctionUserNewRoom(ref t_roomType,
                                                         ref t_name);

                    if(t_roomType == (ushort)Function_Codes.ROOM_TYPE_CHAT)
                    {
                        Debug.Log("NEW ROOM CHAT!");
                        Room t_room = new Room();
                        t_room.SetRoomInfo(ref t_name, ref t_roomType);
                        m_controller.m_liveController.SendRoomStateData(t_room);
                        if(!m_controller.m_liveController.CheckDataSaved())
                        {

                            m_controller.m_liveController.SendClientUserData(m_clientUser);
                        }
                        Application.LoadLevel(0);
                    }
                    break;
                }
        }
    }
예제 #11
0
        private void processMessage(BinaryMessage binaryMessage, Type type, Action <object> callback, AcknowledgeDelegate ack, Endpoint endpoint)
        {
            object message = null;

            try
            {
                message = m_SerializationManager.Deserialize(endpoint.SerializationFormat, binaryMessage.Bytes, type);
            }
            catch (Exception e)
            {
                m_Logger.ErrorException(string.Format("Failed to deserialize message. Transport: {0}, Destination: {1}, Message Type: {2}",
                                                      endpoint.TransportId, endpoint.Destination, type.Name), e);
                //TODO: need to unack without requeue
                ack(DEFAULT_UNACK_DELAY, false);
            }

            try
            {
                callback(message);
            }
            catch (Exception e)
            {
                m_Logger.ErrorException(string.Format("Failed to handle message. Transport: {0}, Destination: {1}, Message Type: {2}",
                                                      endpoint.TransportId, endpoint.Destination, type.Name), e);
                ack(DEFAULT_UNACK_DELAY, false);
            }
        }
        public async Task WritingNotifiesCallbackWhenHostHasClosed()
        {
            var wroteMessage = new TaskCompletionSource <Unit>();
            var hostClosed   = new AutoResetEvent(false);
            var exception    = new TaskCompletionSource <Exception>();
            var disposed     = false;
            var hostTask     = Pipe.Host(_pipeName);
            var task         = Task.Run(() =>
            {
                using (_pipeName.BeginWritingMessages("name", e => exception.SetResult(e), Observable.Create <IBinaryMessage>(obs =>
                {
                    obs.OnNext(IntMessage.Compose(42));
                    wroteMessage.SetResult(Unit.Default);
                    hostClosed.WaitOne();
                    obs.OnNext(IntMessage.Compose(43));
                    return(Disposable.Create(() => disposed = true));
                }))){}
            });
            var host = await hostTask;
            await wroteMessage.Task;

            using (var reader = new BinaryReader(host))
            {
                var msg = IntMessage.TryParse(BinaryMessage.ReadFrom(reader));
                Assert.AreEqual(42, msg.Value);
            }
            Assert.IsFalse(exception.Task.IsCompleted);
            host.Close();
            hostClosed.Set();
            await task;

            Assert.IsNotNull(await exception.Task);
            Assert.IsTrue(disposed);
        }
예제 #13
0
        public byte[] GetToken()
        {
            Send(BinaryMessage.Make(CMD_GETTOKEN).Complete());
            var reply = GetReply();

            return(reply.Type == 0 ? reply.GetData() : null);
        }
예제 #14
0
        public void Send(
            object message,
            Endpoint endpoint,
            string processingGroup = null,
            Dictionary <string, string> headers = null)
        {
            var type              = GetMessageType(message.GetType());
            var bytes             = m_SerializationManager.SerializeObject(endpoint.SerializationFormat, message);
            var serializedMessage = new BinaryMessage
            {
                Bytes = bytes,
                Type  = type,
            };

            if (headers != null)
            {
                foreach (var header in headers)
                {
                    serializedMessage.Headers[header.Key] = header.Value;
                }
            }
            Send(
                serializedMessage,
                endpoint,
                MESSAGE_DEFAULT_LIFESPAN,
                processingGroup);
        }
예제 #15
0
    public bool AddMessage(ref BinaryMessage t_msg)
    {
        bool messageAdded = false;
        int count = 0;
        byte[] t_buff = t_msg.GetMessageDataWithLen();

        int i = m_endPos;
        int finIndex = GetNextValidIndex(m_endPos, t_msg.GetMessageLen_wLen());

        if (finIndex < m_endPos)
        {
            for (; i < m_bufferSize; i++)
            {
                m_buffer[i] = t_buff[count];
                count++;
            }
            i = GetNextValidIndex(i);
            for (; i < finIndex; i = GetNextValidIndex(i))
            {
                m_buffer[i] = t_buff[count];
                count++;
            }
        }
        else
        {
            for (; i < finIndex; i = GetNextValidIndex(i))
            {
                m_buffer[i] = t_buff[count];
                count++;
            }
        }
        m_endPos = GetNextValidIndex(m_endPos, t_msg.GetMessageLen_wLen());
        messageAdded = true;
        return messageAdded;
    }
예제 #16
0
        private void Send(
            BinaryMessage message,
            Endpoint endpoint,
            int ttl,
            string processingGroup)
        {
            if (endpoint.Destination == null)
            {
                throw new ArgumentException("Destination can not be null");
            }
            if (m_Disposing.WaitOne(0))
            {
                throw new InvalidOperationException("Engine is disposing");
            }

            using (m_RequestsTracker.Track())
            {
                try
                {
                    m_ProcessingGroupManager.Send(
                        endpoint,
                        message,
                        ttl,
                        GetProcessingGroup(endpoint, processingGroup));
                }
                catch (Exception e)
                {
                    _log.WriteError(nameof(Send), $"Failed to send message. Transport: {endpoint.TransportId}, Queue: {endpoint.Destination}", e);
                    throw;
                }
            }
        }
		public void BinaryMessageBasicSerialization ()
		{
			var m = new BinaryMessage ("Test");
			m.AddArgument ("string", "foo");
			m.AddArgument ("bool", true);
			m.AddArgument ("float", 44f);
			m.AddArgument ("double", 45d);
			m.AddArgument ("short", (short)46);
			m.AddArgument ("int", 47);
			m.AddArgument ("long", 48L);
			m.AddArgument ("byte", (byte)49);
			m.AddArgument ("DateTime", new DateTime (2016, 2, 17));
			m.AddArgument ("TimeSpan", TimeSpan.FromSeconds (44));

			MemoryStream ms = new MemoryStream ();
			m.Write (ms);
			ms.Position = 0;

			m = BinaryMessage.Read (ms);
			Assert.AreEqual (10, m.Args.Count);
			Assert.AreEqual ("foo", m.GetArgument ("string"));
			Assert.AreEqual (true, m.GetArgument ("bool"));
			Assert.AreEqual (44f, m.GetArgument ("float"));
			Assert.AreEqual (45d, m.GetArgument ("double"));
			Assert.AreEqual ((short)46, m.GetArgument ("short"));
			Assert.AreEqual (47, m.GetArgument ("int"));
			Assert.AreEqual (48L, m.GetArgument ("long"));
			Assert.AreEqual ((byte)49, m.GetArgument ("byte"));
			Assert.AreEqual (new DateTime (2016, 2, 17), m.GetArgument ("DateTime"));
			Assert.AreEqual (TimeSpan.FromSeconds (44), m.GetArgument ("TimeSpan"));
		}
예제 #18
0
        public void DataAndTypeAreReadWriteInvariant()
        {
            var pipe = PipeName.New();

            var outbox = new []
            {
                BinaryMessage.Compose("Elm1", writer => { }),
                BinaryMessage.Compose("Elm1", writer => { }),
                BinaryMessage.Compose("Elm2", writer => writer.Write(new byte[] { 13, 37 })),
                BinaryMessage.Compose("Elm3", writer => writer.Write(new byte[] { 19, 11 })),
                BinaryMessage.Compose("Elm4", writer => { })
            };

            pipe.BeginWritingMessages("Test", ex => Assert.Fail("Write failed: " + ex.Message), outbox.ToObservable());

            var inbox = pipe.ReadMessages("test").RefCount().ToEnumerable().Take(outbox.Length).ToArray();

            Assert.AreEqual(outbox.Length, inbox.Length);

            for (int i = 0; i < outbox.Length; i++)
            {
                Assert.AreEqual(outbox[i].Type, inbox[i].Type);
                CollectionAssert.AreEqual(outbox[i].DumpBytes(), inbox[i].DumpBytes());
            }
        }
		public void BinaryMessageArraySerialization ()
		{
			var m = new BinaryMessage ("Test");
			m.AddArgument ("string", new [] { "foo", "bar" });
			m.AddArgument ("bool", new [] { true, false });
			m.AddArgument ("float", new [] { 44f, 45f });
			m.AddArgument ("double", new [] { 45d, 46d });
			m.AddArgument ("short", new short [] { 46, 47 });
			m.AddArgument ("int", new int [] { 47, 48 });
			m.AddArgument ("long", new [] { 48L, 49L });
			m.AddArgument ("byte", new byte [] { 49, 50 });
			m.AddArgument ("DateTime", new [] { new DateTime (2016, 2, 17), new DateTime (2016, 2, 18) });
			m.AddArgument ("TimeSpan", new [] { TimeSpan.FromSeconds (44), TimeSpan.FromSeconds (45) });

			MemoryStream ms = new MemoryStream ();
			m.Write (ms);
			ms.Position = 0;

			m = BinaryMessage.Read (ms);
			Assert.AreEqual (10, m.Args.Count);
			Assert.AreEqual (new [] { "foo", "bar" }, m.GetArgument ("string"));
			Assert.AreEqual (new [] { true, false }, m.GetArgument ("bool"));
			Assert.AreEqual (new [] { 44f, 45f }, m.GetArgument ("float"));
			Assert.AreEqual (new [] { 45d, 46d }, m.GetArgument ("double"));
			Assert.AreEqual (new short [] { 46, 47 }, m.GetArgument ("short"));
			Assert.AreEqual (new int [] { 47, 48 }, m.GetArgument ("int"));
			Assert.AreEqual (new [] { 48L, 49L }, m.GetArgument ("long"));
			Assert.AreEqual (new byte [] { 49, 50 }, m.GetArgument ("byte"));
			Assert.AreEqual (new [] { new DateTime (2016, 2, 17), new DateTime (2016, 2, 18) }, m.GetArgument ("DateTime"));
			Assert.AreEqual (new [] { TimeSpan.FromSeconds (44), TimeSpan.FromSeconds (45) }, m.GetArgument ("TimeSpan"));
		}
예제 #20
0
        private void Send(PublicationAddress destination, BinaryMessage message, Action <IBasicProperties> tuneMessage = null)
        {
            try
            {
                var properties = m_Model.CreateBasicProperties();

                properties.Headers      = new Dictionary <string, object>();
                properties.DeliveryMode = 2; //persistent
                foreach (var header in message.Headers)
                {
                    properties.Headers[header.Key] = header.Value;
                }
                if (message.Type != null)
                {
                    properties.Type = message.Type;
                }
                tuneMessage?.Invoke(properties);

                properties.Headers.Add("initialRoute", destination.ToString());
                lock (m_Model)
                {
                    m_Model.BasicPublish(destination.ExchangeName, destination.RoutingKey, true, properties, message.Bytes);
                    if (m_ConfirmedSending)
                    {
                        m_Model.WaitForConfirmsOrDie();
                    }
                }
            }
            catch (AlreadyClosedException e)
            {
                m_OnSendFail(this, destination, e);
                throw;
            }
        }
예제 #21
0
        public void BinaryMessageBasicSerialization()
        {
            var m = new BinaryMessage("Test");

            m.AddArgument("string", "foo");
            m.AddArgument("bool", true);
            m.AddArgument("float", 44f);
            m.AddArgument("double", 45d);
            m.AddArgument("short", (short)46);
            m.AddArgument("int", 47);
            m.AddArgument("long", 48L);
            m.AddArgument("byte", (byte)49);
            m.AddArgument("DateTime", new DateTime(2016, 2, 17));
            m.AddArgument("TimeSpan", TimeSpan.FromSeconds(44));

            MemoryStream ms = new MemoryStream();

            m.Write(ms);
            ms.Position = 0;

            m = BinaryMessage.Read(ms);
            Assert.AreEqual(10, m.Args.Count);
            Assert.AreEqual("foo", m.GetArgument("string"));
            Assert.AreEqual(true, m.GetArgument("bool"));
            Assert.AreEqual(44f, m.GetArgument("float"));
            Assert.AreEqual(45d, m.GetArgument("double"));
            Assert.AreEqual((short)46, m.GetArgument("short"));
            Assert.AreEqual(47, m.GetArgument("int"));
            Assert.AreEqual(48L, m.GetArgument("long"));
            Assert.AreEqual((byte)49, m.GetArgument("byte"));
            Assert.AreEqual(new DateTime(2016, 2, 17), m.GetArgument("DateTime"));
            Assert.AreEqual(TimeSpan.FromSeconds(44), m.GetArgument("TimeSpan"));
        }
예제 #22
0
        internal static void Push(RtmpConnection connection, IMessage message, IMessageClient messageClient)
        {
            if (connection != null)
            {
                object response = message;
                if (message is BinaryMessage)
                {
                    BinaryMessage binaryMessage = message as BinaryMessage;
                    binaryMessage.Update(messageClient);
                    byte[] binaryContent = binaryMessage.body as byte[];
                    //byte[] destClientBinaryId = messageClient.GetBinaryId();
                    //Array.Copy(destClientBinaryId, 0, binaryContent, binaryMessage.PatternPosition, destClientBinaryId.Length);

                    RawBinary result = new RawBinary(binaryContent);
                    response = result;
                }
                else
                {
                    //This should be a clone of the original message
                    message.SetHeader(MessageBase.DestinationClientIdHeader, messageClient.ClientId);
                    message.clientId = messageClient.ClientId;
                }

                RtmpChannel channel = connection.GetChannel(3);
                FlexInvoke  reply   = new FlexInvoke();
                Call        call    = new Call("receive", new object[] { response });
                reply.ServiceCall = call;
                //reply.Cmd = "receive";
                //reply.Response = response;
                reply.InvokeId = connection.InvokeId;
                channel.Write(reply);
            }
        }
예제 #23
0
        public override void Send <TMessage>(TMessage message)
        {
            var gridRequest = message as MapRequestGrid;

            if (gridRequest != null)
            {
                var msg = BinaryMessage.Make(MSG_MAPREQ)
                          .Coord(gridRequest.Coord)
                          .Complete();
                Send(msg);
                return;
            }

            var widgetMessage = message as WidgetMessage;

            if (widgetMessage != null)
            {
                var msg = BinaryMessage.Make(RMSG_WDGMSG)
                          .UInt16(widgetMessage.WidgetId)
                          .String(widgetMessage.Name);

                if (widgetMessage.Args != null)
                {
                    msg.List(widgetMessage.Args);
                }

                SendSeqMessage(msg.Complete());
                return;
            }

            throw new ArgumentException($"Unsupported outgoing message type '{message.GetType().Name}'");
        }
예제 #24
0
        private async void SendExecuteAsync()
        {
            var textMessage = new AVIMTextMessage(this.InputText);
            //await ConversationInSession.SendMessageAsync(textMessage);

            var emojiMessage = new Emoji()
            {
                Ecode = "#e001",
            };
            //await ConversationInSession.SendMessageAsync(emojiMessage);

            var emojiV2Message = new EmojiV2("#e001");
            //await ConversationInSession.SendMessageAsync(emojiV2Message);

            var text          = "I love Unity";
            var textBytes     = System.Text.Encoding.UTF8.GetBytes(text);
            var binaryMessage = new BinaryMessage(textBytes);
            await ConversationInSession.SendMessageAsync(binaryMessage);

            //await SendBinaryMessageAsync();
            //App.Current.Dispatcher.Invoke((Action)delegate
            //{
            //    var item = new MessageViewModel(textMessage);
            //    MessagesInSession.Add(item);
            //    this.SelectedItem = item;
            //});
            this.InputText = "";
        }
예제 #25
0
    public int PumpMessageReader(ref Socket t_sock, ref BinaryMessage t_msg)
    {
        int messageRead = -1;

        if (AmountBuffered() > 0)
        {
            ushort t_len = BitConverter.ToUInt16(m_buffer, m_startPos);
            if (AmountBuffered() > t_len)
            {
                byte[] t_msgBuff = new byte[t_len];
                Get(ref t_msgBuff);
                t_msg.AddToMessage(ref t_msgBuff, t_len);
                messageRead = 1;

                return messageRead;
            }
        }
        if (t_sock.Available > 0)
        {
            //Debug.Log("Im inside!");
            byte[] t_buffer = new byte[1024];
            int recvdBytes = t_sock.Receive(t_buffer);
            Put(ref t_buffer, recvdBytes);

            messageRead = 2;
            return messageRead;
        }
        return messageRead;
    }
        public void Send(Endpoint endpoint, BinaryMessage message, int ttl, string processingGroup)
        {
            var group   = GetProcessingGroup(processingGroup);
            var session = m_TransportManager.GetMessagingSession(endpoint, GetSessionName(group, 0));

            group.Send(session, endpoint.Destination.Publish, message, ttl);
        }
예제 #27
0
        public void BinaryMessageArraySerialization()
        {
            var m = new BinaryMessage("Test");

            m.AddArgument("string", new [] { "foo", "bar" });
            m.AddArgument("bool", new [] { true, false });
            m.AddArgument("float", new [] { 44f, 45f });
            m.AddArgument("double", new [] { 45d, 46d });
            m.AddArgument("short", new short [] { 46, 47 });
            m.AddArgument("int", new int [] { 47, 48 });
            m.AddArgument("long", new [] { 48L, 49L });
            m.AddArgument("byte", new byte [] { 49, 50 });
            m.AddArgument("DateTime", new [] { new DateTime(2016, 2, 17), new DateTime(2016, 2, 18) });
            m.AddArgument("TimeSpan", new [] { TimeSpan.FromSeconds(44), TimeSpan.FromSeconds(45) });

            MemoryStream ms = new MemoryStream();

            m.Write(ms);
            ms.Position = 0;

            m = BinaryMessage.Read(ms);
            Assert.AreEqual(10, m.Args.Count);
            Assert.AreEqual(new [] { "foo", "bar" }, m.GetArgument("string"));
            Assert.AreEqual(new [] { true, false }, m.GetArgument("bool"));
            Assert.AreEqual(new [] { 44f, 45f }, m.GetArgument("float"));
            Assert.AreEqual(new [] { 45d, 46d }, m.GetArgument("double"));
            Assert.AreEqual(new short [] { 46, 47 }, m.GetArgument("short"));
            Assert.AreEqual(new int [] { 47, 48 }, m.GetArgument("int"));
            Assert.AreEqual(new [] { 48L, 49L }, m.GetArgument("long"));
            Assert.AreEqual(new byte [] { 49, 50 }, m.GetArgument("byte"));
            Assert.AreEqual(new [] { new DateTime(2016, 2, 17), new DateTime(2016, 2, 18) }, m.GetArgument("DateTime"));
            Assert.AreEqual(new [] { TimeSpan.FromSeconds(44), TimeSpan.FromSeconds(45) }, m.GetArgument("TimeSpan"));
        }
        public void ParseFullDelimiterMessage(int leadingChunk)
        {
            var text = Encoding.Unicode.GetBytes("Wie passend, du kämpfst wie eine Kuh!");

            // Arrange
            var message = new List <byte>();

            for (var i = 1; i <= leadingChunk; i++)
            {
                message.Add((byte)i);
            }
            message.AddRange(TestDelimiterInterpreter.TestStartDelimiter);
            message.AddRange(text);
            message.AddRange(EndDelimiterOnlyInterpreter.TestEndDelimiter);
            var readMessage = message.ToArray();

            // Act
            BinaryMessage published = null;

            Array.Copy(readMessage, 0, _context.ReadBuffer, 0, readMessage.Length);
            _interpreter.ProcessReadBytes(_context, readMessage.Length, m => published = m);

            // Assert
            Assert.IsFalse(_context.StartFound);
            Assert.AreEqual(0, _context.CurrentIndex);

            Assert.NotNull(published);
            Assert.AreEqual(readMessage.Length - leadingChunk, published.Payload.Length);
            Assert.AreEqual(readMessage.Skip(leadingChunk).Sum(e => (short)e), published.Payload.Sum(e => (short)e));
        }
예제 #29
0
 /// <summary>
 /// Create a new Example
 /// </summary>
 public Example()
 {
     Log        = new LogMessage();
     Structures = new StructuresMessage();
     Binary     = new BinaryMessage();
     Types      = new TypesMessage();
 }
예제 #30
0
        public void BinaryMessageMapSerialization()
        {
            Dictionary <string, object> data1 = new Dictionary <string, object> ();

            data1 ["one"] = 1;
            data1 ["two"] = true;

            Dictionary <string, string> data2 = new Dictionary <string, string> ();

            data2 ["one"] = "uno";
            data2 ["two"] = "dos";

            Dictionary <int, double[]> data3 = new Dictionary <int, double[]> ();

            data3 [1] = new double[] { 11, 111 };
            data3 [2] = new double[] { 22, 222 };

            var m = new BinaryMessage("Test");

            m.AddArgument("map1", data1);
            m.AddArgument("map2", data2);
            m.AddArgument("map3", data3);

            MemoryStream ms = new MemoryStream();

            m.Write(ms);
            ms.Position = 0;

            m = BinaryMessage.Read(ms);
            Assert.AreEqual(3, m.Args.Count);
            Assert.AreEqual(data1, m.GetArgument("map1"));
            Assert.AreEqual(data2, m.GetArgument("map2"));
            Assert.AreEqual(data3, m.GetArgument("map3"));
        }
예제 #31
0
 public OnMessageEvent(
     BinaryMessage message,
     uint sequenceNumber,
     uint lifeTimeMilliSeconds
     ) : base(RealtimeEventType.OnMessage, sequenceNumber, lifeTimeMilliSeconds)
 {
     Message = message;
 }
예제 #32
0
 IBinaryMessage MessageFromStream(MemoryStream stream)
 {
     stream.Seek(0, SeekOrigin.Begin);
     using (var reader = new BinaryReader(stream))
     {
         return(BinaryMessage.ReadFrom(reader));
     }
 }
예제 #33
0
 public static Ended ReadDataFrom(BinaryReader reader)
 {
     return(new Ended
     {
         Command = BinaryMessage.ReadFrom(reader),
         Success = reader.ReadBoolean(),
         BuildDirectory = AbsoluteDirectoryPath.Read(reader)
     });
 }
예제 #34
0
 public void Send(
     IMessagingSession messagingSession,
     string publish,
     BinaryMessage message,
     int ttl)
 {
     messagingSession.Send(publish, message, ttl);
     Interlocked.Increment(ref m_SentMessages);
 }
예제 #35
0
 public static IBinaryMessage Compose(OpenGlVersion openGlVersion)
 {
     return(BinaryMessage.Compose(Type, writer =>
     {
         writer.Write(openGlVersion.GlVersion);
         writer.Write(openGlVersion.GlVendor);
         writer.Write(openGlVersion.GlRenderer);
     }));
 }
		public void Connect (int port, object processListener, bool debugMode = false)
		{
			DebugMode = debugMode;
			socket = new TcpClient ("127.0.0.1", port);
			outStream = socket.GetStream ();
			inStream = outStream;

			AddListener (processListener);
			Start ();

			BinaryMessage msg = new BinaryMessage ("Connect");
			WriteMessage (1, msg);
		}
예제 #37
0
    // Update is called once per frame
    void Update()
    {
        if(m_controller.m_liveController != null)
            m_controller.m_liveController.ProcessController();

        if (Input.GetKey("p"))
        {
            BinaryMessage t_msg = new BinaryMessage();
            t_msg.Init(1024);
            GameMessageWriter t_writer = new GameMessageWriter();
            t_writer.InitAdapter(ref t_msg);
            t_writer.Encode_FunctionRequestLeaveGame();
            m_controller.m_liveController.QueueMessage(t_msg);
        }
    }
예제 #38
0
    public void ProcessMessage(BinaryMessage t_recvdMsg)
    {
        GameMessageReader t_reader = new GameMessageReader();
        t_reader.InitAdapter(ref t_recvdMsg);
        Debug.Log(t_reader.GetFunctionCode().ToString() + " tank movement recd\n");
        switch( t_reader.GetFunctionCode ())
        {

            case (ushort)Function_Codes.FUNCTION_TANKROOM_USER_MOVE_TANK:
                {
                    float x = 0;
                    float y = 0;
                    float z = 0;
                    float h = 0;
                    float p = 0;
                    float r = 0;
                    t_reader.Decode_FunctionTankUpdatePOSHPR(ref x ,
                                                           ref y ,
                                                           ref z ,
                                                           ref h ,
                                                           ref p ,
                                                           ref r );
                    transform.position = new Vector3(x, y, z);
                    print(h.ToString() + p.ToString() + r.ToString());
                    Quaternion newOrientation = Quaternion.Euler(new Vector3(h,p,r));
                    transform.rotation = newOrientation;
                    break;
                }
            //case (ushort)Function_Codes.FUNCTION_TANKROOM_USER_ROTATE_TANK:
            //    {
            //        short direction = 0;
            //        t_reader.Decode_FunctionTankUpdateRotation(ref direction);

            //        if(direction == 1 )
            //        {
            //            transform.RotateAroundLocal(Vector3.up, -.02F);
            //        }
            //        if(direction == -1)
            //        {
            //            transform.RotateAroundLocal(Vector3.up, .02F);
            //        }

            //        break;
            //    }
        }
    }
예제 #39
0
    //End message specific process functions-----------------------------------
    public void ProcessMessage(BinaryMessage t_recvdMsg)
    {
        GameMessageReader msgReader = new GameMessageReader();
        msgReader.InitAdapter(ref t_recvdMsg);
        print("FunctionCode " + msgReader.GetFunctionCode());
        switch (msgReader.GetFunctionCode())
        {

            case (ushort)Function_Codes.FUNCTION_USER_LOGIN_RESP:
                {
                    int return_code = 0;
                    msgReader.Decode_FunctionUserLoginResp(ref return_code,
                                                               ref ClientUser.m_id,
                                                               ref ClientUser.m_username);
                    m_currentRoom.AddUserToWindow(ref ClientUser.m_username);
                    break;
                }
            case (ushort)Function_Codes.FUNCTION_USER_NEWROOM:
                {
                    ProcessFunctionUserNewRoom(ref msgReader);
                    break;
                }
            case (ushort)Function_Codes.FUNCTION_USER_IN_ROOM:
                {
                    ProcessClientUserInRoom(ref msgReader);
                    break;
                }
            case (ushort)Function_Codes.FUNCTION_USER_OUT_ROOM:
                {
                    ProcessUserOutRoom(ref msgReader);
                    break;
                }
            case (ushort)Function_Codes.FUNCTION_USER_CHAT:
                {
                    ProcessClientChatMsg(ref msgReader);
                    break;
                }
        }
    }
		public void SendMessage (BinaryMessage msg)
		{
			WriteMessage (1, msg);
		}
예제 #41
0
 //Function: QueueMessage
 //Argument: none
 //Purpose:  Simply to add a message from the Intrested Object to the
 //          buffered writer.
 public void QueueMessage(BinaryMessage t_msg)
 {
     m_writer.AddMessage(ref t_msg);
 }
예제 #42
0
    //Function: PumpRPCQueue()
    //Argument: none
    //Purpose: Function checks the socket for a buffered message. If yes then
    //         check the code of the message through the current function
    //         codes and then send the message off to the Intrested Objects
    //         of that function code.
    private void PumpRPCQueue()
    {
        BinaryMessage t_msg = new BinaryMessage();
           t_msg.Init();
           int pumped = m_reader.PumpMessageReader(ref m_sock, ref t_msg);
           if (pumped == 1)
           {
           GameMessageReader t_readerAdapter = new GameMessageReader();
           t_readerAdapter.InitAdapter(ref t_msg);

           List<IntrestedObj> t_list;
           if (m_funcCodeIntrestList.TryGetValue(t_readerAdapter.GetFunctionCode(),
                                                out t_list))
           {
               t_readerAdapter.ResetToFuncCode();
               foreach (IntrestedObj t_obj in t_list)
               {
                   t_obj.ProcessMessage(t_msg);
               }
           }

           }
    }
예제 #43
0
 public void InitAdapter(ref BinaryMessage t_msg)
 {
     m_readAdapterMsg = t_msg;
     GetInt2u(ref m_functionCode);
 }
예제 #44
0
    //Helper functions for the client class and interfacing into the GUI
    void KeyUpdater()
    {
        if (m_chatClientState == (int)ChatState.CHAT)
        {
            if ((Input.GetKey("enter") || sendButton || Input.GetKey("return")) && textfield != "")
            {
                //do something with textfieldstring here... send it off in chat message
                //ProcessChatMessage( textfield) ????
                m_currentRoom.AddMessageToChatWindow(ClientUser.m_username + ": " + textfield);
                BinaryMessage t_msg = new BinaryMessage();
                t_msg.Init();
                GameMessageWriter t_writer = new GameMessageWriter();
                t_writer.InitAdapter(ref t_msg);

                t_writer.Encode_FunctionUserChat(ref ClientUser.m_username, ref textfield,
                                                  ref ClientUser.m_id);

                m_controller.m_liveController.QueueMessage(t_msg);
                sendButton = false;

                textfield = "";
            }
        }
        else if( m_chatClientState == (int)ChatState.LOGON)
        {
            if ((Input.GetKey("enter") || loginButton || Input.GetKey("return")) && t_userName != "" && t_password != "")
            {
                BinaryMessage t_msg = new BinaryMessage();
                t_msg.Init();
                GameMessageWriter t_writer = new GameMessageWriter();
                t_writer.InitAdapter(ref t_msg);
                t_writer.Encode_FunctionUserLogin(ref t_userName, ref t_password);

                m_controller.m_liveController.QueueMessage(t_msg);

                m_chatClientState = (int)ChatState.CHAT;
            }
        }
    }
예제 #45
0
    void OnGUI()
    {
        if(m_chatClientState == (int)ChatState.LOGON)
        {
            GUI.Box(new Rect(((Screen.width / 2) - 100), 200, 200, 108),
                     "Accts. disabled, enter any info.");
            GUI.Label(new Rect((Screen.width / 2) - 90, 225, 70, 20), "Username:"******"Password:"******"Login"))
            {
                loginButton = true;
            }
        }
        if (m_chatClientState == (int)ChatState.CHAT)
        {

            if (GUI.Button(new Rect(GetPercent(.785F, Screen.width),
                                    GetPercent(.857F, Screen.height),
                                    GetPercent(.205F, Screen.width),
                                    GetPercent(.07F, Screen.height)),
                           "Play Game"))
            {
                BinaryMessage t_msg = new BinaryMessage();
                t_msg.Init();
                GameMessageWriter t_writer = new GameMessageWriter();
                t_writer.InitAdapter(ref t_msg);
                t_writer.Encode_FunctionRequestGame();
                m_controller.m_liveController.QueueMessage(t_msg);
            }
            if (GUI.Button(new Rect(GetPercent(.785F, Screen.width),
                                   GetPercent(.928F, Screen.height),
                                   GetPercent(.205F, Screen.width),
                                   GetPercent(.07F, Screen.height)),
                          "Exit."))
            {

            }

            GUI.Box(new Rect(GetPercent(.015F, Screen.width),
                             GetPercent(.19F, Screen.height),
                             GetPercent(.749F, Screen.width),
                             GetPercent(.61F, Screen.height)), "");

            GUI.Box(new Rect(GetPercent(.785F, Screen.width),
                             GetPercent(.066F, Screen.height),
                             GetPercent(.2F, Screen.width),
                             GetPercent(.773F, Screen.height)), "");

            //GUI.Label(new Rect(GetPercent(.1F, Screen.width),
            //                   GetPercent(.02F, Screen.height),
            //                   300,
            //                   25), "Vesmar Entertainment - Chat Client Alpha");

            // Begin the ScrollView ----- ChatWindow
            int numChatMsg = m_currentRoom.GetChatWindowLen();
            float extraLines = (float)(((numChatMsg + 1) - 28) * 13.1F);
            if (numChatMsg < 28)
            {

                chatWindow = GUI.BeginScrollView(new Rect(GetPercent(.015F, Screen.width),
                                                          GetPercent(.19F, Screen.height),
                                                          GetPercent(.749F, Screen.width),
                                                          GetPercent(.61F, Screen.height))
                                                , chatWindow,
                                                new Rect(0,
                                                         0,
                                                         GetPercent(.55F, Screen.width),
                                                         GetPercent(.61F, Screen.height)));
                //, false, true);

                GUI.Label(new Rect(5,
                             0,
                             GetPercent(.72F, Screen.width),
                             GetPercent(.65F, Screen.height)),
                    //GetPercent(.8F, Screen.height)),
                    m_currentRoom.GetChatWindowString());
            }
            else
            {
                //Debug.Log(chatWindow);
                float size = GetPercent(.61F, Screen.height) + extraLines;
                //print(m_chatBarPriorFramePos.ToString() + System.Convert.ToInt32(chatWindow.y).ToString());
                //if (m_lastFrameNumChatLines != System.Convert.ToInt32(chatWindow.y))
                //{
                //    //Debug.Log("Oh noes");
                //}

                chatWindow = GUI.BeginScrollView(new Rect(GetPercent(.015F, Screen.width),
                                                          GetPercent(.19F, Screen.height),
                                                          GetPercent(.749F, Screen.width),
                                                          GetPercent(.6F, Screen.height))
                                                , chatWindow,
                                                new Rect(0,
                                                         0,
                                                         GetPercent(.55F, Screen.width),
                                                         GetPercent(.61F, Screen.height) + extraLines));
                if (GUI.changed && (numChatMsg == m_lastFrameNumChatLines))
                {
                    m_chatBarPinned = false;

                    if (extraLines - chatWindow.y <= 0.5)
                    {
                        m_chatBarPinned = true;
                    }
                    //print("Pls work");
                }

                if (m_chatBarPinned)
                {
                    chatWindow.y = GetPercent(.61F, Screen.height) + extraLines;
                }
                m_lastFrameNumChatLines = m_currentRoom.GetChatWindowLen();
                GUI.Label(new Rect(5,
                             0,
                             GetPercent(.72F, Screen.width),
                             5000),
                    //GetPercent(.8F, Screen.height)),
                    m_currentRoom.GetChatWindowString());
            }

            // Put something inside the ScrollView
            //innerText = m_currentRoom.GetChatWindowString();

            //innerText = "";
            // End the ScrollView
            GUI.EndScrollView();
            int numUsers = m_currentRoom.GetUserWindowLen();
            //int x = 50;
            float extraLines2 = (float)(((numUsers + 1) - 36) * 13.1F);
            if (numUsers < 36)
            {

                // Begin the ScrollView  -- UserWindow
                userWindow = GUI.BeginScrollView(new Rect(GetPercent(.79F, Screen.width),
                                                          GetPercent(.066F, Screen.height),
                                                          GetPercent(.198F, Screen.width),
                                                          GetPercent(.775F, Screen.height))
                                                , userWindow,
                                                 new Rect(0,
                                                          0,
                                                          GetPercent(.09F, Screen.width),
                                                          GetPercent(.775F, Screen.height)));//m_currentRoom.GetUserWindowLen())
                //,false, true);
                //string testString = "1\n2\n3\n4\n5\n6\n7\n8\n9\n10\n11\n12\n13\n14\n15\n16\n17\n18\n19\n20\n21\n22\n23\n24\n25\n26\n27\n28\n29\n30\n31\n32\n33\n34\n35\n36\n37\n38\n39\n40\n41\n42\n43\n44\n45\n46\n47\n48\n49\n50\n";
                // Put something inside the ScrollView --- UserWindow
                //innerText = m_currentRoom.GetChatWindowString();
                GUI.Label(new Rect(0,
                                   0,
                                   GetPercent(.9F, Screen.width),
                                   GetPercent(.765F, Screen.height)),
                                   m_currentRoom.GetUserWindowString());
                //GetPercent(.8F, Screen.height)),
                //m_currentRoom.GetUserWindowString());
                //innerText = "";

            }
            else
            {
                userWindow = GUI.BeginScrollView(new Rect(GetPercent(.79F, Screen.width),
                                                         GetPercent(.066F, Screen.height),
                                                         GetPercent(.1955F, Screen.width),
                                                         GetPercent(.772F, Screen.height))
                                               , userWindow,
                                                new Rect(0,
                                                         0,
                                                         GetPercent(.09F, Screen.width),
                                                         GetPercent(.765F, Screen.height) + extraLines2));//m_currentRoom.GetUserWindowLen())
                //,false, true);
                //string testString = "1\n2\n3\n4\n5\n6\n7\n8\n9\n10\n11\n12\n13\n14\n15\n16\n17\n18\n19\n20\n21\n22\n23\n24\n25\n26\n27\n28\n29\n30\n31\n32\n33\n34\n35\n36\n37\n38\n39\n40\n41\n42\n43\n44\n45\n46\n47\n48\n49\n50\n";
                // Put something inside the ScrollView --- UserWindow
                //innerText = m_currentRoom.GetChatWindowString();
                GUI.Label(new Rect(0,
                                   0,
                                   GetPercent(.9F, Screen.width),
                                   5000),
                                   //testString);
                                   m_currentRoom.GetUserWindowString());
            }
            // End the ScrollView
            GUI.EndScrollView();

            GUI.Box(new Rect(0,
                             GetPercent(.85F, Screen.height),
                             GetPercent(.78F, Screen.width),
                             GetPercent(.61F, Screen.height)), "$Banner Advertisement$");
            GUI.Label(new Rect(0, -3, Screen.width + 8, Screen.height + 9), GUITexture);

            textfield = GUI.TextField(new Rect(GetPercent(.115F, Screen.width),
                                               GetPercent(.807F, Screen.height),
                                               GetPercent(.649F, Screen.width),
                                               18)
                                   , textfield);

            if(GUI.Button(new Rect(GetPercent(.0155F, Screen.width),
                                GetPercent(.805F, Screen.height),
                                GetPercent(.096F, Screen.width),
                                19), "Send"))
            {
                sendButton = true;
            }

            GUI.Label(new Rect(GetPercent(.82F, Screen.width),
                               GetPercent(.008F, Screen.height),
                               300,
                               25), m_currentRoom.GetRoomName());

            m_currentRoom.UpdateChatWindows();
        }
    }
		public void SendResponse (BinaryMessage response)
		{
			WriteMessage (0, response);
		}
예제 #47
0
 public void InitAdapter(ref BinaryMessage t_bmsg)
 {
     m_adapterMessage = t_bmsg;
 }
		public void WriteMessage (byte type, BinaryMessage msg)
		{
			msg.ReadCustomData ();
			lock (listeners) {
				if (DebugMode)
					Console.WriteLine ("[SERVER] XS << RP " + type + " [" + msg.ProcessingTime + "ms] " + msg);
				outStream.WriteByte (type);
				try {
					msg.Write (outStream);
				} catch (Exception ex) {
					msg.CreateErrorResponse (ex.ToString (), true).Write (outStream);
				}
			}
		}
		BinaryMessage LoadMessageData (BinaryMessage msg)
		{
			Type type;
			if (messageTypes.TryGetValue (msg.Name, out type)) {
				var res = (BinaryMessage)Activator.CreateInstance (type);
				res.CopyFrom (msg);
				return res;
			}
			return msg;
		}
			public void DispatchMessage (BinaryMessage msg)
			{
				ThreadPool.QueueUserWorkItem ((state) => { ExecuteMessage (msg); });
			}
예제 #51
0
 public void InitAdapter(ref BinaryMessage t_bmsg)
 {
     m_readAdapterMsg = t_bmsg;
 }
			void ExecuteMessage (BinaryMessage msg)
			{
				BinaryMessage response = null;
				var sw = System.Diagnostics.Stopwatch.StartNew ();
				try {
					if (msg.Name == "FlushMessages") {
						response = msg.CreateResponse ();
					} else
						response = listener.ProcessMessage (msg);
				} catch (Exception ex) {
					if (ex is TargetInvocationException)
						ex = ((TargetInvocationException)ex).InnerException;
					server.LogError (ex);
					response = msg.CreateErrorResponse (ex.Message, !(ex is RemoteProcessException));
					Console.WriteLine (ex);
				}
				if (response != null) {
					response.Id = msg.Id;
					response.ProcessingTime = sw.ElapsedMilliseconds;
					server.SendResponse (response);
				} else if (!msg.OneWay)
					server.SendResponse (msg.CreateErrorResponse ("Got no response from server", true));
			}