public override void Send(RemoteClient RemoteClient, Messages.Message message) { ///Remote Client must be offline ///this ckeck must be in remoteclient.send Tasks.Enqueue(new Task(() => { lock (Clients) { message.Environment = this; if (!Clients.Any(x => x.Id == RemoteClient.Id)) { ParentClient.Log(LogLevel.Error, "Не могу послать сообщение {0} узлу {1}. Похоже что он оффлайн", message, RemoteClient); return; } var B = Clients.FirstOrDefault(x => x.Id == RemoteClient.Id).Environment; if (B == null) throw new Exception("client not ready or offline"); var m = Message.Decode(message.Code(), B); var remote = B.RemoteClients.First(x => x.Id == m.FromId); B.EmitMessageRecived(remote, m); } }, string.Format("Message {0} to {1} sended", message.Type, RemoteClient.Id) )); m_signal.Set(); }