@@ -47,8 +47,8 @@ let attachSession id svrpipe =
47
47
| true , ({ server = None } as s) ->
48
48
let ns = { s with server = Some svrpipe}
49
49
sessions.[ id] <- ns
50
- Some ns
51
- | _ -> None
50
+ Ok ns
51
+ | _ -> Error - 2
52
52
53
53
let newSession nvim stderrenc args svrpipe =
54
54
let myid = sessionId
@@ -74,15 +74,16 @@ let newSession nvim stderrenc args svrpipe =
74
74
sessionId <- sessionId + 1
75
75
sessions.[ myid] <- session
76
76
proc.Start() |> ignore
77
- Some session
77
+ Ok session
78
78
79
79
80
80
let attachFirstSession svrpipe =
81
81
sessions |> Seq.tryFind ( fun kv -> kv.Value.server.IsNone)
82
- >>= fun kv ->
82
+ >>= ( fun kv ->
83
83
let ns = { kv.Value with server = Some svrpipe}
84
84
sessions.[ kv.Key] <- ns
85
- Some ns
85
+ Some ns)
86
+ |> function | Some ns -> Ok ns | None -> Error - 1
86
87
87
88
let serveSession ( session : Session ) =
88
89
async {
@@ -130,11 +131,13 @@ let serve nvim stderrenc (pipe: NamedPipeServerStream) =
130
131
| AttachFirst _ -> attachFirstSession pipe
131
132
132
133
match session with
133
- | None ->
134
- trace " Session unavailable for request %A " request
134
+ | Error errno ->
135
+ trace " Session unavailable for request %A , errno=%d " request errno
136
+ do ! fromInt32LE errno |> readonlymemory |> write pipe
135
137
return ()
136
- | Some session ->
138
+ | Ok session ->
137
139
trace " Request %A is attaching to session %d " request session.id
140
+ do ! fromInt32LE session.id |> readonlymemory |> write pipe
138
141
do ! serveSession session
139
142
finally
140
143
try
@@ -165,8 +168,14 @@ let fvrConnect (stdin: Stream) (verb: FVimRemoteVerb) =
165
168
verb
166
169
|> Json.serialize
167
170
|> Text.Encoding.UTF8.GetBytes
168
- let len = fromInt32LE payload.Length
169
- stdin.Write( FVR_ MAGIC, 0 , FVR_ MAGIC.Length)
170
- stdin.Write( len, 0 , len.Length)
171
- stdin.Write( payload, 0 , payload.Length)
172
- stdin.Flush()
171
+ let intbuf = fromInt32LE payload.Length
172
+ try
173
+ stdin.Write( FVR_ MAGIC, 0 , FVR_ MAGIC.Length)
174
+ stdin.Write( intbuf, 0 , intbuf.Length)
175
+ stdin.Write( payload, 0 , payload.Length)
176
+ stdin.Flush()
177
+ Async.StartAsTask( read stdin ( intbuf.AsMemory())) .Wait()
178
+ toInt32LE intbuf
179
+ with ex ->
180
+ trace " %O " ex
181
+ - 10
0 commit comments