Movatterモバイル変換


[0]ホーム

URL:


Skip to content

Navigation Menu

Sign in
Appearance settings

Search code, repositories, users, issues, pull requests...

Provide feedback

We read every piece of feedback, and take your input very seriously.

Saved searches

Use saved searches to filter your results more quickly

Sign up
Appearance settings

Commit2ee9471

Browse files
committed
remove buffer
1 parentdef029c commit2ee9471

File tree

2 files changed

+23
-52
lines changed

2 files changed

+23
-52
lines changed

‎Coder Desktop/Proto/Speaker.swift

Lines changed: 19 additions & 43 deletions
Original file line numberDiff line numberDiff line change
@@ -95,48 +95,6 @@ actor Speaker<SendMsg: RPCMessage & Message, RecvMsg: RPCMessage & Message> {
9595
try _=await hndsh.handshake()
9696
}
9797

98-
publicfunc start(){
99-
guard readLoopTask==nilelse{
100-
logger.error("speaker is already running")
101-
return
102-
}
103-
readLoopTask=Task{
104-
dothrows(ReceiveError){
105-
fortryawaitmsgintryawaitself.receiver.messages(){
106-
guard msg.hasRpcelse{
107-
await messageBuffer.push(.message(msg))
108-
continue
109-
}
110-
guard msg.rpc.msgID==0else{
111-
letreq=RPCRequest<SendMsg,RecvMsg>(req: msg, sender:self.sender)
112-
await messageBuffer.push(.RPC(req))
113-
continue
114-
}
115-
guard msg.rpc.responseTo==0else{
116-
self.logger.debug("got RPC reply for msgID\(msg.rpc.responseTo)")
117-
dothrows(RPCError){
118-
tryawaitself.secretary.route(reply: msg)
119-
} catch{
120-
self.logger.error(
121-
"couldn't route RPC reply for\(msg.rpc.responseTo):\(error)")
122-
}
123-
continue
124-
}
125-
}
126-
}catch{
127-
self.logger.error("failed to receive messages:\(error)")
128-
throw error
129-
}
130-
}
131-
}
132-
133-
func wait()asyncthrows{
134-
guardlet task= readLoopTaskelse{
135-
return
136-
}
137-
tryawait task.value
138-
}
139-
14098
/// Send a unary RPC message and handle the response
14199
func unaryRPC(_ req:SendMsg)asyncthrows->RecvMsg{
142100
returntryawaitwithCheckedThrowingContinuation{ continuationin
@@ -212,7 +170,25 @@ extension Speaker: AsyncSequence, AsyncIteratorProtocol {
212170
}
213171

214172
func next()asyncthrows->IncomingMessage?{
215-
returnawait messageBuffer.next()
173+
fortryawaitmsgintryawait receiver.messages(){
174+
guard msg.hasRpcelse{
175+
return.message(msg)
176+
}
177+
guard msg.rpc.msgID==0else{
178+
return.RPC(RPCRequest<SendMsg,RecvMsg>(req: msg, sender: sender))
179+
}
180+
guard msg.rpc.responseTo==0else{
181+
logger.debug("got RPC reply for msgID\(msg.rpc.responseTo)")
182+
dothrows(RPCError){
183+
tryawaitself.secretary.route(reply: msg)
184+
} catch{
185+
logger.error(
186+
"couldn't route RPC reply for\(msg.rpc.responseTo):\(error)")
187+
}
188+
continue
189+
}
190+
}
191+
return nil
216192
}
217193
}
218194

‎Coder Desktop/ProtoTests/SpeakerTests.swift

Lines changed: 4 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -40,8 +40,6 @@ struct SpeakerTests {
4040
}
4141

4242
@Testfunc handleSingleMessage()asyncthrows{
43-
await uut.start()
44-
4543
vars=Vpn_ManagerMessage()
4644
s.start=Vpn_StartRequest()
4745
await #expect(throws:Never.self){
@@ -54,12 +52,9 @@ struct SpeakerTests {
5452
}
5553
#expect(msg.msg==.start(Vpn_StartRequest()))
5654
tryawait sender.close()
57-
tryawait uut.wait()
5855
}
5956

6057
@Testfunc handleRPC()asyncthrows{
61-
await uut.start()
62-
6358
vars=Vpn_ManagerMessage()
6459
s.start=Vpn_StartRequest()
6560
s.rpc=Vpn_RPC()
@@ -89,12 +84,13 @@ struct SpeakerTests {
8984
#expect(count==1)
9085
}
9186
tryawait sender.close()
92-
tryawait uut.wait()
9387
}
9488

9589
@Testfunc sendRPCs()async throws{
96-
await uut.start()
97-
90+
// Speaker must be reading from the receiver for `unaryRPC` to return
91+
Task{
92+
fortryawait_in uut{}
93+
}
9894
asyncletmanagerDone=Task{
9995
varcount=0
10096
fortryawaitreqintryawait receiver.messages(){
@@ -118,6 +114,5 @@ struct SpeakerTests {
118114
await uut.closeWrite()
119115
_=await managerDone
120116
tryawait sender.close()
121-
tryawait uut.wait()
122117
}
123118
}

0 commit comments

Comments
 (0)

[8]ページ先頭

©2009-2025 Movatter.jp