Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > разработка игр, графический дизайн и моделирование > Gamedev - cоздание игр: Unity, OpenGL, DirectX
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 12.09.2019, 14:58   #1
Gabe_Mccloud
 
Регистрация: 14.06.2018
Сообщений: 4
По умолчанию Создание отдельных комнат для сервера

Приложение считывает данные с акселерометра смартфона. У него есть сервер, в котором когда подключается смартфон создается пара id-данные о положении в пространстве. На данный момент, в сервер приходят данные со всех пользователей. Задача сделать наоборот: при подключении пользователя создается отдельное пространство, которое принимает данные только с одного id.
Я хочу каждого нового подключенного пользователя добавлять в контейнер map() где ключом будет являться его id,но не представляю как именно это сделать не поломав остальной код(который к слову, писал не я). Прошу помочь советом
Код:
Код:
var express = require('express');
var compression = require('compression');
var http = require('http');
var path = require('path');
var socketIO = require('socket.io');
const port = process.env.PORT || 5000;
var cors = require('cors');




var app = express();
var server = http.Server(app);
var io = socketIO(server);
app.use(cors()) ;// Use this after the variable declaration

app.set('port', port);
app.use(compression());
app.use(express.static(__dirname + '/'));
app.use('/static', express.static(__dirname + '/static'));
// Routing
app.get('/', function (request, response) {
    response.sendFile(path.join(__dirname, 'view.html'));
    console.log(Object.keys(player_move).length);
    if (Object.keys(player_move).length >= 1){
        let data = {
            id: socketId,
            x: player_move[socketId].x,
            z: player_move[socketId].z,
        };
        response.send(data);
        console.log('connected');
    }else{
        response.send("no");
        console.log('not connected');
    };

});
app.use(express.static(__dirname + '/client/'));
// Routing
app.get('/view', function (request, response) {
    response.sendFile(path.join(__dirname, '/client/index.html'));
});

server.listen(port, function () {
    console.log('Старт сервера по адресу localhost:' + port);
    console.log('Старт просмотра по адресу localhost: ' + port + ' /view');
});


var player_move = {};
var socketId;
io.on('connection', function (socket) {

    socket.on('new player', function () {
        console.log('new player');
        socket.emit('ok');
    });
    socket.on('disconnect', function () {

    });

    socket.on('movement', function () {
        console.log('movement');
        console.log('player_move', player_move);
        if (player_move[socketId]) {
            let data = {
                id: socketId,
                x: player_move[socketId].x,
                z: player_move[socketId].z,
            };
            socket.emit('ok', data);
        }
    });
    socket.on('phone_data', function (data) {
        console.log('phone_date', data);
        socketId = socket.id;
        player_move[socket.id] = {
            x: data.x,
            z: data.z
        };
    });


// GET method route
    app.get('/', function (req, res) {
        res.send('Contact');
        console.log("est kontakt");
    });

});
Gabe_Mccloud вне форума Ответить с цитированием
Старый 12.09.2019, 23:28   #2
amorka89
Пользователь
 
Аватар для amorka89
 
Регистрация: 30.09.2015
Сообщений: 20
По умолчанию

такс, давайте по порядку... тот коды что выше - по моему JS, и судя по всему какой-то движок типо NodeJS или Rast, что бы помочь мне нужно больше именно такой технической информации как все работает.... Напишите на чем все работает хотя бы...
amorka89 вне форума Ответить с цитированием
Старый 12.09.2019, 23:31   #3
amorka89
Пользователь
 
Аватар для amorka89
 
Регистрация: 30.09.2015
Сообщений: 20
По умолчанию

Цитата:
Сообщение от Gabe_Mccloud Посмотреть сообщение
контейнер map()
его я тут к стати тоже не вижу в коде, это должен быть ваш кастомный некий контейнер который будет хранить нужную инфу?
amorka89 вне форума Ответить с цитированием
Старый 13.09.2019, 05:56   #4
Gabe_Mccloud
 
Регистрация: 14.06.2018
Сообщений: 4
По умолчанию

