void processor_SC_NOTI_MOVE_OBJECT(GAME.SC_NOTI_MOVE_OBJECT read) { var key = read.Key; //Debug.Log("key 움직임: " + key); var pos = new Vector3(read.PosX, read.PosY, read.PosZ); var rot = new Quaternion(read.RotX, read.RotY, read.RotZ, read.RotW); Int64 timestamp = read.Timestamp; //Debug.Log("SC_NOTI_MOVE_OBJECT"); //Debug.Log("x: " + pos.x + "y: " + pos.y + "z: " + pos.z); //Debug.Log(timestamp); var enemyTankInfo = enemies[key]; if (enemyTankInfo != null) { enemyTankInfo.snapshots[0].timestamp = enemyTankInfo.snapshots[1].timestamp; enemyTankInfo.snapshots[0].pos = enemyTankInfo.snapshots[1].pos; enemyTankInfo.snapshots[0].rot = enemyTankInfo.snapshots[1].rot; enemyTankInfo.snapshots[0].latency = enemyTankInfo.snapshots[1].latency; enemyTankInfo.snapshots[1].timestamp = read.Timestamp; enemyTankInfo.snapshots[1].pos = new Vector3(read.PosX, read.PosY, read.PosZ); enemyTankInfo.snapshots[1].rot = new Quaternion(read.RotX, read.RotY, read.RotZ, read.RotW); enemyTankInfo.snapshots[1].latency = session_.getServerTimestamp() - read.Timestamp; /* * enemyTankInfo.prev_last_info.timestamp = enemyTankInfo.last_info.timestamp; * enemyTankInfo.prev_last_info.pos = enemyTankInfo.last_info.pos; * enemyTankInfo.prev_last_info.rot = enemyTankInfo.last_info.rot; * enemyTankInfo.prev_last_info.latency = enemyTankInfo.last_info.latency; * * enemyTankInfo.last_info.timestamp = read.Timestamp; * enemyTankInfo.last_info.pos = new Vector3(read.PosX, read.PosY, read.PosZ); * enemyTankInfo.last_info.rot = new Quaternion(read.RotX, read.RotY, read.RotZ, read.RotW); * * Int64 Now = session_.getServerTimestamp(); * enemyTankInfo.last_info.latency = Now - read.Timestamp; * * if (Now - read.Timestamp <= 0) * { * Debug.Log("@@@@@@@@@@@ 말도안됨 @@@@@@@@@@@"); * } * * if (enemyTankInfo.prev_last_info.timestamp == enemyTankInfo.last_info.timestamp) * { * Debug.Log("@@@@@@@@@@@@@@@@@@@@@@@@"); * Debug.Log("before_last_info.timestamp : " + enemyTankInfo.prev_last_info.timestamp); * * } */ } /* * enemy_before_last_info = enemy_last_info; * * enemy_last_info.timestamp = read.Timestamp; * enemy_last_info.pos = new Vector3(read.X, read.Y, read.Z); * enemy_last_info.rot = new Quaternion(read.RotX, read.RotY, read.RotZ, read.RotW); */ }
// 패킷 처리 public void process_packet() { while (network_module_.recv_stream_queue.Count > 0) { var packet_stream = network_module_.recv_stream_queue.Dequeue(); // 패킷 스트림에서 대가리 2바이트 짤라서 opcode 가져와야함 byte[] packet_buffer = packet_stream.ToArray(); Int16 _opcode = BitConverter.ToInt16(packet_buffer, 0); var protobuf_stream = new MemoryStream(); var protobuf_size = packet_stream.Length - sizeof(Int16); protobuf_stream.Write(packet_buffer, sizeof(Int16), (int)protobuf_size); byte[] proto_buffer = protobuf_stream.ToArray(); try { if ((network.opcode)_opcode == network.opcode.SC_LOG_IN) { LOBBY.SC_LOG_IN read = LOBBY.SC_LOG_IN.Parser.ParseFrom(proto_buffer); if (processor_SC_LOG_IN != null) { processor_SC_LOG_IN(read); } } else if ((network.opcode)_opcode == network.opcode.SC_SET_NICKNAME) { LOBBY.SC_SET_NICKNAME read = LOBBY.SC_SET_NICKNAME.Parser.ParseFrom(proto_buffer); if (processor_SC_SET_NICKNAME != null) { processor_SC_SET_NICKNAME(read); } } // GAME else if ((network.opcode)_opcode == network.opcode.SC_ENTER_FIELD) { GAME.SC_ENTER_FIELD read = GAME.SC_ENTER_FIELD.Parser.ParseFrom(proto_buffer); if (processor_SC_ENTER_FIELD != null) { processor_SC_ENTER_FIELD(read); } } else if ((network.opcode)_opcode == network.opcode.SC_NOTI_ENTER_FIELD) { GAME.SC_NOTI_ENTER_FIELD read = GAME.SC_NOTI_ENTER_FIELD.Parser.ParseFrom(proto_buffer); if (processor_SC_NOTI_ENTER_FIELD != null) { processor_SC_NOTI_ENTER_FIELD(read); } } else if ((network.opcode)_opcode == network.opcode.SC_NOTI_MOVE_OBJECT) { GAME.SC_NOTI_MOVE_OBJECT read = GAME.SC_NOTI_MOVE_OBJECT.Parser.ParseFrom(proto_buffer); if (processor_SC_NOTI_MOVE_OBJECT != null) { processor_SC_NOTI_MOVE_OBJECT(read); } } else if ((network.opcode)_opcode == network.opcode.SC_NOTI_LEAVE_FIELD) { GAME.SC_NOTI_LEAVE_FIELD read = GAME.SC_NOTI_LEAVE_FIELD.Parser.ParseFrom(proto_buffer); if (processor_SC_NOTI_LEAVE_FIELD != null) { processor_SC_NOTI_LEAVE_FIELD(read); } } else if ((network.opcode)_opcode == network.opcode.SC_PING) { GAME.CS_PING send = new GAME.CS_PING(); send.Timestamp = instance_.getServerTimestamp(); instance_.send_protobuf(network.opcode.CS_PING, send); //GAME.SC_PING read = GAME.SC_PING.Parser.ParseFrom(proto_buffer); //ping_time = getServerTimestamp() - protobuf_session.send_time; //Debug.Log("ping time: " + ping_time); } else if ((network.opcode)_opcode == network.opcode.SC_NOTI_USE_SKILL) { GAME.SC_NOTI_USE_SKILL read = GAME.SC_NOTI_USE_SKILL.Parser.ParseFrom(proto_buffer); if (processor_SC_NOTI_USE_SKILL != null) { processor_SC_NOTI_USE_SKILL(read); } } else if ((network.opcode)_opcode == network.opcode.SC_NOTI_DESTROY_SKILL) { GAME.SC_NOTI_DESTROY_SKILL read = GAME.SC_NOTI_DESTROY_SKILL.Parser.ParseFrom(proto_buffer); if (processor_SC_NOTI_DESTROY_SKILL != null) { processor_SC_NOTI_DESTROY_SKILL(read); } } } catch (Exception e) { Debug.Log(e); Debug.Log("protobuf 읽다가 에러"); } } }