CSE lab7 RPC 攻略

part A

marshall:
通过观察可以得知,所有无符号的整形的实现相当于从高位到低位的每个字节依次调用rawbyte,所有的有符号整形都是直接调用同一尺寸的无符号整形。
一种实现是调用rawbyte4次,另一种是调用ushort的重载方法两次。

unmarshall:
这回引用传参不能强转了,所以每个尺寸的无符号和有符号整形写了两遍相同的代码。
不解释,直接照搬int的实现就成。

part B

checkduplicate_and_update:

1. 遍历一遍reply_t的list(reply_window_[clt_nonce]) 对于每个reply_t对象:
1.1 如果xid等于参数xid且cb_present为true,将那个对象的buf和sz赋给参数*b和*sz,返回DONE
1.2 如果xid等于参数xid且cb_present为false,返回INPROGRESS

2. 如果list不为空 且参数xid小于所有reply_t对象的xid 返回FORGOTTEN

3. 删掉list中所有满足xid < xid_rep的对象

4. 向list插入一个新的reply_t对象,它的xid为参数xid,cb_present为false 返回NEW

*. 为了删除和判断方便,可以把list实现成按照xid升序排列的

add_reply:

1. 遍历一遍reply_t的list 对于每个reply_t对象:
1.1 如果xid等于参数xid 将参数的b和sz赋给对象的buf和sz 并将对象的cb_present置为true 之后break

你可能感兴趣的:(CSE lab7 RPC 攻略)