Exemple #1
0
        public override IEnumerator OnReceive(Server.Main.Session session, Gamnet.Packet packet)
        {
            MsgCliSvr_CreateRoom_Req req = packet.Deserialize <MsgCliSvr_CreateRoom_Req>();
            GameObject room = Object.Instantiate <GameObject>(Server.Main.Instance.roomPrefab);

            room.name  = $"Room_{session.session_key}";
            room.layer = LayerMask.NameToLayer("Server");
            room.transform.SetParent(Server.Main.Instance.transform, false);
            session.room = room;

            List <Vector3> initPositions = new List <Vector3>();

            for (int x = -4; x <= 4; x++)
            {
                for (int y = -4; y <= 4; y++)
                {
                    for (int z = -4; z <= 4; z++)
                    {
                        initPositions.Add(new Vector3(x, y, z));
                    }
                }
            }
            Transform spheresTransform = room.transform.Find("Spheres");

            for (uint i = 0; i < Server.Main.Instance.objectCount; i++)
            {
                GameObject go = Object.Instantiate <GameObject>(Server.Main.Instance.spherePrefab);
                go.name  = $"Sphere_{i+1}";
                go.layer = LayerMask.NameToLayer("Server");
                go.transform.SetParent(spheresTransform, false);

                Sphere sphere = go.AddComponent <Sphere>();
                sphere.id        = i + 1;
                sphere.rigidBody = sphere.GetComponent <Rigidbody>();

                int index = Random.Range(0, initPositions.Count);
                sphere.transform.localPosition = initPositions[index];
                initPositions.RemoveAt(index);

                session.spheres.Add(sphere.id, sphere);

                MsgSvrCli_CreateSphere_Ntf ntf = new MsgSvrCli_CreateSphere_Ntf();
                ntf.id            = sphere.id;
                ntf.localPosition = sphere.transform.localPosition;
                ntf.rotation      = sphere.transform.rotation;
                ntf.velocity      = sphere.rigidBody.velocity;
                session.Send <MsgSvrCli_CreateSphere_Ntf>(ntf);
            }

            MsgSvrCli_CreateRoom_Ans ans = new MsgSvrCli_CreateRoom_Ans();

            session.Send <MsgSvrCli_CreateRoom_Ans>(ans);
            yield break;
        }
Exemple #2
0
        private void Start()
        {
            btnConnect.onClick.AddListener(() =>
            {
                if (null != session)
                {
                    session.Close();
                }
                session = new Gamnet.Client.Session();

                session.OnConnectEvent += () =>
                {
                    session.RegisterHandler <MsgSvrCli_CreateRoom_Ans>(MsgSvrCli_CreateRoom_Ans.MSG_ID, CreateRoom.OnReceive);
                    session.RegisterHandler <MsgSvrCli_CreateSphere_Ntf>(MsgSvrCli_CreateSphere_Ntf.MSG_ID, CreateSphere.OnReceive);
                    session.RegisterHandler <MsgSvrCli_SyncPosition_Ntf>(MsgSvrCli_SyncPosition_Ntf.MSG_ID, SuncPosition.OnReceive);

                    MsgCliSvr_CreateRoom_Req req = new MsgCliSvr_CreateRoom_Req();
                    Send(req);
                };

                session.OnErrorEvent += (System.Exception e) =>
                {
                    Debug.Log(e.Message + "\n" + e.StackTrace.ToString());
                };

                session.OnCloseEvent += () =>
                {
                    foreach (var itr in spheres)
                    {
                        Common.Sphere sphere = itr.Value;
                        sphere.transform.SetParent(null);
                        GameObject.Destroy(sphere.gameObject);
                    }
                    spheres.Clear();

                    session.UnregisterHandler(MsgSvrCli_CreateRoom_Ans.MSG_ID);
                    session.UnregisterHandler(MsgSvrCli_CreateSphere_Ntf.MSG_ID);
                    session.UnregisterHandler(MsgSvrCli_SyncPosition_Ntf.MSG_ID);
                    session.OnConnectEvent = null;
                    session.OnErrorEvent   = null;
                    session.OnCloseEvent   = null;
                };

                session.AsyncConnect("127.0.0.1", 4000);
            });

            btnClose.onClick.AddListener(() =>
            {
                session.Close();
            });
        }