public void StoreParamValue(ushort id, byte[] encodedValue)
        {
            _log.Debug($"Requesting to set param {id}");

            var messageBuilder = new MessageBuilder((byte)CrtpPort.PARAM, (byte)ParamConfigurator.ParamChannel.WRITE_CHANNEL);
            int expectedReplyLength;

            if (_useV2)
            {
                messageBuilder.Add(id);
                expectedReplyLength = 2;
            }
            else
            {
                messageBuilder.Add((byte)(id & 0xFF));
                expectedReplyLength = 1;
            }
            messageBuilder.Add(encodedValue);

            var msg = messageBuilder.Build();

            lock (_lock)
            {
                _requests.Enqueue(new ParameterRequest(id, msg, msg.Data.Take(expectedReplyLength).ToArray()));
                _waitForContent.Set();
            }
        }
Esempio n. 2
0
    // Update is called once per frame
    void Update()
    {
        if (Input.GetButton("Fire1") && Time.time > nextFire)
        {
            MessageBuilder msg = new MessageBuilder(MessageType.SHOOTING_MASTER_SIMPLE);
            msg.Add(humanEntity.Position.x).Add(humanEntity.Position.y).Add(humanEntity.Position.z);
            msg.Add(humanEntity.Rotation.x).Add(humanEntity.Rotation.y).Add(humanEntity.Rotation.z).Add(humanEntity.Rotation.w);
            msg.Add("qwe");
            Debug.Log("123123");
            TCPHandler.getInstance().send(msg.Build());

            nextFire = Time.time + fireRate;

            Vector3 position = transform.TransformPoint(0, 0, 0.2f);

            ProjectileFactory.CreateProjectile(humanEntity, "qwe");

            /*
            Instantiate(blaster,
                position,
                Quaternion.Euler(
                    cameraHeadTransform.eulerAngles.x + 90,
                    transform.eulerAngles.y,
                    0
                ));*/
        }
    }
Esempio n. 3
0
        public void TestTypes()
        {
            byte[]         buffer  = new byte[100];
            MessageBuilder builder = new MessageBuilder(buffer, 0);

            builder.Add(1, "Föo");
            byte[] blob = Encoding.UTF8.GetBytes("hihi");
            builder.Add(200, blob);
            builder.Add(3, true);
            builder.Add(40, false);

            Assert.AreEqual(17, builder.GetPosition());

            // string '1'
            Assert.AreEqual((byte)10, buffer[0]);
            Assert.AreEqual((byte)4, buffer[1]);              // serialized string length
            Assert.AreEqual((byte)70, buffer[2]);
            Assert.AreEqual((byte)195, buffer[3]);
            Assert.AreEqual((byte)182, buffer[4]);
            Assert.AreEqual((byte)111, buffer[5]);

            // blob '200'
            Assert.AreEqual((byte)251, buffer[6]);
            Assert.AreEqual((byte)128, buffer[7]);
            Assert.AreEqual((byte)72, buffer[8]);
            Assert.AreEqual((byte)4, buffer[9]);              // length of bytearray
            Assert.AreEqual((byte)104, buffer[10]);           // 'h'
            Assert.AreEqual((byte)105, buffer[11]);           // 'i'
            Assert.AreEqual((byte)104, buffer[12]);           // 'h'
            Assert.AreEqual((byte)105, buffer[13]);           // 'i'

            // bool-true '3'
            Assert.AreEqual((byte)28, buffer[14]);

            // bool-false '40'
            Assert.AreEqual((byte)253, buffer[15]);
            Assert.AreEqual((byte)40, buffer[16]);

            MessageParser parser = new MessageParser(buffer, 0, builder.GetPosition());

            Assert.AreEqual(MessageParser.State.FoundTag, parser.Next());
            Assert.AreEqual(1, parser.GetTag());
            Assert.AreEqual("Föo", parser.GetString());
            Assert.AreEqual(MessageParser.State.FoundTag, parser.Next());
            Assert.AreEqual(200, parser.GetTag());
            byte[] parsed = parser.getByteArray();
            Assert.AreEqual(blob.Length, parsed.Length);
            for (int i = 0; i < blob.Length; ++i)
            {
                Assert.AreEqual(blob[i], parsed[i]);
            }
            Assert.AreEqual(MessageParser.State.FoundTag, parser.Next());
            Assert.AreEqual(3, parser.GetTag());
            Assert.AreEqual(true, parser.GetBoolean());
            Assert.AreEqual(MessageParser.State.FoundTag, parser.Next());
            Assert.AreEqual(40, parser.GetTag());
            Assert.AreEqual(false, parser.GetBoolean());
            Assert.AreEqual(MessageParser.State.EndOfDocument, parser.Next());
        }
        public MessageBuilderWithNewModelTests()
        {
            model = new PersonModel();

            bulder = new MessageBuilder<PersonModel>(model);

            bulder.Add(new CreatePersonMessageMap());
            bulder.Add(new ChangeAddressMessageMap());
        }
