콘텐츠로 이동

Signal - 이벤트 생성과 연결

읽기 전...

모듈 설정시 .Init() 처럼 QuadId 란을 비워두는 경우 Bindable, Disconnecter 기능이 코드를 넘어 공유되지 않습니다
하지만 .Init("Project1") 처럼 아이디를 부여하는 경우 다른 모듈, 로컬스크립트가 접근하더라도 같은 QuadId 를 가졌다면 Bindable, Disconnecter 는 공유됩니다

Quad 에는 편의상의 이유로 로블록스의 RBXScriptSignal 의 유사품과, 한번에 시그널을 끊어주는 Disconnecter 를 제공합니다.
이는 내부적으로 ExtendGetPropertyChangedSignal 같은 곳에서 사용되기도 합니다.

Bindable

Bindable 은 RBXScriptSignal 과 유사한 객체입니다. Signal.Bindable.New(id:string?) 으로 생성할 수 있습니다.
로블록스의 기본 BindableEvent 와는 다르게 :Fire 가 한곳에 합쳐져 있습니다.

Note

만약 id 를 지정한 경우, 같은 id 를 가진 Bindable 이 있으면 이전것을 반환합니다.

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
local Quad = require(path.to.module).Init()
local Signal = Quad.Signal

local mySignal = Signal.Bindable.New()

local connection = mySignal:Connect(function(v)
    print(v)
end)
mySignal:Fire("이 메시지는 출력되어야 합니다.")
connection:Disconnect()
mySignal:Fire("이 메시지는 출력되면 안됩니다.")

task.spawn(function()
    task.wait(5)
    mySignal:Fire("이 메시지는 지연된 후 출력되어야 합니다.")
end)
print(mySignal:Wait())

mySignal:Once(function(v)
    print(v)
end)
mySignal:Fire("이 메시지는 출력되어야 합니다.")
mySignal:Fire("이 메시지는 출력되면 안됩니다.")

mySignal:Once(function(v)
    print(v)
end):Disconnect()
mySignal:Fire("이 메시지는 출력되면 안됩니다.")

Bindable 메소드

Bindable 에는 다음과 같은 메소드들이 제공됩니다.

:Fire(...any)

등록된 연결들을 실행하고, Wait 을 풀어줍니다.


:Wait()->(...any)

Fire 가 호출될 때 까지 기다립니다. Fire 에 사용된 값이 반환됩니다.


:Connect((...any)->())->Connection

Fire 가 호출 될 때 함수가 실행되도록 만듭니다. Fire 에 사용된 값이 호출 인자로 사용됩니다. 연결을 끊을 수 있도록 Connection 이 제공됩니다.


:Once((...any)->())->Connection

Connect 와 유사하지만, Fire 가 한번 호출된 뒤 연결이 끊어집니다/


:CheckConnected(func)->boolean

함수가 이미 등록되어 있는지 여부를 반환합니다.


:DisconnectAll()

모든 연결을 끊습니다. Wait 으로 기다리고 있는 곳에는 nil 을 반환합니다.


:Destroy()

:DisconnectAll() 를 수행한 후, 객체를 더이상 사용할 수 없도록 만듭니다.
id 가 등록되어 있는경우 저장소에서 파기하게 됩니다.

Connection 메소드

Bindable:Connect 와 Bindable:Once 는 Connection 을 반환합니다. Connection 에는 다음과 같은 메소드들이 제공됩니다.

:Disconnect()

연결을 끊습니다. Fire 가 호출되더라도 Connect 혹은 Once 에 사용된 함수가 실행되지 않습니다.


:Destroy()

:Disconnect() 의 별칭입니다.


Disconnecter

Disconnecter 는 일종의 Maid 모듈과 비슷한 객체입니다. 이 객체에는 Connection (로블록스, Quad 모두 호환) 을 추가할 수 있으며, 나중에 추가된 Connection 을 한꺼번에 Disconnect 할 수 있습니다. Signal.Disconnecter.New(id:string?) 으로 생성할 수 있습니다.

Note

만약 id 를 지정한 경우, 같은 id 를 가진 Bindable 이 있으면 이전것을 반환합니다.

:Add(connection:Connection|RBXScriptConnection)

connection을 리스트에 추가합니다. 나중에 :Disconnect를 호출하면 추가된 연결이 파기됩니다.


:Disconnect()

추가된 모든 연결에 Disconnect() 를 수행합니다. 이 호출 후에 추가된 연결은 모두 사라지며. 이 요청 후에도 다시 :Add 를 사용할 수 있습니다
Disconnecter 를 완전히 사용하지 못하도록 하려면 :Destroy 를 호출하세요


:Destroy()

:Disconnect() 를 수행한 후, 객체를 더이상 사용할 수 없도록 만듭니다.
id 가 등록되어 있는경우 저장소에서 파기하게 됩니다.