static void MakeFromScratchImpl(TypeModel model, string caption)
        {
            var obj = new Naked();

            try
            {
                Extensible.AppendValue(model, obj, 1, DataFormat.Default, "abc");
                Extensible.AppendValue(model, obj, 2, DataFormat.Default, 456.7F);
                Extensible.AppendValue(model, obj, 3, DataFormat.FixedSize, 123);

                CanHazData clone;
                using (var ms = new MemoryStream())
                {
                    model.Serialize(ms, obj);
                    string s = Program.GetByteString(ms.ToArray());
                    Assert.Equal("0A 03 61 62 63 15 9A 59 E4 43 1D 7B 00 00 00", s); //, caption);
                    ms.Position = 0;
#pragma warning disable CS0618
                    clone = (CanHazData)model.Deserialize(ms, null, typeof(CanHazData));
#pragma warning restore CS0618
                }
                Assert.Equal("abc", clone.A);  //, caption);
                Assert.Equal(456.7F, clone.B); //, caption);
                Assert.Equal(123, clone.C);    //, caption);
            }
            catch
            {
                Debug.WriteLine(caption);
                throw;
            }
        }
示例#2
0
        static void TestWriteExt <T>() where T : IExtTest, IExtensible, new()
        {
            const float SOME_VALUE = 987.65F;
            T           obj        = new T();
            var         tm         = TypeModel.Create(false, ProtoCompatibilitySettingsValue.FullCompatibility);

            Extensible.AppendValue <float>(tm, obj, 3, SOME_VALUE);

            byte[] raw = GetExtensionBytes(obj);
            Assert.AreEqual(5, raw.Length, "Extension Length");
            Assert.AreEqual((3 << 3) | 5, raw[0], "Prefix (3 Fixed32)");
            byte[] tmp = BitConverter.GetBytes(SOME_VALUE);
            if (!BitConverter.IsLittleEndian)
            {
                Array.Reverse(tmp);
            }
            Assert.AreEqual(tmp[0], raw[1], "Float32 Byte 0");
            Assert.AreEqual(tmp[1], raw[2], "Float32 Byte 1");
            Assert.AreEqual(tmp[2], raw[3], "Float32 Byte 2");
            Assert.AreEqual(tmp[3], raw[4], "Float32 Byte 3");

            float readBack = Extensible.GetValue <float>(obj, 3);

            Assert.AreEqual(SOME_VALUE, readBack, "read back");

            BiggerObject big = tm.ChangeType <T, BiggerObject>(obj);

            Assert.AreEqual(SOME_VALUE, big.SomeFloat, "deserialize");
        }
示例#3
0
        // For FunMessage
        public static FunMessage CreateFunMessage(object msg, MessageType msg_type)
        {
            if (msg is Enum)
            {
                msg = (Int32)msg;
            }

            try
            {
                FunMessage _msg = new FunMessage();
                Extensible.AppendValue(serializer_, _msg, (int)msg_type, DataFormat.Default, msg);
                return(_msg);
            }
            catch (Exception e)
            {
                Type type = MessageTable.GetType(msg_type);
                FunDebug.LogError("FunapiMessage.CreateFunMessage - Failed to create '{0}' ({1})\n{2}",
                                  type, msg_type, e.ToString());

                if (ParsingErrorCallback != null)
                {
                    ParsingErrorCallback(type);
                }
            }

            return(null);
        }
