You are an expert in writing code in many different languages. Your goal is to perform code completion for the following code, keeping in mind the rest of the code and the file meta data.
    Metadata details:
    filename: rpc_test.go
    path of file: ./repos/cellnet/tests
    
    the code of the file until where you have to start completion: package tests

import (
	"github.com/davyxu/cellnet"
	"github.com/davyxu/cellnet/peer"
	"github.com/davyxu/cellnet/proc"
	"github.com/davyxu/cellnet/proc/tcp"
	"github.com/davyxu/cellnet/rpc"
	"testing"
	"time"
)

const syncRPC_Address = "127.0.0.1:9201"

var (
	syncRPC_Signal  *SignalTester
	asyncRPC_Signal *SignalTester
	typeRPC_Signal  *SignalTester

	rpc_Acceptor cellnet.Peer
)

fun
    
func typeRPC_OnClientEvent(ev cellnet.Event) {

	switch ev.Message().(type) {
	case *cellnet.SessionConnected:
		for i := 0; i < 2; i++ {

			copy := i + 1

			// 注意, 这里不能使用CallType, 异步第一次回来后, 就将rpc上下文清楚,导致第二次之后的回调无法触发, 不属于bug
			rpc.CallSyncType(ev.Session(), &TestEchoACK{
				Msg:   "type",
				Value: 1234,
			}, time.Second*5, func(ack *TestEchoACK, err error) {

				if err != nil {
					panic(err)
				}

				log.Debugln("client type sync recv:", ack)
				typeRPC_Signal.Done(copy)

			})

		}
	}
}