Esempio n. 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);
        }
Esempio n. 2
0
 public static void Parse(Response response)
 {
     if (response.Request != null && response.Request.Guid != null)
     {
         ServerResponseList.Add(response.Request.Guid, response);
     }
     else if (response.Command == Command.updateFileTree)
     {
         var rootDirNode = response.Bytes.Deserialize <DirectoryNode>();
         FileTree.SetRootDirectory(rootDirNode);
     }
     else
     {
         if (response.Message != null)
         {
             Console.WriteLine(response.Message);
         }
     }
 }