mirror of
https://github.com/SquidDev-CC/CC-Tweaked
synced 2024-11-14 22:04:53 +00:00
c0643fadca
Historically we've used copy-cat to provide a web-based emulator for running example code on our documentation site. However, copy-cat is often out-of-date with CC:T, which means example snippets fail when you try to run them! This commit vendors in copy-cat (or rather an updated version of it) into CC:T itself, allowing us to ensure the emulator is always in sync with the mod. While the ARCHITECTURE.md documentation goes into a little bit more detail here, the general implementation is as follows - In project/src/main we implement the core of the emulator. This includes a basic reimplementation of some of CC's classes to work on the web (mostly the HTTP API and ComputerThread), and some additional code to expose the computers to Javascript. - This is all then compiled to Javascript using [TeaVM][1] (we actually use a [personal fork of it][2] as there's a couple of changes I've not upstreamed yet). - The Javascript side then pulls in the these compiled classes (and the CC ROM) and hooks them up to [cc-web-term][3] to display the actual computer. - As we're no longer pulling in copy-cat, we can simplify our bundling system a little - we now just compile to ESM modules directly. [1]: https://github.com/konsoletyper/teavm [2]: https://github.com/SquidDev/teavm/tree/squid-patches [3]: https://github.com/squiddev-cc/cc-web-term
49 lines
1.3 KiB
Markdown
49 lines
1.3 KiB
Markdown
---
|
|
module: [kind=event] file_transfer
|
|
since: 1.101.0
|
|
---
|
|
|
|
<!--
|
|
SPDX-FileCopyrightText: 2022 The CC: Tweaked Developers
|
|
|
|
SPDX-License-Identifier: MPL-2.0
|
|
-->
|
|
|
|
The [`file_transfer`] event is queued when a user drags-and-drops a file on an open computer.
|
|
|
|
This event contains a single argument of type [`TransferredFiles`], which can be used to [get the files to be
|
|
transferred][`TransferredFiles.getFiles`]. Each file returned is a [binary file handle][`fs.BinaryReadHandle`] with an
|
|
additional [getName][`TransferredFile.getName`] method.
|
|
|
|
## Return values
|
|
1. [`string`]: The event name
|
|
2. [`TransferredFiles`]: The list of transferred files.
|
|
|
|
## Example
|
|
Waits for a user to drop files on top of the computer, then prints the list of files and the size of each file.
|
|
|
|
```lua
|
|
local _, files = os.pullEvent("file_transfer")
|
|
for _, file in ipairs(files.getFiles()) do
|
|
-- Seek to the end of the file to get its size, then go back to the beginning.
|
|
local size = file.seek("end")
|
|
file.seek("set", 0)
|
|
|
|
print(file.getName() .. " " .. size)
|
|
end
|
|
```
|
|
|
|
## Example
|
|
Save each transferred file to the computer's storage.
|
|
|
|
```lua
|
|
local _, files = os.pullEvent("file_transfer")
|
|
for _, file in ipairs(files.getFiles()) do
|
|
local handle = fs.open(file.getName(), "wb")
|
|
handle.write(file.readAll())
|
|
|
|
handle.close()
|
|
file.close()
|
|
end
|
|
```
|