@@ -27,7 +27,22 @@ type Session =
27
27
28
28
let private sessions = hashmap []
29
29
let mutable private sessionId = 0
30
- let FVR_MAGIC = [| 0x46 uy ; 0x56 uy ; 0x49 uy ; 0x4D uy |]
30
+ let private FVR_MAGIC = [| 0x46 uy ; 0x56 uy ; 0x49 uy ; 0x4D uy |]
31
+
32
+ [<Literal>]
33
+ let private FVR_NO_FREE_SESSION = - 1
34
+ [<Literal>]
35
+ let private FVR_SESSION_NOT_FOUND = - 2
36
+ [<Literal>]
37
+ let private FVR_CLIENT_EXCEPTION = - 10
38
+
39
+ let getErrorMsg =
40
+ function
41
+ | FVR_ NO_ FREE_ SESSION -> " No attachable free session available."
42
+ | FVR_ SESSION_ NOT_ FOUND -> " The specified session is not found."
43
+ | FVR_ CLIENT_ EXCEPTION -> " Could not connect to the session server."
44
+ | _ -> " Unknown error."
45
+
31
46
let private jsonopts = JsonSerializerOptions()
32
47
jsonopts.Converters.Add( JsonFSharpConverter())
33
48
let inline private serialize x = JsonSerializer.Serialize( x, jsonopts)
@@ -51,7 +66,7 @@ let attachSession id svrpipe =
51
66
let ns = { s with server = Some svrpipe}
52
67
sessions.[ id] <- ns
53
68
Ok ns
54
- | _ -> Error - 2
69
+ | _ -> Error FVR _ SESSION _ NOT _ FOUND
55
70
56
71
let newSession nvim stderrenc args svrpipe =
57
72
let myid = sessionId
@@ -86,13 +101,14 @@ let attachFirstSession svrpipe =
86
101
let ns = { kv.Value with server = Some svrpipe}
87
102
sessions.[ kv.Key] <- ns
88
103
Some ns)
89
- |> function | Some ns -> Ok ns | None -> Error - 1
104
+ |> function | Some ns -> Ok ns | None -> Error FVR _ NO _ FREE _ SESSION
90
105
91
106
let serveSession ( session : Session ) =
92
107
async {
93
108
let pname = pipename ( string session.id)
94
109
use client = new NamedPipeClientStream( " ." , pname, IO.Pipes.PipeDirection.InOut, IO.Pipes.PipeOptions.Asynchronous, TokenImpersonationLevel.Impersonation)
95
110
do ! Async.AwaitTask( client.ConnectAsync())
111
+ trace " Connected to NeoVim server at %s " pname
96
112
let fromNvim = client.CopyToAsync( session.server.Value)
97
113
let toNvim = session.server.Value.CopyToAsync( client)
98
114
let! _ = Async.AwaitTask( Task.WhenAny [| fromNvim; toNvim |])
@@ -181,4 +197,4 @@ let fvrConnect (stdin: Stream) (stdout: Stream) (verb: FVimRemoteVerb) =
181
197
toInt32LE intbuf
182
198
with ex ->
183
199
trace " %O " ex
184
- - 10
200
+ FVR _ CLIENT _ EXCEPTION
0 commit comments