Цитата:
Сообщение от amorka89 Посмотреть сообщение
такс, давайте по порядку... тот коды что выше - по моему JS, и судя по всему какой-то движок типо NodeJS или Rast, что бы помочь мне нужно больше именно такой технической информации как все работает.... Напишите на чем все работает хотя бы...
Node JS, используется socket io, приложение на движке Unity, билд на WebGl. Когда пользователь запускает приложение через смартфон, проводится проверка подключения:
1)Если данные передаются нормально
Код:
socket.emit('ok');
2)В случае если нет активных пользователей
Код:
response.send("no");
Сама игра должна запуститься в 'view.html'.
В случае если игрок начнет движение, его координаты и id передадутся сервер (
Код:
response.send(data);
).

Код сокета в C#
Код:
using System.Collections;
using System.Collections.Generic;
using UnityEngine;
using UnityEngine.Networking;
 
 
public class SocketController : MonoBehaviour
{
 
 
    [SerializeField]
    PlayerController player;
    // Start is called before the first frame update
    void Start()
    {
        StartCoroutine(GetRequest("http://plantgo.ru:5000"));
 
 
    }
 
    private void Awake()
    {
        //socket.url = "ws://127.0.0.1:5000/socket.io/?EIO=4&transport=websocket";
 
    }
    // Update is called once per frame
    void Update()
    {
    }
    //private IEnumerator Connector()
    //{
    //   while (true)
    // {
    //   socket.Emit("movement");
 
    // yield return new WaitForSeconds(0.10f);
 
    //       }
    // wait 1 seconds and continue
 
 
 
    //    }
    class PlayerInfo
    {
        public string id;
        public string x;
        public string z;
    }
 
    IEnumerator GetRequest(string uri)
    {
        while (true)
        {
            using (UnityWebRequest webRequest = UnityWebRequest.Get(uri))
            {
                // Request and wait for the desired page.
                yield return webRequest.SendWebRequest();
 
                string[] pages = uri.Split('/');
                int page = pages.Length - 1;
 
                if (webRequest.isNetworkError)
                {
                    Debug.Log(pages[page] + ": Error: " + webRequest.error);
                }
                else
                {
                    Debug.Log(pages[page] + ":\nReceived: " + webRequest.downloadHandler.text);
                    if (webRequest.downloadHandler.text == "no")
                    {
                        continue;
                    }
                    else
                    {
                        PlayerInfo playerInfo = (PlayerInfo)JsonUtility.FromJson<PlayerInfo>(webRequest.downloadHandler.text);
                        Debug.Log(playerInfo);
                        player.PlayerMove(float.Parse(playerInfo.x), float.Parse(playerInfo.z));
                    }
                }
 
            }
            //yield return new WaitForSeconds(0.1f);
        }
    }
 
 
}
Gabe_Mccloud вне форума Ответить с цитированием
Старый 13.09.2019, 06:13   #5
Gabe_Mccloud
 
Регистрация: 14.06.2018
Сообщений: 4
По умолчанию

Цитата:
Сообщение от amorka89 Посмотреть сообщение
его я тут к стати тоже не вижу в коде, это должен быть ваш кастомный некий контейнер который будет хранить нужную инфу?
Его я еще не добавил пока. Хочу хранить в нем данные игроков, и в отдельности посылать request, чтобы у каждого игрока было свое отдельное окно view (view/1, view/2 и т.д.), а то сейчас данные всех игроков скопом поступают на сервер, что не есть хорошо.
Gabe_Mccloud вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц

Опции темы Поиск в этой теме
Поиск в этой теме:

Расширенный поиск


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Консолидация отдельных полей отдельных файлов на один лист Paramount Microsoft Office Excel 15 30.01.2013 17:41
Создание меток отдельных сегментов таблицы Excel 2010 own Microsoft Office Excel 1 29.01.2011 22:12
Для заинтересованных,создание полноценных 3D игр или отдельных элементов Vedun Gamedev - cоздание игр: Unity, OpenGL, DirectX 4 13.06.2009 02:24