|
@@ -1,23 +1,26 @@
|
|
|
-import { Injectable } from '@nestjs/common';
|
|
|
+import { Injectable, Logger } from '@nestjs/common';
|
|
|
import { CacheService } from 'src/cache/cache.service';
|
|
|
|
|
|
+
|
|
|
@Injectable()
|
|
|
export class RotateService {
|
|
|
- constructor(private cacheService: CacheService) {}
|
|
|
+ constructor(private cacheService: CacheService) { }
|
|
|
private actionRequestPool = {};
|
|
|
+ private logger: Logger = new Logger('rotateService');
|
|
|
private Actions = {
|
|
|
Clicking: 1,
|
|
|
Rotation: 1014,
|
|
|
Joystick: 15,
|
|
|
};
|
|
|
private users = {};
|
|
|
- private replys = {};
|
|
|
+ private replies = {};
|
|
|
|
|
|
init(app_id, userId) {
|
|
|
const user = {
|
|
|
appId: null,
|
|
|
userId: null,
|
|
|
breakPointId: null,
|
|
|
+ roomId:null,
|
|
|
player: {
|
|
|
position: { x: -700, y: 0, z: 0 },
|
|
|
angle: {
|
|
@@ -136,7 +139,7 @@ export class RotateService {
|
|
|
};
|
|
|
|
|
|
reply['newUserStates'][0]['userId'] = userId;
|
|
|
- this.replys[userId] = reply;
|
|
|
+ this.replies[userId] = reply;
|
|
|
return reply;
|
|
|
}
|
|
|
|
|
@@ -150,7 +153,7 @@ export class RotateService {
|
|
|
this.actionRequestPool[userId].push(actionRequest);
|
|
|
}
|
|
|
|
|
|
- let reply = this.replys[userId];
|
|
|
+ const reply = this.replies[userId];
|
|
|
|
|
|
const actionRequests = this.actionRequestPool[userId];
|
|
|
const user = this.users[userId];
|
|
@@ -162,7 +165,10 @@ export class RotateService {
|
|
|
if (actionRequests[i].action_type == this.Actions.Rotation) {
|
|
|
horizontal_move += actionRequests[i].rotation_action.horizontal_move;
|
|
|
reply.traceIds.push(actionRequests[i].trace_id);
|
|
|
- let actionResponse = this.createActionResponse(actionRequests[i].action_type,actionRequests[i].trace_id);
|
|
|
+ const actionResponse = this.createActionResponse(
|
|
|
+ actionRequests[i].action_type,
|
|
|
+ actionRequests[i].trace_id,
|
|
|
+ );
|
|
|
reply.actionResponses.push(actionResponse);
|
|
|
++sub;
|
|
|
} else {
|
|
@@ -175,10 +181,10 @@ export class RotateService {
|
|
|
if (Math.abs(hAngle) < 1) {
|
|
|
user.rotateInfo.horizontal_move = horizontal_move;
|
|
|
//user.traceIds = traceIds;
|
|
|
- this.replys[userId] = reply;
|
|
|
- return null;
|
|
|
+ this.replies[userId] = reply;
|
|
|
+ return null;
|
|
|
}
|
|
|
- return this.rotateForAngle(userId,hAngle);
|
|
|
+ return this.rotateForAngle(userId, hAngle);
|
|
|
/*
|
|
|
user.rotateInfo.frameIndex += Math.floor(hAngle);
|
|
|
if (user.rotateInfo.frameIndex < 0) {
|
|
@@ -225,8 +231,8 @@ export class RotateService {
|
|
|
'?m=' +
|
|
|
new Date().getTime();
|
|
|
|
|
|
- this.replys[userId].traceIds = [];
|
|
|
- this.replys[userId].actionResponses = [];
|
|
|
+ this.replies[userId].traceIds = [];
|
|
|
+ this.replies[userId].actionResponses = [];
|
|
|
|
|
|
return reply;
|
|
|
*/
|
|
@@ -235,8 +241,8 @@ export class RotateService {
|
|
|
}
|
|
|
}
|
|
|
|
|
|
- async rotateForAngle(userId,hAngle){
|
|
|
- try{
|
|
|
+ async rotateForAngle(userId, hAngle) {
|
|
|
+ try {
|
|
|
const user = this.users[userId];
|
|
|
user.rotateInfo.frameIndex += Math.floor(hAngle);
|
|
|
if (user.rotateInfo.frameIndex < 0) {
|
|
@@ -245,7 +251,7 @@ export class RotateService {
|
|
|
user.rotateInfo.frameIndex -= 360;
|
|
|
}
|
|
|
|
|
|
- let reply = JSON.parse(JSON.stringify(this.replys[userId]));
|
|
|
+ const reply = JSON.parse(JSON.stringify(this.replies[userId]));
|
|
|
reply['newUserStates'][0]['userId'] = userId;
|
|
|
//从redis里取
|
|
|
//let key = user.appId + "-"+user.breakPointId+"-"+user.rotateInfo.frameIndex;
|
|
@@ -259,44 +265,76 @@ export class RotateService {
|
|
|
// const value = null;
|
|
|
|
|
|
const redisData = await this.cacheService.get(key);
|
|
|
- const value = JSON.parse(redisData);
|
|
|
- console.log('redis', value);
|
|
|
- user.camera['position'] = value ? value.cameraPosition : '';
|
|
|
- user.camera['angle'] = value ? value.cameraAngle : '';
|
|
|
+ if (redisData && redisData.length > 0) {
|
|
|
+ const value = redisData ? JSON.parse(redisData) : null;
|
|
|
+ console.log('rotate-service', value);
|
|
|
+ user.camera['position'] = value ? value.cameraPosition : '';
|
|
|
+ user.camera['angle'] = value ? value.cameraAngle : '';
|
|
|
|
|
|
- //this.reply['newUserStates'][0]['playerState'] .player
|
|
|
- reply['newUserStates'][0]['playerState'].camera.position =
|
|
|
- user.camera['position'];
|
|
|
- reply['newUserStates'][0]['playerState'].camera.angle =
|
|
|
- user.camera['angle'];
|
|
|
- reply['newUserStates'][0]['playerState'].cameraCenter =
|
|
|
- user.player.position;
|
|
|
- // debugger
|
|
|
- reply.mediaSrc =
|
|
|
- '/' +
|
|
|
- '0000000001' +
|
|
|
- '/' +
|
|
|
- user.breakPointId +
|
|
|
- '/' +
|
|
|
- value.directory +
|
|
|
- '/' +
|
|
|
- value.fileName +
|
|
|
- '?m=' +
|
|
|
- new Date().getTime();
|
|
|
+ reply['newUserStates'][0]['playerState'].player.position = user.player.position;
|
|
|
+ reply['newUserStates'][0]['playerState'].player.angle = user.player.angle;
|
|
|
+
|
|
|
+ //this.reply['newUserStates'][0]['playerState'] .player
|
|
|
+ reply['newUserStates'][0]['playerState'].camera.position =
|
|
|
+ user.camera['position'];
|
|
|
+ reply['newUserStates'][0]['playerState'].camera.angle =
|
|
|
+ user.camera['angle'];
|
|
|
+ reply['newUserStates'][0]['playerState'].cameraCenter =
|
|
|
+ user.player.position;
|
|
|
+ // debugger
|
|
|
+ reply.mediaSrc =
|
|
|
+ '/' +
|
|
|
+ '0000000001' +
|
|
|
+ '/' +
|
|
|
+ user.breakPointId +
|
|
|
+ '/' +
|
|
|
+ value.directory +
|
|
|
+ '/' +
|
|
|
+ value.fileName +
|
|
|
+ '?m=' +
|
|
|
+ new Date().getTime();
|
|
|
|
|
|
- this.replys[userId].traceIds = [];
|
|
|
- this.replys[userId].actionResponses = [];
|
|
|
+ this.replies[userId].traceIds = [];
|
|
|
+ this.replies[userId].actionResponses = [];
|
|
|
|
|
|
- user.rotateInfo.horizontal_move = 0;
|
|
|
+ user.rotateInfo.horizontal_move = 0;
|
|
|
|
|
|
- return reply;
|
|
|
+ return reply;
|
|
|
+ } else {
|
|
|
+ return null;
|
|
|
+ }
|
|
|
} catch (error) {
|
|
|
- console.log('RotateService', error);
|
|
|
+ this.logger.error('rotateForAngle::function', error);
|
|
|
}
|
|
|
}
|
|
|
|
|
|
- createActionResponse(actionType,traceId){
|
|
|
- let actionResponse = {
|
|
|
+ createActionResponse(actionType, traceId) {
|
|
|
+ const actionResponse = {
|
|
|
+ actionType: actionType,
|
|
|
+ pointType: 100,
|
|
|
+ extra: '',
|
|
|
+ traceId: traceId,
|
|
|
+ packetId: '',
|
|
|
+ nps: [],
|
|
|
+ peopleNum: 0,
|
|
|
+ zoneId: '',
|
|
|
+ echoMsg: '',
|
|
|
+ reserveDetail: null,
|
|
|
+ userWithAvatarList: [],
|
|
|
+ newUserStates: [],
|
|
|
+ code: 0,
|
|
|
+ msg: '',
|
|
|
+ };
|
|
|
+ return actionResponse;
|
|
|
+ }
|
|
|
+
|
|
|
+ getNewUserStateRequest(actionRequest){
|
|
|
+ try{
|
|
|
+ const userId = actionRequest['user_id'];
|
|
|
+ const actionType = actionRequest['actionType'];
|
|
|
+ const traceId = actionRequest['trace_id'];
|
|
|
+
|
|
|
+ let reply = {
|
|
|
"actionType": actionType,
|
|
|
"pointType": 100,
|
|
|
"extra": "",
|
|
@@ -312,6 +350,70 @@ export class RotateService {
|
|
|
"code": 0,
|
|
|
"msg": ""
|
|
|
}
|
|
|
- return actionResponse;
|
|
|
+
|
|
|
+ let userIds = Object.keys(this.users);
|
|
|
+ for(let i=0;i<userIds.length;++i){
|
|
|
+ let _user = this.users[userIds[i]];
|
|
|
+ let newUserState = {
|
|
|
+ "userId": userIds[i],
|
|
|
+ "playerState": {
|
|
|
+ "roomTypeId": "",
|
|
|
+ "person": 0,
|
|
|
+ "avatarId": "KGe_Boy",
|
|
|
+ "skinId": "10089",
|
|
|
+ "roomId": "e629ef3e-022d-4e64-8654-703bb96410eb",
|
|
|
+ "isHost": false,
|
|
|
+ "isFollowHost": false,
|
|
|
+ "skinDataVersion": "1008900008",
|
|
|
+ "avatarComponents": "",
|
|
|
+ "nickName": userIds[i],
|
|
|
+ "movingMode": 0,
|
|
|
+ "attitude": "walk",
|
|
|
+ "areaName": "",
|
|
|
+ "pathName": "thirdwalk",
|
|
|
+ "pathId": "thirdwalk",
|
|
|
+ "avatarSize": 1,
|
|
|
+ "extra": "{\"removeWhenDisconnected\":true}",
|
|
|
+ "prioritySync": false,
|
|
|
+ "player": {
|
|
|
+ "position": _user.player.position,
|
|
|
+ "angle": _user.player.angle
|
|
|
+ },
|
|
|
+ "camera": null,
|
|
|
+ "cameraCenter": null
|
|
|
+ },
|
|
|
+ "renderInfo": {
|
|
|
+ "renderType": 0,
|
|
|
+ "videoFrame": null,
|
|
|
+ "cameraStateType": 0,
|
|
|
+ "isMoving": 0,
|
|
|
+ "needIfr": 0,
|
|
|
+ "isVideo": 0,
|
|
|
+ "stillFrame": 0,
|
|
|
+ "isRotating": 0,
|
|
|
+ "isFollowing": 0,
|
|
|
+ "clientPanoTitlesBitmap": [],
|
|
|
+ "clientPanoTreceId": "",
|
|
|
+ "prefetchVideoId": "",
|
|
|
+ "noMedia": false
|
|
|
+ },
|
|
|
+ "event": {
|
|
|
+ "id": "",
|
|
|
+ "type": 0,
|
|
|
+ "points": [],
|
|
|
+ "rotateEvent": null,
|
|
|
+ "removeVisitorEvent": null
|
|
|
+ },
|
|
|
+ "relation": 0
|
|
|
+ };
|
|
|
+
|
|
|
+ reply["newUserStates"].push(newUserState);
|
|
|
+ }
|
|
|
+
|
|
|
+ return reply;
|
|
|
+ }
|
|
|
+ catch(error){
|
|
|
+ this.logger.error('getNewUserStateRequest::function', error);
|
|
|
+ }
|
|
|
}
|
|
|
}
|