示例#4
0
        static void MakeFromScratch(TypeModel model, string caption)
        {
            var obj = new Naked();

            //try
            //{
            Extensible.AppendValue(model, obj, 1, BinaryDataFormat.Default, "abc");
            Extensible.AppendValue(model, obj, 2, BinaryDataFormat.Default, 456.7F);
            Extensible.AppendValue(model, obj, 3, BinaryDataFormat.FixedSize, 123);

            CanHazData clone;

            using (var ms = new MemoryStream())
            {
                model.Serialize(ms, obj);
                string s = Program.GetByteString(ms.ToArray());
                Assert.AreEqual("0A 03 61 62 63 15 9A 59 E4 43 1D 7B 00 00 00", s, caption);
                ms.Position = 0;
                clone       = (CanHazData)model.Deserialize(ms, null, typeof(CanHazData));
            }
            Assert.AreEqual("abc", clone.A, caption);
            Assert.AreEqual(456.7F, clone.B, caption);
            Assert.AreEqual(123, clone.C, caption);
            //}
            //catch
            //{
            //    Debug.WriteLine(caption);
            //    throw;
            //}
        }
示例#5
0
        static void TestWriteExt <T>() where T : IExtTest, IExtensible, new()
        {
            const float SOME_VALUE = 987.65F;
            T           obj        = new T();

            Extensible.AppendValue <float>(obj, 3, SOME_VALUE);

            byte[] raw = GetExtensionBytes(obj);
            Assert.Equal(5, raw.Length);        //, "Extension Length");
            Assert.Equal((3 << 3) | 5, raw[0]); //, "Prefix (3 Fixed32)");
            byte[] tmp = BitConverter.GetBytes(SOME_VALUE);
            if (!BitConverter.IsLittleEndian)
            {
                Array.Reverse(tmp);
            }
            Assert.Equal(tmp[0], raw[1]); //, "Float32 Byte 0");
            Assert.Equal(tmp[1], raw[2]); //, "Float32 Byte 1");
            Assert.Equal(tmp[2], raw[3]); //, "Float32 Byte 2");
            Assert.Equal(tmp[3], raw[4]); //, "Float32 Byte 3");

            float readBack = Extensible.GetValue <float>(obj, 3);

            Assert.Equal(SOME_VALUE, readBack); //, "read back");

            BiggerObject big = Serializer.ChangeType <T, BiggerObject>(obj);

            Assert.Equal(SOME_VALUE, big.SomeFloat); //, "deserialize");
        }
        // For Multicast messages
        public static FunMulticastMessage CreateFunMessage(object msg, MulticastMessageType msg_type)
        {
            if (msg is Enum)
            {
                msg = (Int32)msg;
            }

            FunMulticastMessage _msg = new FunMulticastMessage();

            Extensible.AppendValue(serializer_, _msg, (int)msg_type, DataFormat.Default, msg);
            return(_msg);
        }
示例#7
0
        private void AppendReferences(ItemContainer itemContainer)
        {
            if (itemContainer == null)
            {
                throw new ArgumentNullException("itemContainer");
            }

            var idx = 2;

            foreach (var reference in _propertyManager.GetInfos(itemContainer.Item).Where(x => x.InfoType == PropertyManagerInfoType.Reference).Select(info => info.GetReferenceValue <IIdentifyable>(itemContainer.Item)))
            {
                var tag = _domainMapper.Type2Tag(reference);
                Extensible.AppendValue(itemContainer, idx++, tag);
                Extensible.AppendValue(itemContainer, idx++, reference.Id);
            }
        }
示例#8
0
    public void RuntimeMessageContract()
    {
        var adhoc = new AdHoc();

        Extensible.AppendValue <double>(adhoc, 1, 0.0);
        Extensible.AppendValue <int>(adhoc, 2, 1);
        Extensible.AppendValue <string>(adhoc, 3, "2");
        Extensible.AppendValue <bool>(adhoc, 4, true);
        var clone = Serializer.DeepClone(adhoc);

        Assert.AreNotSame(clone, adhoc);
        Assert.AreEqual(0.0, Extensible.GetValue <double>(clone, 1));
        Assert.AreEqual(1, Extensible.GetValue <int>(clone, 2));
        Assert.AreEqual("2", Extensible.GetValue <string>(clone, 3));
        Assert.AreEqual(true, Extensible.GetValue <bool>(clone, 4));
    }
