public async void SyncPos(long userId){ unity.Debug.Log ("start SynPos"); using (var call = client.SyncPos ()) { var CallRecvTask = Task.Run (async () => { while (!rpcStopSignal.Token.IsCancellationRequested && await call.ResponseStream.MoveNext ()) { Msg.Position pos = call.ResponseStream.Current; Gm.InPosQueue.Enqueue(pos); } }); Msg.Input start = new Msg.Input{ UserId = userId}; await call.RequestStream.WriteAsync (start); while (!rpcStopSignal.Token.IsCancellationRequested) { if (Gm.OutInputQueue.TryPeek(out m_Input)){ try { call.RequestStream.WriteAsync (m_Input); Gm.OutInputQueue.TryDequeue(out m_Input); } catch (InvalidOperationException e) { unity.Debug.Log("SyncPos input," + m_Input +","+ e); } } await Task.Delay(1); } await call.RequestStream.CompleteAsync (); await CallRecvTask; unity.Debug.Log ("SyncPos(); exit"); } }
private void Awake() { m_ExplosionParticles = Instantiate(m_ExplosionPrefab).GetComponent <ParticleSystem>(); m_ExplosionAudio = m_ExplosionParticles.GetComponent <AudioSource>(); m_ExplosionParticles.gameObject.SetActive(false); //Debug.Log(GetChildRendererBounds (gameObject)); m_Rigidbody = GetComponent <Rigidbody>(); var obj = GameObject.Find("GameManager"); gm = obj.GetComponent <GameManager> (); m_input = new Msg.Input(); m_input.UserId = gm.m_UserInfo.Uuid; step = 10f; m_q = transform.rotation; m_p = transform.position; CQuaternion = new ConcurrentQueue <Quaternion>(); CPosition = new ConcurrentQueue <Vector3> (); CHealth = new ConcurrentQueue <float>(); isDead = false; }