示例#1
0
        public virtual IEnumerator <ITask> QueryFilesHandler(QueryFiles queryFiles)
        {
            ResponseFiles response = new ResponseFiles();

            response.Files = new List <LegoFile>();
            bool done   = false;
            int  handle = 0;

            nxtcmd.LegoCommand cmd = new nxtcmd.LegoFindFirst(queryFiles.Body.Filespec);
            yield return(Arbiter.Choice(_legoBrickPort.SendNxtCommand(cmd),
                                        delegate(nxtcmd.LegoResponse ok)
            {
                nxtcmd.LegoResponseFindFirst ffResponse = nxtcmd.LegoResponse.Upcast <nxtcmd.LegoResponseFindFirst>(ok);
                if (ffResponse.Success)
                {
                    response.Files.Add(new LegoFile(ffResponse.FileName, (int)ffResponse.FileSize));
                    handle = ffResponse.Handle;
                }
                else
                {
                    done = true;
                }
            },
                                        delegate(Fault fault)
            {
                done = true;
            }));

            while (!done)
            {
                cmd = new nxtcmd.LegoFindNext(handle);
                yield return(Arbiter.Choice(_legoBrickPort.SendNxtCommand(cmd),
                                            delegate(nxtcmd.LegoResponse ok)
                {
                    nxtcmd.LegoResponseFindNext fnResponse = nxtcmd.LegoResponse.Upcast <nxtcmd.LegoResponseFindNext>(ok);
                    if (fnResponse.Success)
                    {
                        response.Files.Add(new LegoFile(fnResponse.FileName, (int)fnResponse.FileSize));
                        handle = fnResponse.Handle;
                    }
                    else
                    {
                        done = true;
                    }
                },
                                            delegate(Fault fault)
                {
                    done = true;
                }));
            }

            _state.ResponseFiles = response;
            queryFiles.ResponsePort.Post(response);
            yield break;
        }
示例#2
0
        public QueryConfiguration(params string[] configurationFiles) : this()
        {
            ArgumentUtility.CheckNotNull("configurationFiles", configurationFiles);

            for (int i = 0; i < configurationFiles.Length; i++)
            {
                string           configurationFile = configurationFiles[i];
                QueryFileElement element           = new QueryFileElement(configurationFile);
                QueryFiles.Add(element);
            }
        }
        public virtual IEnumerator<ITask> QueryFilesHandler(QueryFiles queryFiles)
        {
            ResponseFiles response = new ResponseFiles();
            response.Files = new List<LegoFile>();
            bool done = false;
            int handle = 0;

            nxtcmd.LegoCommand cmd = new nxtcmd.LegoFindFirst(queryFiles.Body.Filespec);
            yield return Arbiter.Choice(_legoBrickPort.SendNxtCommand(cmd),
                delegate(nxtcmd.LegoResponse ok)
                {
                    nxtcmd.LegoResponseFindFirst ffResponse = nxtcmd.LegoResponse.Upcast<nxtcmd.LegoResponseFindFirst>(ok);
                    if (ffResponse.Success)
                    {
                        response.Files.Add(new LegoFile(ffResponse.FileName, (int)ffResponse.FileSize));
                        handle = ffResponse.Handle;
                    }
                    else
                        done = true;
                },
                delegate(Fault fault)
                {
                    done = true;
                });

            while (!done)
            {
                cmd = new nxtcmd.LegoFindNext(handle);
                yield return Arbiter.Choice(_legoBrickPort.SendNxtCommand(cmd),
                    delegate(nxtcmd.LegoResponse ok)
                    {
                        nxtcmd.LegoResponseFindNext fnResponse = nxtcmd.LegoResponse.Upcast<nxtcmd.LegoResponseFindNext>(ok);
                        if (fnResponse.Success)
                        {
                            response.Files.Add(new LegoFile(fnResponse.FileName, (int)fnResponse.FileSize));
                            handle = fnResponse.Handle;
                        }
                        else
                            done = true;
                    },
                    delegate(Fault fault)
                    {
                        done = true;
                    });
            }

            _state.ResponseFiles = response;
            queryFiles.ResponsePort.Post(response);
            yield break;
        }
示例#4
0
        public async Task <ActionResult> Index(QueryFiles queryFiles)
        {
            var files = await _mediator.Send(queryFiles);

            return(View(files));
        }