示例#9
0
        public bool SendText(string chat_channel, string text)
        {
            if (!Connected)
            {
                return(false);
            }

            KeyValuePair <string, OnChannelMessage> p;

            lock (channel_lock_)
            {
                if (!channel_info_.TryGetValue(chat_channel, out p))
                {
                    DebugUtils.Log("You are not in the chat channel: {0}", chat_channel);
                    return(false);
                }
            }

            if (encoding_ == FunEncoding.kJson)
            {
                Dictionary <string, object> mcast_msg = new Dictionary <string, object>();
                mcast_msg["_channel"] = chat_channel;
                mcast_msg["_bounce"]  = true;

                mcast_msg["sender"] = p.Key;
                mcast_msg["text"]   = text;

                multicasting_.SendToChannel(mcast_msg);
            }
            else
            {
                FunChatMessage chat_msg = new FunChatMessage();
                chat_msg.sender = p.Key;
                chat_msg.text   = text;

                FunMulticastMessage mcast_msg = new FunMulticastMessage();
                mcast_msg.channel = chat_channel;
                mcast_msg.bounce  = true;
                Extensible.AppendValue(mcast_msg, (int)MulticastMessageType.chat, chat_msg);

                multicasting_.SendToChannel(mcast_msg);
            }

            return(true);
        }