Esempio n. 5
0
        /// <summary>
        /// Publish a message received over the connection
        ///
        /// If the connection is subscribing to the topic the message is published
        /// to it will receive the message back.
        /// </summary>
        /// <param name="data"></param>
        private void ProcessMessage(IDictionary <string, object> data)
        {
            // Must be authenticated to send messages
            if (!m_authenticated)
            {
                return;
            }
            // Make sure the data is valid
            ITopic topic = m_messagebus.Create(data[MessageTopic].ToString());

            if (topic == null)
            {
                return;
            }
            // Create the message
            IDictionary <string, object> message = data[MessagePayload] as IDictionary <string, object>;

            if (message == null)
            {
                return;
            }
            // Convert to a message instance and send
            lock (m_builder)
            {
                m_builder.Clear();
                foreach (string key in message.Keys)
                {
                    m_builder.Add(key, message[key]);
                }
                m_messagebus.Publish(topic, m_builder.CreateMessage());
            }
        }
Esempio n. 6
0
        public void Write(string message, LogLevel logLevel)
        {
            // If we haven't been configured we just send the output to the console
            if (m_targets == null)
            {
                System.Console.WriteLine("{0}:{1}", logLevel, message);
                return;
            }
            // Get the target information
            if (!m_targets.ContainsKey(logLevel))
            {
                return;
            }
            LogTarget target = m_targets[logLevel];

            // Split the source out of the message (if it exists)
            lock (this)
            {
                DateTime now    = DateTime.Now;
                Match    match  = SourceRegex.Match(message);
                string   source = "";
                if (match.Success)
                {
                    source  = message.Substring(0, match.Length - 2);
                    message = message.Substring(match.Length);
                }
                if (target.m_output != null)
                {
                    target.m_output.WriteLine("{0:hh:mm:ss} {1} ({2}) {3}", now, logLevel, source, message);
                    target.m_output.Flush();
                }
                if (target.m_topic != null)
                {
                    IMessageBus messageBus = Locator.Current.GetService <IMessageBus>();
                    m_builder.Add("logLevel", logLevel.ToString());
                    m_builder.Add("source", source);
                    m_builder.Add("message", message);
                    messageBus.Publish(target.m_topic, m_builder.CreateMessage());
                }
                // Check for log file rollover
                if (now.DayOfYear != m_lastLogOpen.DayOfYear)
                {
                    Enable(Level);
                }
            }
        }
        public void testAddingAndGettingAnIncompleteMessage()
        {
            MessageBuilder builder = new MessageBuilder('#', '%');

            builder.Add("#");
            Assert.AreEqual(0, builder.MessageCount);
            Assert.AreEqual(null, builder.GetNextMessage());

            builder.Add("He");
            Assert.AreEqual(0, builder.MessageCount);
            Assert.AreEqual(null, builder.GetNextMessage());

            builder.Add("llo%");
            Assert.AreEqual(1, builder.MessageCount);
            Assert.AreEqual("Hello", builder.GetNextMessage());
            Assert.AreEqual(null, builder.GetNextMessage());
        }
 private static void LogIn(Command cmd)
 {
     string str = cmd.Parameters[0];
     instance.token = str;
     MessageBuilder mb = new MessageBuilder(MessageType.LOGIN);
     mb.Add(str);
     TCPHandler.getInstance().send(mb.Build());
 }
