Example #1
0
        private static void ProcessRequest(MessageQueueItem queueItem)
        {
            byte[] buffer = null;

            if (queueItem.Request.Command == Command.requestFileTree)
            {
                var rootDirNode = FileTree.GetRootDirectory();
                var response    = new Response
                {
                    Bytes     = rootDirNode.SerializeToByteArray(),
                    IsSuccess = true,
                    Command   = Command.updateFileTree
                };
                buffer = response.SerializeToByteArray();
            }
            else
            {
                var  executingAssembly = Assembly.GetExecutingAssembly();
                Type type = executingAssembly.GetTypes()
                            .FirstOrDefault(x => x.FullName.Contains(queueItem.Request.Type));
                var met = type.GetMethod(queueItem.Request.Method, BindingFlags.Static | BindingFlags.Public);

                //parameters = null when not sent so it's fine
                object value = met.Invoke(null, queueItem.Request.Parameters);

                var response = (Response)value;

                if (response.Command == Command.forwarded)
                {
                    Socket server = ServerList.GetServerList()
                                    .FirstOrDefault(x => x.IPPort.Equals(response.Message)).Socket;
                    queueItem.Request.Guid = Guid.NewGuid();
                    Network.Send(server, queueItem.Request.SerializeToByteArray());
                    while (!ServerResponseList.ContainsKey(queueItem.Request.Guid))
                    {
                    }
                    response = ServerResponseList.Remove(queueItem.Request.Guid);
                }

                response.Request = queueItem.Request;

                buffer = response.SerializeToByteArray();
            }

            //Thread.Sleep(2000);
            //Console.WriteLine($"size of response: {buffer.Length}");
            Network.Send(queueItem.Client, buffer);
        }
Example #2
0
 public static void Enqueue(MessageQueueItem request)
 {
     queue.Enqueue(request);
 }