示例#10
0
 static void TestWriteNull <T>() where T : IExtTest, IExtensible, new()
 {
     Extensible.AppendValue <string>(null, 1, "hi");
 }
        public void SendData()
        {
            DateTime dateTime = DateTime.UtcNow.Date;
            String   now      = dateTime.ToString("yyyy-MM-dd") + " 00:00:00";

            WriteLog("Start SendData");

            try
            {
                WayPoint wp = new WayPoint();
                using (MySqlConnection connMysql = DBUtils.GetDBConnection())
                {
                    WriteLog("Try connect db");
                    connMysql.Open();
                    Reconnect();
                    while (true)
                    {
                        WriteLog("try factory.CreateConnection to DRVN");

                        //IConnection conn = CreateConnection();
                        /////////////////////////////////////

                        //IModel channel = conn.CreateModel();
                        //bool status = conn.IsOpen;
                        //WriteLog("status connect drvn: " + status.ToString());

                        WriteLog("Start connect db");
                        try
                        {
                            string sql = "SELECT DISTINCT(carlog_id), YEAR(carlog_thoigian) as year,MONTH(carlog_thoigian) as month,DAY(carlog_thoigian) as day, HOUR(carlog_thoigian) as hour,MINUTE(carlog_thoigian) as minute, SECOND(carlog_thoigian) as second, carlog_bienso,carlog_kinhdo,carlog_vido,carlog_vantoc_tb,carlog_laixe_uid FROM tbl_carlogsentdrvn LEFT JOIN tbl_laixe ON carlog_laixe_uid = laixe_uid   WHERE carlog_thoigian != '0000-00-00 00:00:00' AND carlog_sentdrvn  = 0  AND  carlog_thoigian >=  '" + now + "'    ORDER BY carlog_thoigian ASC LIMIT 0,1000";
                            WriteLog(sql);

                            MySqlCommand cmd      = new MySqlCommand(sql, connMysql);
                            string       carlogid = "";
                            using (MySqlDataReader reader = cmd.ExecuteReader())
                            {
                                string carlogbienso       = "";
                                string carlogbiensoorigin = "";
                                double carlogx;
                                double carlogy;
                                int    year, month, day, hour, minute, second;
                                if (reader.HasRows == true)
                                {
                                    WriteLog("HasRows");
                                    while (reader.Read())
                                    {
                                        carlogid += reader.GetString("carlog_id");
                                        carlogid += ",";

                                        carlogbiensoorigin = reader.GetString("carlog_bienso").ToString();
                                        carlogbienso       = string.Concat(reader.GetString("carlog_bienso").Where(char.IsLetterOrDigit));
                                        carlogx            = reader.GetDouble("carlog_kinhdo");
                                        carlogy            = reader.GetDouble("carlog_vido");
                                        year        = reader.GetInt32("year");
                                        month       = reader.GetInt32("month");
                                        day         = reader.GetInt32("day");
                                        hour        = reader.GetInt32("hour");
                                        minute      = reader.GetInt32("minute");
                                        second      = reader.GetInt32("second");
                                        wp.datetime = DateTimeToUnixTimestamp(new DateTime(year, month, day, hour, minute, second, DateTimeKind.Local));
                                        wp.door     = false; // Dong mo cua xe ,Chua co trong db

                                        //wp.driver = "123451234512345";
                                        if (reader["carlog_laixe_uid"] == DBNull.Value || reader.GetString("carlog_laixe_uid") == "")
                                        {
                                            wp.driver = "123451234512345";
                                        }
                                        else
                                        {
                                            wp.driver = reader.GetString("carlog_laixe_uid");
                                        }
                                        wp.ignition = true; // So may,Chua co trong db
                                        wp.speed    = reader.GetFloat("carlog_vantoc_tb");
                                        wp.vehicle  = carlogbienso;
                                        wp.x        = carlogx;
                                        wp.y        = carlogy;
                                        BaseMessage msg = new BaseMessage();
                                        msg.msgType = BaseMessage.MsgType.WayPoint;
                                        Extensible.AppendValue <WayPoint>(msg, ufms.BaseMessage.MsgType.WayPoint.GetHashCode(), wp);
                                        byte[] b = this.Serialize(msg);

                                        channel.BasicPublish("tracking.ctchaulong", "track1", null, b);
                                        WriteLog("-Sent data: BS:  " + wp.vehicle.ToString() + "-Id: " + reader.GetString("carlog_id") + "- datetime: " + wp.datetime + "- wp.door: " + wp.door + "- wp.driver: " + wp.driver + "-wp.ignition: " + wp.ignition + "-wp.speed:" + wp.speed + "-wp.vehicle: " + wp.vehicle + "-wp.x: " + carlogx + "-wp.y: " + wp.y);
                                    }
                                }
                            }
                            Console.WriteLine("carlogid.Length.ToString(): " + carlogid.Length.ToString());
                            if (carlogid.Length > 0)
                            {
                                carlogid = carlogid.Substring(0, carlogid.Length - 1);
                                Console.WriteLine("carlogid : " + carlogid);
                                string sqlDelete = "DELETE FROM tbl_carlogsentdrvn WHERE carlog_id IN (" + carlogid + ") ";
                                WriteLog(sqlDelete);
                                MySqlCommand commandDelete = connMysql.CreateCommand();
                                commandDelete.CommandText = sqlDelete;
                                commandDelete.ExecuteNonQuery();

                                string sqlUpdate = "UPDATE tbl_carlog SET carlog_sentdrvn = 1 WHERE carlog_id IN (" + carlogid + ")";
                                WriteLog(sqlUpdate);
                                MySqlCommand commandUpdate = connMysql.CreateCommand();
                                commandUpdate.CommandText = sqlUpdate;
                                commandUpdate.ExecuteNonQuery();
                            }
                            Thread.Sleep(10000);
                            //Reconnect();
                        }
                        catch (Exception ex)
                        {
                            WriteLog("ex connect db: " + ex.Message);
                            connMysql.Close();
                            connMysql.Open();
                            //RestartService();
                            Thread.Sleep(1000);
                        }
                    }
                }
            }
            catch (Exception ex)
            {
                WriteLog("ex connect drvn: " + ex.ToString());
                //Cleanup();
                Reconnect();
                //RestartService();
            }
        }
示例#12
0
    public void OnDeserializing()
    {
        var productsListIsEmpty = this.Products != null && this.Products.Count == 0;

        Extensible.AppendValue(this, 101, productsListIsEmpty);
    }