Esempio n. 9
0
        /// <summary>
        /// Save the log configuration in the Crazyflie
        /// </summary>
        internal void Create()
        {
            if (!Identifier.HasValue)
            {
                throw new InvalidOperationException("LogConfig not yet correctly added (no identifier).");
            }

            var messageBuilder = new MessageBuilder(
                (byte)CrtpPort.LOGGING, (byte)Logger.LogChannel.CHAN_SETTINGS);

            if (UseV2)
            {
                messageBuilder.Add((byte)Logger.LogConfigCommand.CMD_CREATE_BLOCK_V2);
            }
            else
            {
                messageBuilder.Add((byte)Logger.LogConfigCommand.CMD_CREATE_BLOCK);
            }
            messageBuilder.Add(Identifier.Value);

            foreach (var variable in _logVariables)
            {
                var storage = variable.GetStorageAndFetchByte();
                if (!variable.IsTocVariable) // Memory location
                {
                    _log.Debug($"Logging to raw memory {storage} 0x{variable.Address.ToString("X")}");
                    messageBuilder.Add(storage);
                    messageBuilder.Add(variable.Address);
                }
                else
                {
                    var tocId = _tocContainer.CurrentToc.GetElementId(variable.Name);
                    _log.Debug($"Adding {variable.Name} with id={tocId} and type={storage}");
                    messageBuilder.Add(storage);
                    if (UseV2)
                    {
                        messageBuilder.Add((byte)(tocId & 0x0ff));
                        messageBuilder.Add((byte)((tocId >> 8) & 0x0ff));
                    }
                    else
                    {
                        messageBuilder.Add((byte)(tocId & 0x0ff));
                    }
                }
            }
            _log.Debug($"Adding log block id {Identifier}");
            var msg = messageBuilder.Build();

            _communicator.SendMessageExcpectAnswer(msg, msg.Data.Take(2).ToArray());
        }
Esempio n. 10
0
        /// <summary>
        /// Run the messagebus
        ///
        /// This is a blocking method, it will run in a loop until the
        /// server is requested to shut down.
        /// </summary>
        private void Run()
        {
            QueuedMessage message;

            while (true)
            {
                if (m_queue.TryTake(out message, QueueWaitPeriod))
                {
                    // Dispatch to all subscribers
                    foreach (ISubscriber subscriber in message.Subscribers)
                    {
                        if (subscriber != message.Source)
                        {
                            Task.Factory.StartNew(() =>
                            {
                                try
                                {
                                    subscriber.MessageReceived(message.Topic, message.Source, message.Payload);
                                    m_messagesProcessed++;
                                }
                                catch (Exception ex)
                                {
                                    this.Log().Error("Failed to dispatch message to subscriber - {0}", ex.ToString());
                                }
                            });
                        }
                    }
                }
                // Do we need to send a heartbeat message ?
                if ((DateTime.Now - m_lastHeartbeat).TotalMilliseconds >= HeartBeatPeriod)
                {
                    m_builder.Add("messagesReceived", m_messagesReceived);
                    m_builder.Add("messagesHandled", m_messagesProcessed);
                    Publish(Create(Topics.ServerHeartbeat), m_builder.CreateMessage());
                    this.Log().Info("Received {0} messages, {1} dispatched to subscribers.", m_messagesReceived, m_messagesProcessed);
                    m_messagesProcessed = 0;
                    m_messagesReceived  = 0;
                    m_lastHeartbeat     = DateTime.Now;
                }
            }
        }
        public void testAddingAndGettingACompleteMessageThatHasNoPayload()
        {
            MessageBuilder builder = new MessageBuilder('#', '%');

            builder.Add("#%");

            Assert.AreEqual(1, builder.MessageCount);
            Assert.AreEqual("", builder.GetNextMessage());

            Assert.AreEqual(0, builder.MessageCount);
            Assert.AreEqual(null, builder.GetNextMessage());
        }
Esempio n. 12
0
        /// <summary>
        /// Upgrade DPO packages from SQL SERVER
        /// </summary>
        /// <param name="path"></param>
        /// <returns></returns>
        public MessageBuilder UpgradePackage(string path)
        {
            MessageBuilder messages = new MessageBuilder();

            foreach (Type type in assembly.GetTypes())
            {
                if (type.BaseType != typeof(DPObject))
                {
                    continue;
                }

                TableAttribute[] A = type.GetAttributes <TableAttribute>();
                if (A.Length == 0 || !A[0].Pack)
                {
                    continue;
                }


                Packing packing = new Packing(type);
                packing.Pack();

                if (!packing)
                {
                    messages.Add(Message.Information(string.Format("Table {0} is empty.", packing.TableName)));
                }
                else
                {
                    string       fileName = string.Format("{0}\\{1}.cs", path, packing.ClassName);
                    StreamWriter sw       = new StreamWriter(fileName);
                    sw.Write(packing.ToString());
                    sw.Close();

                    messages.Add(Message.Information(string.Format("Table {0} packed into {1}.", packing.TableName, fileName)));
                }
            }


            return(messages);
        }
        /// <summary>
        /// Place a param update request on the queue
        /// </summary>
        public void RequestLoadParamValue(ushort id)
        {
            _log.Debug($"Requesting read param value {id}");
            var messageBuilder = new MessageBuilder((byte)CrtpPort.PARAM, (byte)ParamConfigurator.ParamChannel.READ_CHANNEL);

            if (_useV2)
            {
                messageBuilder.Add(id);
            }
            else
            {
                messageBuilder.Add((byte)(id & 0xFF));
            }

            var msg = messageBuilder.Build();

            lock (_lock)
            {
                _requests.Enqueue(new ParameterRequest(id, msg, msg.Data.Take(msg.Data.Length).ToArray()));
                _waitForContent.Set();
            }
        }