示例#5
0
        private bool ClientMessageReceivedHandler(byte[] Data, List <Action> Callbacks = null)
        {
            MessageType Type = GetMessageType(Data);

            if (Type == MessageType.Invalid)
            {
                Disconnect(false);
                return(false);
            }
            switch (Type)
            {
            case MessageType.Multi:
            {
                Message <Multi> Message = new Message <Multi>(Data);
                byte[]          Payload = Message.Body.MessageBody;
                if ((Message.Body.UncompressedSize ?? 0) > 0)
                {
                    byte[] DecompressedPayload;
                    int    UncompressedSize = Message.Body.UncompressedSize.Value;
                    try
                    {
                        using (MemoryStream Stream = new MemoryStream(Payload))
                            using (GZipStream Decompressor = new GZipStream(Stream, CompressionMode.Decompress))
                                Decompressor.Read(DecompressedPayload = new byte[UncompressedSize], 0, UncompressedSize);
                        Payload = DecompressedPayload;
                    }
                    catch { break; }
                }
                List <Action> CallbacksList = new List <Action>();
                using (MemoryStream Stream = new MemoryStream(Payload))
                    using (BinaryReader Reader = new BinaryReader(Stream))
                        while (Stream.Position != Stream.Length)
                        {
                            byte[] Buffer = new byte[4];
                            Stream.Read(Buffer, 0, 4);
                            int PacketSize = ToInt32(Buffer, 0);
                            Buffer = new byte[PacketSize];
                            Stream.Read(Buffer, 0, PacketSize);
                            if (!ClientMessageReceivedHandler(Buffer, CallbacksList))
                            {
                                break;
                            }
                        }
                foreach (Action Callback in CallbacksList)
                {
                    Callback();
                }
                break;
            }

            case MessageType.LogOnResponse:
            {
                Message <LogOn> Message = new Message <LogOn>(Data);
                int             Result  = Message.Body.Result;
                Log($"Received log on response, result code: {Result}");
                if (Result == 1)
                {
                    IsLogged  = true;
                    SessionID = Message.Header.SessionID;
                    SteamID   = Message.Header.SteamID;
                    HeartbeatTimer.Change(0, Message.Body.HeartbeatDelay * 1000);
                    Log($"Log on succeeded, initiating heartbeat with {Message.Body.HeartbeatDelay} seconds delay");
                }
                if (Callbacks is null)
                {
                    LoggedOn?.Invoke();
                }
                else
                {
                    Callbacks.Add(() => LoggedOn?.Invoke());
                }
                break;
            }

            case MessageType.ServiceMethodResponse:
            {
                byte[] SerializedMethod = new Message <ServiceMethod>(Data).Body.SerializedMethod;
                switch (ExpectedServiceMethod)
                {
                case 0:
                {
                    ItemInfo Info = new ItemInfo();
                    Info.Deserialize(SerializedMethod);
                    WorkshopItem Item       = Info.Item;
                    ulong        ManifestID = Item.ManifestID;
                    Log($"Received latest manifest ID for mod {Item.ItemID}: {ManifestID}");
                    if (Callbacks is null)
                    {
                        ModInfoReceived(ManifestID);
                    }
                    else
                    {
                        Callbacks.Add(() => ModInfoReceived(ManifestID));
                    }
                    break;
                }

                case 1:
                {
                    GetDetails Details = new GetDetails();
                    Details.Deserialize(SerializedMethod);
                    Log("Received mods details");
                    if (Callbacks is null)
                    {
                        ModsDetailsReceived(Details.Details);
                    }
                    else
                    {
                        Callbacks.Add(() => ModsDetailsReceived(Details.Details));
                    }
                    break;
                }

                case 2:
                {
                    QueryFiles Query = new QueryFiles();
                    Query.Deserialize(SerializedMethod);
                    Log($"Received {Query.Details.Count} queried items details");
                    if (Callbacks is null)
                    {
                        QueryReceived(Query.Details, Query.Total);
                    }
                    else
                    {
                        Callbacks.Add(() => QueryReceived(Query.Details, Query.Total));
                    }
                    break;
                }
                }
                break;
            }

            case MessageType.ProductInfoResponse:
            {
                Message <ProductInfo> Message = new Message <ProductInfo>(Data);
                if (Message.Body.App is null)
                {
                    break;
                }
                Log("Received product info for app 346110");
                VDFStruct AppInfo;
                using (MemoryStream Stream = new MemoryStream(Message.Body.App.Buffer))
                    using (StreamReader Reader = new StreamReader(Stream))
                        AppInfo = new VDFStruct(Reader);
                if (Callbacks is null)
                {
                    AppInfoReceived(AppInfo);
                }
                else
                {
                    Callbacks.Add(() => AppInfoReceived(AppInfo));
                }
                break;
            }
            }
            return(true);
        }