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