Esempio n. 14
0
        private static MessageBuilder CreateTable(Type dpoType)
        {
            MessageBuilder messages = new MessageBuilder();

            DPObject dpo = (DPObject)Activator.CreateInstance(dpoType);

            int tableId = dpo.TableName.Id;

            if (dpo.CreateTable())
            {
                messages.Add(Message.Information(string.Format("Table {0} created.", dpo.TableName)));

                //if (tableId == -1)  //register new table to dictionary
                //tableId = dpo.RegisterEntireTable();
            }
            else
            {
                messages.Add(Message.Information(string.Format("Table {0} exists, cannot be created.", dpo.TableName)));
            }

            return(messages);
        }
        public void testAddingAndGettingTwoCompleteMessagesWithGarbage()
        {
            MessageBuilder builder = new MessageBuilder('#', '%');

            builder.Add("g#Hello%g#GoodBye%g");
            Assert.AreEqual(2, builder.MessageCount);

            Assert.AreEqual("Hello", builder.GetNextMessage());
            Assert.AreEqual(1, builder.MessageCount);

            Assert.AreEqual("GoodBye", builder.GetNextMessage());
            Assert.AreEqual(0, builder.MessageCount);

            Assert.AreEqual(null, builder.GetNextMessage());
        }
Esempio n. 16
0
 void FixedUpdate()
 {
     if(login)
     {
         MessageBuilder mb = new MessageBuilder(MessageType.MOVEMENT_SYNC);
         mb.Add(playerObj.transform.position.x);
         mb.Add(playerObj.transform.position.y);
         mb.Add(playerObj.transform.position.z);
         mb.Add(playerObj.transform.rotation.x);
         mb.Add(playerObj.transform.rotation.y);
         mb.Add(playerObj.transform.rotation.z);
         mb.Add(playerObj.transform.rotation.w);
         TCPHandler.getInstance().send(mb.Build());
     }
 }
Esempio n. 17
0
        public void TestCase()
        {
            byte[] buffer = new byte[100];
            {
                MessageBuilder builder = new MessageBuilder(buffer, 0);
                builder.Add(15, 6512);
                Assert.AreEqual(3, builder.GetPosition());
            }
            Assert.AreEqual(120, buffer[0]);
            Assert.AreEqual((byte)177, buffer[1]);
            Assert.AreEqual(112, buffer[2]);

            {
                MessageParser parser = new MessageParser(buffer, 0, 3);
                Assert.AreEqual(MessageParser.State.FoundTag, parser.Next());
                Assert.AreEqual(15, parser.GetTag());
                Assert.AreEqual(6512, parser.GetInt());
                Assert.AreEqual(MessageParser.State.EndOfDocument, parser.Next());
            }

            {
                MessageBuilder builder = new MessageBuilder(buffer, 0);
                builder.Add(129, 6512);
                Assert.AreEqual(5, builder.GetPosition());
            }
            Assert.AreEqual((byte)248, buffer[0]);
            Assert.AreEqual((byte)128, buffer[1]);
            Assert.AreEqual(1, buffer[2]);
            Assert.AreEqual((byte)177, buffer[3]);
            Assert.AreEqual((byte)112, buffer[4]);

            {
                MessageParser parser = new MessageParser(buffer, 0, 5);
                Assert.AreEqual(MessageParser.State.FoundTag, parser.Next());
                Assert.AreEqual(129, parser.GetTag());
                Assert.AreEqual(6512, parser.GetInt());
                Assert.AreEqual(MessageParser.State.EndOfDocument, parser.Next());
            }
        }
