1
+ @file:Suppress(" UnnecessaryVariable" )
2
+
1
3
package os_package
2
4
3
5
import environment.reflection.KProcess
4
6
import internals.Vm
5
7
import java.util.*
8
+ import kotlin.system.exitProcess
6
9
7
10
8
11
/* *
@@ -32,15 +35,15 @@ class Ipc {
32
35
var idCount = 0
33
36
val mailBoxes = mutableMapOf<Int , Stack <Long >>()
34
37
35
- fun preposeLink (requester : KProcess , acceptent : KProcess ): Int? {
36
- if (requester !in pending) {
37
- pending[requester ] = mutableSetOf ()
38
+ fun preposeLink (requestant : KProcess , acceptent : KProcess ): Int? {
39
+ if (requestant !in pending) {
40
+ pending[requestant ] = mutableSetOf ()
38
41
}
39
- pending[requester ]!! .add(acceptent)
40
- if (pending[acceptent]?.contains(requester ) == true ) {
42
+ pending[requestant ]!! .add(acceptent)
43
+ if (pending[acceptent]?.contains(requestant ) == true ) {
41
44
idCount++
42
45
mailBoxes[idCount] = Stack ()
43
- requester .ipcPermissions.add(idCount)
46
+ requestant .ipcPermissions.add(idCount)
44
47
acceptent.ipcPermissions.add(idCount)
45
48
46
49
return idCount
@@ -68,17 +71,22 @@ class Ipc {
68
71
}
69
72
70
73
71
- fun main () {
74
+ fun main () { // TODO add a way to lookup PIDS cause so far processes do not know how to see other ones
72
75
val p1 = KProcess (vm = Vm ())
73
76
val p2 = KProcess (vm = Vm ())
74
77
val p3 = KProcess (vm = Vm ())
75
78
val ipc = Ipc .MessagePassing ()
76
79
77
- ipc.preposeLink(p1, p2)
78
- val o = ipc.preposeLink(p1, p1) !!
80
+ val requestant = p1
81
+ val acceptent = p2
79
82
80
- ipc.send(p1, 29 , 24 )
81
- println (ipc.receive(p1, 29 ))
83
+ ipc.preposeLink(requestant, acceptent)
84
+ val o = ipc.preposeLink(acceptent, requestant)
85
+ println (" [Link] [${requestant.id} ,${acceptent.id} ]: ${if (o != null ) " success " else " failed" } " )
86
+ if (o == null ) exitProcess(1 )
82
87
88
+ println (" [Send] [${requestant.id} ,${acceptent.id} ]: ${if (ipc.send(p1, o, 24 )) " success " else " failed" } " )
89
+ val x = ipc.receive(p1, o)
90
+ println (" [Receive] [${requestant.id} ,${acceptent.id} ]: ${if (x == null ) " failed" else " $x " } " )
83
91
84
92
}
0 commit comments