Beispiel #1
0
        public bool TryGetMessage(out RouteMessage routeMessageObj)
        {
            CancellationTokenSource cts = new CancellationTokenSource(Timeout);

            routeMessageObj = Task.Run(() =>
            {
                int count;
                lock (LockObj)
                    count = Sessions[SessionId].Count;

                while (count < 1)
                {
                    if (cts.Token.IsCancellationRequested)
                    {
                        return(null);
                    }
                    Thread.Sleep(500);
                    lock (LockObj)
                        count = Sessions[SessionId].Count;
                }

                lock (LockObj)
                    return(Sessions[SessionId].Dequeue());
            }, cts.Token).Result;

            return(routeMessageObj != null);
        }
Beispiel #2
0
        /// <summary>
        /// Method converts route message from solver to server message.
        /// </summary>
        /// <param name="msg">Route message.</param>
        /// <returns>Server message.</returns>
        private static ServerMessage _ConvertRouteMessage(RouteMessage msg)
        {
            Debug.Assert(msg != null);

            return(new ServerMessage(ServerMessageType.Info,
                                     String.Format(MSG_FORMAT, msg.Type, msg.Description)));
        }
Beispiel #3
0
        public static void Main(string[] args, KeyStorage keyStorage)
        {
            //Usage
            if (args.Length != 4)
            {
                throw new HelpException("Missing arguments");
            }
            string sourcePath     = args [1];
            string repoPath       = args [2];
            string receipientName = args [3];

            //Source
            if (Directory.Exists(sourcePath) == false)
            {
                throw new HelpException("Source directory not found: " + sourcePath);
            }

            //Repo
            Repo repo = Repo.Create(repoPath);

            //Sender and Recipient keys
            PrivateKey senderKey    = keyStorage.DefaultKey;
            PublicKey  recipientKey = keyStorage.GetPublic(receipientName);

            //Prepare Route message recording of ChunkID
            RouteRepo rr = new RouteRepo(repo);

            //Prepare Encryption
            EncryptedRepo er = new EncryptedRepo(rr, null);

            er.AddKey(recipientKey);

            Console.Write("Generating Tree...");

            //Send Tree
            ChunkHash tree = TreeChunk.GenerateChunk(sourcePath, er);

            //TreeMessage
            TreeMessage tm   = new TreeMessage(tree, Path.GetDirectoryName(sourcePath));
            Chunk       tmc  = Message.ToChunk(tm, senderKey);
            ChunkHash   tmch = er.WriteChunk(tmc);

            er.StoreMessage("file", tmch);

            //RouteMessage
            RouteMessage rm = rr.RouteMessage;

            rm.MessageChunkHash = tmch.bytes;
            rm.To = receipientName;

            //Store unencrypted RouteMessage
            Chunk rmChunk = Message.ToChunk(rm);

            repo.WriteChunk(rmChunk);
            repo.StoreMessage("route", rmChunk.ChunkHash);
            Console.WriteLine("RouteMessage Stored");
        }
Beispiel #4
0
        protected virtual bool RaiseSessionEvent(RouteMessage message)
        {
            if (SessionReceived != null)
            {
                SessionReceived?.Invoke(null, new SessionReceivedEventArgs
                {
                    RouteMessageObj = message
                });
                return(true);
            }

            return(false);
        }
Beispiel #5
0
        public static void Main(string[] args, KeyStorage keyStorage)
        {
            if (args.Length != 2)
            {
                throw new HelpException("Missing arguments");
            }

            //Repo
            Repo repo = Repo.Create(args [1]);

            //Find message
            ICollection <ChunkHash> messages = repo.GetMessageList("file");
            EncryptedRepo           es       = new EncryptedRepo(repo, keyStorage);

            //Iterate over all messages
            foreach (ChunkHash mid in messages)
            {
                Console.Write(mid.ToString().Substring(0, 10) + "... ");

                Message message = Message.FromChunk(es.ReadChunk(mid), keyStorage);

                //No key found
                if (message == null)
                {
                    Console.WriteLine("no key");
                    continue;
                }

                if (message.Signature != null)
                {
                    Console.Write("(signed by " + message.Signature.Name + ") ");
                }

                TreeMessage tm = message as TreeMessage;
                if (tm != null)
                {
                    Console.WriteLine("TreeMessage " + tm.Name);
                    continue;
                }

                RouteMessage rm = message as RouteMessage;
                if (rm != null)
                {
                    Console.WriteLine("RouteMessage to " + rm.To);
                    continue;
                }

                Console.WriteLine("unknown message type: " + message.GetType().Name);
            }
        }
Beispiel #6
0
        public override async void SendMessageAsync(RouteMessage message)
        {
            var routeMsg = (CoolQRouteMessage)message;

            OnMessageSending?.Invoke(routeMsg);
            if (routeMsg.Canceled && !routeMsg.IsForced)
            {
                return;
            }

            if (routeMsg.DelayTime > TimeSpan.FromSeconds(0))
            {
                await Task.Delay(routeMsg.DelayTime).ConfigureAwait(false);
            }

            var msg = (routeMsg.EnableAt && routeMsg.MessageType != MessageType.Private
                          ? new At(routeMsg.UserId) + " "
                          : "") + ((CoolQMessage)routeMsg.Message).Compose();
            string info = routeMsg.Identity.ToString();
            string status;

            switch (routeMsg.MessageType)
            {
            case MessageType.Group:
                status = CoolQHttpApiClient.SendGroupMessageAsync(routeMsg.GroupId, msg).Status;
                break;

            case MessageType.Discuss:
                status = CoolQHttpApiClient.SendDiscussMessageAsync(routeMsg.DiscussId, msg).Status;
                break;

            case MessageType.Private:
                status = CoolQHttpApiClient.SendPrivateMessageAsync(routeMsg.UserId, msg).Status;
                break;

            default:
                throw new ArgumentOutOfRangeException();
            }

            Logger.Message(string.Format("({0}) 我: {{status: {1}}}\r\n  {2}", info, status, CoolQCode.DecodeToString(msg)));
        }
 public Task CreateBlockChainRoute(RouteMessage routeMessage)
 {
     Console.WriteLine("Made it");
     return(Task.CompletedTask);
 }
 public Task Route(RouteMessage routeMessage)
 {
     _pipelineBlock.Post(routeMessage);
     return(Task.CompletedTask);
 }
Beispiel #9
0
 public Task GetCustomerAddress(IWorkContext context, RouteMessage <CustomerInfoRequest> request)
 {
     return(Task.CompletedTask);
 }
Beispiel #10
0
 public RouteRepo(Repo backendRepo) : base(backendRepo)
 {
     this.RouteMessage = new RouteMessage();
 }
Beispiel #11
0
 protected static void SendMessage(RouteMessage routeMsg) =>
 DaylilyCore.Current.MessageDispatcher?.SendMessageAsync(routeMsg);
Beispiel #12
0
 public abstract void SendMessageAsync(RouteMessage message);