Ejemplo n.º 1
0
        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();
        }