Beispiel #1
0
        public virtual АМОбъект  Восстановить(BinaryReader читатель)   // восстанавливает пустой примитив или адрес
        {
            var      номерТипа = читатель.ReadByte();
            var      тип       = Хранилище.Типы[номерТипа];
            АМОбъект примитив  = ( АМОбъект)тип.GetConstructor(Type.EmptyTypes).Invoke(null);

            примитив.Восстановить(читатель);
            return(примитив);
        }
Beispiel #2
0
        /// <summary>
        /// Создает все примитивы и адреса из универсального потока
        /// </summary>
        /// <param name="поток"></param>
        /// <returns></returns>
        public static АМОбъект Создать(Stream поток)
        {
            var      номерТипа = поток.ReadByte();
            var      тип       = Хранилище.Типы[номерТипа];
            АМОбъект примитив  = ( АМОбъект)тип.GetConstructor(Type.EmptyTypes).Invoke(null);

            примитив.Восстановить(поток);
            return(примитив);
        }
Beispiel #3
0
        public override АМОбъект Восстановить(BinaryReader читатель)
        {
            var длина = читатель.ReadInt32();

            for (int i = 0; i < длина; i++)
            {
                var      номерТипа = читатель.ReadByte();
                var      тип       = Хранилище.Типы[номерТипа];
                var      k         = тип.GetConstructor(Type.EmptyTypes);
                АМОбъект ключ      = ( АМОбъект)k.Invoke(null);
                ключ.Восстановить(читатель);
                номерТипа = читатель.ReadByte();
                тип       = Хранилище.Типы[номерТипа];
                k         = тип.GetConstructor(Type.EmptyTypes);
                АМОбъект значение = ( АМОбъект)k.Invoke(null);
                значение.Восстановить(читатель);

                Добавить(ключ, значение);
            }
            return(this);
        }
Beispiel #4
0
        public static void ВосстановитьПамять()
        {
            Читатель.ReadString();                    //=хранилище
            длинаАдреса = Читатель.ReadByte();        //длинаАдреса

            var активности = new List <Активность>(); //запускаемые объекты

            while (Читатель.BaseStream.Length > Читатель.BaseStream.Position)
            {
                var номерТипа = Читатель.ReadByte();
                var тип       = Типы[номерТипа];
                //var p = new object[0];
                var      k        = тип.GetConstructor(Type.EmptyTypes);
                АМОбъект примитив = ( АМОбъект)k.Invoke(null);
                примитив.Восстановить(Читатель);
                //.InvokeMember("Восстановить",BindingFlags.InvokeMethod, null,null,new []{Читатель});
                примитив.СобственныйАдресПримитива = new АдресВХранилище()
                {
                    НомерВХранилище = Память.Count
                };
                Память.Add(примитив);
                if (примитив is Активность)
                {
                    активности.Add((Активность)примитив);
                }
            }
            // цикл запуска активностей
            foreach (var активность in активности)
            {
                try
                {
                    активность.Запуск();
                }
                catch (Exception)
                {
                }
            }
        }
Beispiel #5
0
        public static void ВосстановитьПамятьПоИндексу()
        {
            Читатель.ReadString();                    //=хранилище
            длинаАдреса = Читатель.ReadByte();        //длинаАдреса

            var активности = new List <Активность>(); //запускаемые объекты

            for (int и = 0; и < ИндексВпамяти.Count; и++)
            {
                Читатель.BaseStream.Position = ИндексВпамяти[и];

                var      номерТипа = Читатель.ReadByte();
                var      тип       = Типы[номерТипа];
                var      k         = тип.GetConstructor(Type.EmptyTypes);
                АМОбъект примитив  = ( АМОбъект)k.Invoke(null);
                примитив.Восстановить(Читатель);
                примитив.СобственныйАдресПримитива = new АдресВХранилище()
                {
                    НомерВХранилище = и
                };
                //примитив.НомерВФайле = ИндексВпамяти[и]; //этот номер доступен по Индексу Хранилища
                Память.Add(примитив);
                if (примитив is Активность)
                {
                    активности.Add((Активность)примитив);
                }
            }
            foreach (var активность in активности)
            {
                try
                {
                    активность.Запуск();
                }
                catch (Exception)
                {
                }
            }
        }
        public void ЗапуститьСервер()
        {
            Слушатель = new TcpListener(new IPEndPoint(IPАдрес, порт));
            Слушатель.Start();

            // Buffer for reading data
            //Byte[] буферBytes = new Byte[256];
            //String data = null;

            while (true)
            {
                TcpClient клиент = Слушатель.AcceptTcpClient();

                // Код после подключения

                var адресПодключившегося = (IPEndPoint)клиент.Client.RemoteEndPoint;
                var IP = адресПодключившегося.Address; // здесь можно отфильтровать входящие соединения



                NetworkStream поток    = клиент.GetStream();
                var           читатель = new BinaryReader(поток);

                // протокол обмена сообщениями
                var      команда         = читатель.ReadString();
                var      числоПараметров = читатель.ReadByte();
                object[] параметры       = new object[числоПараметров];
                for (int j = 0; j < числоПараметров; j++)
                {
                    var      номерТипа = читатель.ReadByte();
                    var      тип       = Динамические.Хранилище.Типы[номерТипа];
                    АМОбъект примитив  = ( АМОбъект)тип.GetConstructor(Type.EmptyTypes).Invoke(null);
                    примитив.Восстановить(читатель);

                    параметры[j] = примитив;
                }

                object результат = typeof(Хранилище).InvokeMember(команда, BindingFlags.InvokeMethod, null, Хран, параметры);

                var писатель = new BinaryWriter(поток);

                (( АМОбъект)результат).СохранисьВ(писатель);


                //byte[] результатВбаты =
                //поток.Write(результатВбаты,0,результатВбаты.Length);



                //int i;

                //// Loop to receive all the data sent by the client.
                //while ((i = поток.Read(буферBytes, 0, буферBytes.Length)) != 0)
                //{

                //    // Translate data bytes to a ASCII string.
                //    data = System.Text.Encoding.ASCII.GetString(bytes, 0, i);
                //    Console.WriteLine("Received: {0}", data);

                //    // Process the data sent by the client.
                //    data = data.ToUpper();

                //    byte[] msg = System.Text.Encoding.ASCII.GetBytes(data);

                //    // Send back a response.
                //    поток.Write(msg, 0, msg.Length);
                //}

                // Shutdown and end connection
                клиент.Close();
            }
        }