예제 #1
0
파일: pnf.go 프로젝트: runningwild/pnf
func NewNetClientEngine(frame_ms int64, max_frames, port int) (*Engine, error) {
	var params core.EngineParams
	params.Id = 1234
	params.Delay = core.StateFrame(frame_ms) + 10
	params.Frame_ms = frame_ms
	params.Max_frames = max_frames
	net, err := core.MakeTcpUdpNetwork(port)
	if err != nil {
		return nil, err
	}

	ticker := core.NewBasicTicker()
	local_event, bundler, updater, communicator, auditor := makeUnstarted(params, net, ticker)
	engine := Engine{
		bundler:      bundler,
		updater:      updater,
		communicator: communicator,
		auditor:      auditor,
		local_event:  local_event,
		net:          net,
	}
	// ticker.Start()

	rhs, err := net.Ping([]byte("ASDFADSFADSF"))
	if err != nil {
		return nil, err
	}
	if len(rhs) == 0 {
		return nil, errors.New("Didn't find any remote hosts.")
	}
	conn, err := net.Join(rhs[0], []byte("I am joinng"))
	if err != nil {
		return nil, err
	}

	boot, id, err := communicator.Join(conn)
	if err != nil {
		return nil, err
	}

	bundler.Params.Id = id
	updater.Params.Id = id
	bundler.Current_ms = params.Frame_ms * (int64(boot.Frame))
	bundler.Start()
	updater.Bootstrap(boot)
	communicator.Start()
	auditor.Start()

	return &engine, nil
}
예제 #2
0
파일: pnf.go 프로젝트: runningwild/pnf
func NewNetEngine(initial_state Game, frame_ms int64, max_frames, port int) (*Engine, error) {
	var params core.EngineParams
	params.Id = 1234
	params.Delay = core.StateFrame(frame_ms) + 10
	params.Frame_ms = frame_ms
	params.Max_frames = max_frames
	net, err := core.MakeTcpUdpNetwork(port)
	if err != nil {
		return nil, err
	}

	local_event, bundler, updater, communicator, auditor := makeUnstarted(params, net, core.NewBasicTicker())
	engine := Engine{
		bundler:      bundler,
		updater:      updater,
		communicator: communicator,
		auditor:      auditor,
		local_event:  local_event,
		net:          net,
	}
	data := core.FrameData{
		Bundle: make(core.EventBundle),
		Game:   initial_state,
		Info: core.EngineInfo{
			Engines: map[core.EngineId]bool{params.Id: true},
		},
	}

	bundler.Current_ms = frame_ms + 1
	bundler.Start()
	updater.Start(0, data)
	communicator.Start()
	auditor.Start()

	ping_func := func([]byte) ([]byte, error) {
		return []byte("I AM A HOST!!!"), nil
	}
	join_func := func([]byte) error {
		return nil
	}
	net.Host(ping_func, join_func)

	return &engine, nil
}