Esempio n. 18
0
        /// <summary>
        /// Upgrade DPO packages from SQL SERVER
        /// </summary>
        /// <param name="path"></param>
        /// <returns></returns>
        public MessageBuilder UpgradePackage(string path)
        {
            MessageBuilder messages = new MessageBuilder();
            foreach (Type type in assembly.GetTypes())
            {
                if (type.BaseType != typeof(DPObject))
                    continue;

                TableAttribute[] A = type.GetAttributes<TableAttribute>();
                if (A.Length == 0 || !A[0].Pack)
                    continue;

                Packing packing = new Packing(type);
                packing.Pack();

                if (!packing)
                {
                    messages.Add(Message.Information(string.Format("Table {0} is empty.", packing.TableName)));
                }
                else
                {
                    string fileName = string.Format("{0}\\{1}.cs", path, packing.ClassName);
                    StreamWriter sw = new StreamWriter(fileName);
                    sw.Write(packing.ToString());
                    sw.Close();

                     messages.Add(Message.Information(string.Format("Table {0} packed into {1}.", packing.TableName, fileName)));
                }
            }

            return messages;
        }
Esempio n. 19
0
        /// <summary>
        /// 更新ボタン押下時処理
        /// </summary>
        /// <param name="sender">イベント送信オブジェクト</param>
        /// <param name="e">イベント引数</param>
        private void BtnUpdate_Click(object sender, EventArgs e)
        {
            var canUpdate = true;

            this.TxtTitle.BackColor       = Color.White;
            this.DtpLimit.BackColor       = Color.White;
            this.CmbAttachFiles.BackColor = Color.White;

            var msgBuilder = new MessageBuilder();

            if (string.IsNullOrEmpty(this.TxtTitle.Text))
            {
                msgBuilder.Add(MessageKind.Error, "タイトルを入力してください");

                this.TxtTitle.BackColor = Color.Red;
                canUpdate = false;
            }

            if (string.IsNullOrEmpty(this.DtpLimit.Text))
            {
                msgBuilder.Add(MessageKind.Error, "期限を入力してください");

                this.DtpLimit.BackColor = Color.Red;
                canUpdate = false;
            }

            if (!canUpdate)
            {
                var errMsg = msgBuilder.CreateMessage();
                MessageBox.Show(errMsg);
                return;
            }

            if (!this.target.Group.Equals(this.CmbGroup.SelectedItem))
            {
                // グループ管理の差し替え
                var prevParent = ResourceManager.Instance.GetGroupInfo(this.target.Group);
                if (prevParent != null)
                {
                    if (prevParent.ChildTaskItems.Contains(this.target))
                    {
                        prevParent.ChildTaskItems.Remove(this.target);
                    }
                }

                if (string.IsNullOrEmpty(this.CmbGroup.Text) || this.CmbGroup.SelectedItem == null)
                {
                    this.target.Group = TaskGroupInfo.GetDefaultGroup().Key;
                }
                else
                {
                    this.target.Group = ((TaskGroupInfo)this.CmbGroup.SelectedItem).Key;
                }

                var parent = ResourceManager.Instance.GetGroupInfo(this.target.Group);
                parent.ChildTaskItems.Add(this.target);
            }

            this.target.Title         = this.TxtTitle.Text;
            this.target.DateTimeLimit = this.DtpLimit.Value;
            this.target.Memo          = this.TxtMemo.Text;

            // 添付ファイルの取得
            {
                // 削除ファイルの処理
                var destattachList = new List <AttachedFileInfo>();
                destattachList.AddRange(this.target.AttachFile);

                foreach (var info in this.attachFileDeleteList)
                {
                    var path = info.FilePath;
                    if (File.Exists(path))
                    {
                        File.Delete(path);
                    }

                    if (destattachList.Contains(info))
                    {
                        destattachList.Remove(info);
                    }
                }

                // 追加ファイルの処理
                foreach (var info in this.attachFileAddList)
                {
                    destattachList.Add(info);

                    File.Copy(info.OrgFilePath, info.FilePath, true);
                }

                this.target.AttachFile.Clear();
                this.target.AttachFile.AddRange(destattachList);
            }

            this.CloseWindow(SubWindowResult.Submit);
        }
Esempio n. 20
0
        private static MessageBuilder CreateTable(Type dpoType)
        {
            MessageBuilder messages = new MessageBuilder();

            DPObject dpo = (DPObject)Activator.CreateInstance(dpoType);

            int tableId = dpo.TableName.Id;

            if (dpo.CreateTable())
            {
                messages.Add(Message.Information(string.Format("Table {0} created.", dpo.TableName)));

                //if (tableId == -1)  //register new table to dictionary
                    //tableId = dpo.RegisterEntireTable();
            }
            else
                messages.Add(Message.Information(string.Format("Table {0} exists, cannot be created.", dpo.TableName)));

            return messages;
        }