Модераторы: gambit
  

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Передача объекта PipeStreams 
:(
    Опции темы
Hohhi
Дата 8.11.2010, 23:05 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бывалый
*


Профиль
Группа: Участник
Сообщений: 171
Регистрация: 25.2.2006
Где: Молдова

Репутация: нет
Всего: нет



Во время коммуникации процессов нужно передать объект по пайпам. До передачи объект сериализуется, а на другом конце естественно десериализуется. Не знаю, что я криво сделал, но код работает так, что я сомневаюсь, что методы WaitForConnection и Connect являются блокирующими. Вот код. Кусок сервера:
Код

     public byte[] SerializeObject(object item)
        {
            BinaryFormatter formatter = new BinaryFormatter();
            MemoryStream ms = new MemoryStream();
            formatter.Serialize(ms, item);
            return ms.ToArray();
        } 
        public override void Activate()
        {
            new Thread(() =>
           {
               this.ThreadMaterial.Run();
               //Console.WriteLine("Causal Activity {0} wait for Dependent Activity", m_name);
               byte[] toSend = SerializeObject(this.ThreadMaterial);
               System.Windows.Forms.MessageBox.Show(this.id.ToString());
               outStream.WaitForConnection();
               StreamWriter outWriter = new StreamWriter(outStream);
               outWriter.Write(toSend);
               //Console.WriteLine("Causal Activity {0} is ready to signal", m_name);

           }).Start();
        }


Кусок клиента:

Код

  public static void Listen(string number)
        {
            NamedPipeClientStream inStream = new NamedPipeClientStream(".", number, PipeDirection.In);
            inStream.Connect();
            StreamReader sr = new StreamReader(inStream);
            string final="",line="";
                // Read and display lines from the file until the end of 
                // the file is reached.
            while ((line = sr.ReadLine()) != null)
            {
                final += line;
            }
            byte[] bytesRead = new System.Text.UTF8Encoding().GetBytes(final);
            IFormatter formatter = new BinaryFormatter();
            MemoryStream ms = new MemoryStream(bytesRead);
            ThreadMaterial d = (ThreadMaterial)formatter.Deserialize(ms);
        }


Все Listen тоже параллельны:
Код

 public override void Activate()
        {
            new Thread(() =>
           {
               List<Thread> threads = new List<Thread>();
               foreach (var causalServerPipe in causalActivities)
               {
                   threads.Add((new Thread(() =>
                   {
                       TwoWayActivity.Listen(causalServerPipe.ToString());
                   })));
               }
               foreach (var thread in threads)
                   thread.Start();
               foreach (var thread in threads)
                   thread.Join();
               this.ThreadMaterial.Run();
               //Console.WriteLine("Causal Activity {0} wait for Dependent Activity", m_name);
               this.SerializeMaterial();
               outStream.WaitForConnection();
           }).Start();
        }

PM MAIL ICQ   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
Прежде чем создать тему, посмотрите сюда:
cully
mr.DUDA
Exception

Используйте теги [code=csharp][/code] для подсветки кода. Используйтe чекбокс "транслит" если у Вас нет русских шрифтов.

Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, cully, mr.DUDA, Exception.

 
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | Распределённые приложения и сеть | Следующая тема »


 




[ Время генерации скрипта: 0.0377 ]   [ Использовано запросов: 22 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.