예제 #1
0
        private void _Call_NotifyGameStart()
        {
            FSPGameStartParam param = new FSPGameStartParam();

            param.fspParam        = FSPServer.Instance.GetParam();
            param.players         = m_data.players;
            param.customGameParam = m_customGameParam;

            FSPServer.Instance.StartGame();
            FSPServer.Instance.Game.onGameExit += OnGameExit;
            FSPServer.Instance.Game.onGameEnd  += OnGameEnd;

            for (int i = 0; i < m_data.players.Count; i++)
            {
                var        player  = m_data.players[i];
                IPEndPoint address = m_mapUserId2Address[player.userId];
                param.fspParam.sid = player.sid;

                //将玩家加入到FSPServer中
                FSPServer.Instance.Game.AddPlayer(player.id, player.sid);

                byte[] buff = PBSerializer.NSerialize(param);
                RPC(address, RPC_NotifyGameStart, buff);
            }
        }
예제 #2
0
파일: NetManager.cs 프로젝트: zj831007/SGF
        /// <summary>
        /// 发送数据
        /// </summary>
        /// <typeparam name="TRsp"></typeparam>
        /// <param name="cmd"></param>
        /// <param name="req"></param>
        /// <param name="onRsp"></param>
        /// <param name="timeout"></param>
        /// <param name="onErr"></param>
        /// <returns>返回唯一的发送Index</returns>
        public uint Send <TRsp>(uint cmd, object req, Action <uint, TRsp> onRsp, float timeout = 30,
                                Action <NetErrorCode> onErr = null)
        {
            Debuger.LogVerbose("cmd:{0}, timeout:{1}", cmd, timeout);
            uint           index  = MessageIndexGenerator.NewIndex();
            ListenerHelper helper = new ListenerHelper()
            {
                cmd       = cmd,
                index     = index,
                TMsg      = typeof(TRsp),
                onErr     = onErr,
                onMsg0    = onRsp,
                timeout   = timeout,
                timestamp = SGFTime.GetTimeSinceStartup()
            };

            m_listRspListener.Add(index, helper);


            NetMessage msg = new NetMessage();

            msg.head.index    = index;
            msg.head.cmd      = cmd;
            msg.head.token    = m_token;
            msg.content       = PBSerializer.NSerialize(req);
            msg.head.dataSize = (uint)msg.content.Length;

            m_conn.Send(msg);
            return(index);
        }
예제 #3
0
        private void SendBroadcast(int beginPort, int endPort, RPCMessage msg)
        {
            byte[] buffer = PBSerializer.NSerialize(msg);

            for (int i = beginPort; i < endPort; i++)
            {
                m_Socket.SendTo(buffer, buffer.Length, new IPEndPoint(IPAddress.Broadcast, i));
            }
        }
예제 #4
0
 public static void Save()
 {
     LDebugger.Log("GameConfig", "Save() Value=" + mConfig);
     if (mConfig != null)
     {
         byte[] data = PBSerializer.NSerialize(mConfig);
         FileUtils.SaveFile(Path, data);
     }
 }
예제 #5
0
        public static void Save()
        {
            Debuger.Log("AppConfig", "Save() Value = " + m_Value);

            if (m_Value != null)
            {
                byte[] data = PBSerializer.NSerialize(m_Value);
                FileUtils.SaveFile(Path, data);
            }
        }
예제 #6
0
        private void _Call_UpdateRoomInfo()
        {
            for (int i = 0; i < m_data.players.Count; ++i)
            {
                this.Log("_Call_UpdateRoomInfo() Player: {0}", m_data.players [i]);
            }

            byte[] param = PBSerializer.NSerialize(m_data);
            RPC(GetAllAddress(), RPC_UpdateRoomInfo, param);
        }
예제 #7
0
 public bool Send(FSPFrame frame)
 {
     if (null != m_aSocket)
     {
         FSPDataS2C data = new FSPDataS2C();
         data.frames.Add(frame);
         int len = PBSerializer.NSerialize(data, m_SendBuffer);
         return(m_aSocket.SendTo(m_SendBuffer, len, EndPoint));
     }
     return(false);
 }
예제 #8
0
        /// <summary>
        /// 加入房间
        /// </summary>
        /// <param name="ip"></param>
        /// <param name="port"></param>
        public void JoinRoom(string ip, int port)
        {
            m_roomAddress = IPUtils.GetHostEndPoint(ip, port);
            
			PlayerData pd = new PlayerData ();
			pd.userId = m_mainUserId;
			pd.name = m_mainUserName;
            byte[] customPlayerData = PBSerializer.NSerialize(pd);

			RPC(m_roomAddress, FSPRoom.RPC_JoinRoom, m_mainUserId, m_mainUserName, customPlayerData);
        }
예제 #9
0
        public void serializeToLocalWithType(List <object> msgs, Type messageType, uint cmdID, ulong timeStamp, uint serial, MessageSource source)
        {
            NetworkMessage packedMessageBody = new NetworkMessage(messageType, cmdID, timeStamp, serial, source);

            try
            {
                switch (source)
                {
                case MessageSource.Lua:

                    if (msgs[0] is byte[])
                    {
                        packedMessageBody.MessagesBodyBuffer.Add((byte[])msgs[0]);
                    }
                    break;

                case MessageSource.CSharp:
                    try
                    {
                        PBSerializer.NDeserialize(PBSerializer.NSerialize(msgs[0]), messageType);
                    }
                    catch (Exception)
                    {
                        Debug.LogWarning(cmdID + "NTF测试未通过");
                        break;
                    }
                    packedMessageBody.MessagesBodyBuffer.Add(PBSerializer.NSerialize(msgs[0]));

                    break;

                case MessageSource.CSharpAndLua:

                    foreach (var item in msgs)
                    {
                        if (item is byte[])
                        {
                            packedMessageBody.MessagesBodyBuffer.Add((byte[])item);
                        }
                        else
                        {
                            packedMessageBody.MessagesBodyBuffer.Add(PBSerializer.NSerialize(item));
                        }
                    }
                    break;
                }
            }
            catch
            {
                Debug.LogError("序列化出现问题");
                Debug.LogError("消息数量:" + msgs.Count + " ;序列号:" + serial);
            }
            MessageManager.Instance.serializeToLocal(packedMessageBody, MessageManager.DEST_PATH_CSharp);
        }
예제 #10
0
        public bool Save(string dirname, string filename)
        {
            Debuger.Log("");

            if (string.IsNullOrEmpty(filename))
            {
                return(false);
            }

            byte[] buffer = PBSerializer.NSerialize(m_content);
            return(FileUtils.SaveFile(dirname + filename, buffer) > 0);
        }
예제 #11
0
        private void SendMessage(List <IPEndPoint> listTargets, RPCMessage msg)
        {
            byte[] buffer = PBSerializer.NSerialize(msg);

            for (int i = 0; i < listTargets.Count; i++)
            {
                IPEndPoint target = listTargets[i];
                if (target != null)
                {
                    m_Socket.SendTo(buffer, buffer.Length, target);
                }
            }
        }
예제 #12
0
        public static void Save()
        {
            Debuger.Log("AppConfig", "Save() Value = " + m_Value);

            if (m_Value != null)
            {
                byte[] data = PBSerializer.NSerialize(m_Value);
                FileUtils.SaveFile(Path, data);

                //通知AudioManager修改
                AudioManager.Instance.RefreshSetting(m_Value);
            }
        }
예제 #13
0
    // Use this for initialization
    void Start()
    {
        YJWCL.Debuger.UseUnityEngine = true;
        Player ziyang = new Player();

        ziyang.ID     = 1;
        ziyang.Name   = "ziyang";
        ziyang.isGirl = false;
        byte[] buff   = PBSerializer.NSerialize <Player>(ziyang);
        var    player = PBSerializer.NDeserialize <Player>(buff);

        this.Log("ID:{0},Name:{1},IsGirl:{2}", player.ID, player.Name, player.isGirl);
    }
예제 #14
0
파일: NetManager.cs 프로젝트: zj831007/SGF
        public void Send <TMsg>(ProtocolHead head, uint cmd, TMsg msg)
        {
            Debuger.LogVerbose("cmd:{0}", cmd);

            NetMessage msgobj = new NetMessage();

            msgobj.head          = head;
            msgobj.head.cmd      = cmd;
            msgobj.head.token    = m_token;
            msgobj.content       = PBSerializer.NSerialize(msg);
            msgobj.head.dataSize = (uint)msgobj.content.Length;

            m_conn.Send(msgobj);
        }
예제 #15
0
파일: NetManager.cs 프로젝트: zj831007/SGF
        public void Send <TReq>(uint cmd, TReq req)
        {
            Debuger.LogVerbose("cmd:{0}", cmd);

            NetMessage msg = new NetMessage();

            msg.head.index    = 0;
            msg.head.cmd      = cmd;
            msg.head.token    = m_token;
            msg.content       = PBSerializer.NSerialize(req);
            msg.head.dataSize = (uint)msg.content.Length;

            m_conn.Send(msg);
        }
예제 #16
0
파일: FSPSession.cs 프로젝트: zj831007/SGF
        //==================================================================
        //发送数据
        //==================================================================
        public bool Send(FSPFrame frame)
        {
            if (!IsActived())
            {
                Debuger.LogWarning("Session已经不活跃了!");
                return(false);
            }

            m_TempSendData.frames.Clear();
            m_TempSendData.frames.Add(frame);
            int len = PBSerializer.NSerialize(m_TempSendData, m_SendBufferTemp);

            return(m_Kcp.Send(m_SendBufferTemp, len) == 0);
        }
예제 #17
0
파일: NetManager.cs 프로젝트: zj831007/SGF
        public void Send <TMsg>(ISession session, ProtocolHead head, uint cmd, TMsg msg)
        {
            Debuger.LogVerbose("index:{0}, cmd:{1}", head.index, cmd);

            NetMessage msgobj = new NetMessage();

            msgobj.head          = head;
            msgobj.head.cmd      = cmd;
            msgobj.head.token    = session.AuthToken;
            msgobj.content       = PBSerializer.NSerialize(msg);
            msgobj.head.dataSize = (uint)msgobj.content.Length;

            session.Send(msgobj);
        }
예제 #18
0
        //------------------------------------------------------------

        #region Send

        public bool SendFSP(int vkey, int arg, int clientFrameId)
        {
            if (m_IsRunning)
            {
                FSPVKey cmd = m_TempSendData.vkeys[0];
                cmd.vkey          = vkey;
                cmd.args          = new int[] { arg };
                cmd.clientFrameId = (uint)clientFrameId;

                int len = PBSerializer.NSerialize(m_TempSendData, m_TempSendBuf);

                return(m_Socket.SendTo(m_TempSendBuf, len, m_HostEndPoint));
            }
            return(false);
        }
예제 #19
0
    // Use this for initialization
    void Start()
    {
        UserInfo info1 = new UserInfo();

        info1.id    = 123;
        info1.name  = "SHENGLU";
        info1.title = "student";

        byte[] buff = PBSerializer.NSerialize(info1);

        var info2 = PBSerializer.NDeserialize <UserInfo>(buff);

        this.LogWarning("info1 --- id:{0}, name:{1}, title:{2}", info1.id, info1.name, info1.title);
        this.LogWarning("info2 --- id:{0}, name:{1}, title:{2}", info2.id, info2.name, info2.title);
    }
예제 #20
0
        public void Invoke(int dst, string name, params object[] args)
        {
            Debuger.Log("->[{0}] {1}({2})", dst, name, args.ToListString());

            RPCMessage rpcmsg = new RPCMessage();

            rpcmsg.name = name;
            rpcmsg.args = args;

            IPCMessage msg = new IPCMessage();

            msg.src = m_id;
            msg.rpc = rpcmsg;

            byte[] temp = PBSerializer.NSerialize(msg);
            SendMessage(dst, temp, temp.Length);
        }
예제 #21
0
        public void Send <TMsg>(ISession session, uint index, uint cmd, TMsg msg)
        {
            Debuger.Log("index:{0}, cmd:{1}", index, cmd);

            NetMessage msgobj = new NetMessage();

            msgobj.head.index    = index;
            msgobj.head.cmd      = cmd;
            msgobj.head.uid      = session.uid;
            msgobj.content       = PBSerializer.NSerialize(msg);
            msgobj.head.dataSize = (ushort)msgobj.content.Length;

            byte[] tmp;
            int    len = msgobj.Serialize(out tmp);

            session.Send(tmp, len);
        }
예제 #22
0
        public void Send <TReq>(uint cmd, TReq req)
        {
            Debuger.Log("cmd:{0}", cmd);


            NetMessage msg = new NetMessage();

            msg.head.index    = 0;
            msg.head.cmd      = cmd;
            msg.head.uid      = m_uid;
            msg.content       = PBSerializer.NSerialize(req);
            msg.head.dataSize = (ushort)msg.content.Length;

            byte[] temp;
            int    len = msg.Serialize(out temp);

            m_conn.Send(temp, len);
        }
예제 #23
0
        public void Send <TReq, TRsp>(uint cmd, TReq req, Action <TRsp> onRsp, float timeout = 30,
                                      Action <NetErrorCode> onErr = null)
        {
            NetMessage msg = new NetMessage();

            msg.head.index    = MessageIndexGenerator.NewIndex();
            msg.head.cmd      = cmd;
            msg.head.uid      = m_uid;
            msg.content       = PBSerializer.NSerialize(req);
            msg.head.dataSize = (ushort)msg.content.Length;

            byte[] temp;
            int    len = msg.Serialize(out temp);

            m_conn.Send(temp, len);

            AddListener(cmd, typeof(TRsp), onRsp, msg.head.index, timeout, onErr);
        }
예제 #24
0
파일: RPCManager.cs 프로젝트: xcjmine/SGF
        public void Invoke(ISession session, string name, params object[] args)
        {
            Debuger.LogVerbose("->Session[{0}] {1}({2})", session.Id, name, args.ToListString());

            RPCMessage rpcmsg = new RPCMessage();

            rpcmsg.name = name;
            rpcmsg.args = args;
            byte[] buffer = PBSerializer.NSerialize(rpcmsg);

            NetMessage msg = new NetMessage();

            msg.head          = new ProtocolHead();
            msg.head.dataSize = (uint)buffer.Length;
            msg.content       = buffer;

            session.Send(msg);
        }
예제 #25
0
        public void ReturnError(string errinfo, int errcode = 1)
        {
            var name = "On" + m_currInvokingName + "Error";

            Debuger.LogWarning("->[{0}] {1}({2},{3})", m_currInvokingSrc, name, errinfo, errcode);

            RPCMessage rpcmsg = new RPCMessage();

            rpcmsg.name = name;
            rpcmsg.args = new object[] { errinfo, errcode };

            IPCMessage msg = new IPCMessage();

            msg.src = m_id;
            msg.rpc = rpcmsg;

            byte[] temp = PBSerializer.NSerialize(msg);
            SendMessage(m_currInvokingSrc, temp, temp.Length);
        }
예제 #26
0
        /// <summary>
        /// 启动服务器
        /// </summary>
        public void StartServer()
        {
            FSPServer.Instance.Start(0);

            //自定义的游戏参数
            //比如游戏的地图ID,随机种子,游戏模式等等
            GameParam gameParam = new GameParam();

            byte[] customGameParam = PBSerializer.NSerialize(gameParam);

            //将自定义游戏参数传给房间
            //以便于由房间通知玩家游戏开始时,能够将该参数转发给所有玩家
            FSPServer.Instance.Room.SetCustomGameParam(customGameParam);
            FSPServer.Instance.SetServerTimeout(0);

            string ipport = GetRoomIP() + ":" + GetRoomPort();

            onStartServer.Invoke(ipport);
        }
예제 #27
0
파일: RPCManager.cs 프로젝트: xcjmine/SGF
        public void ReturnError(params object[] args)
        {
            var name = "On" + m_currInvokingName + "Error";


            RPCMessage rpcmsg = new RPCMessage();

            rpcmsg.name = name;
            rpcmsg.args = args;
            byte[] buffer = PBSerializer.NSerialize(rpcmsg);

            NetMessage msg = new NetMessage();

            msg.head          = new ProtocolHead();
            msg.head.dataSize = (uint)buffer.Length;
            msg.content       = buffer;

            m_currInvokingSession.Send(msg);
        }
예제 #28
0
        public void Invoke(string name, params object[] args)
        {
            Debuger.LogVerbose("->Connection[{0}] {1}({2})", m_conn.Id, name, args);

            RPCMessage rpcmsg = new RPCMessage();

            rpcmsg.name = name;
            rpcmsg.args = args;
            byte[] buffer = PBSerializer.NSerialize(rpcmsg);

            NetMessage msg = new NetMessage();

            msg.head          = new ProtocolHead();
            msg.head.token    = m_token;
            msg.head.dataSize = (uint)buffer.Length;
            msg.content       = buffer;

            m_conn.Send(msg);
        }
예제 #29
0
        /// <summary>
        /// start server
        /// </summary>
        public void StartServer()
        {
            FSPServer.Instance.Start(0);

            //customized game params
            //for example game map ID, random seed, game mode etc.
            GameParam gameParam = new GameParam();

            byte[] customGameParam = PBSerializer.NSerialize(gameParam);

            //send customized params to game room
            //those params would send to players when game starts
            FSPServer.Instance.Room.SetCustomGameParam(customGameParam);
            FSPServer.Instance.SetServerTimeout(0);

            string ipport = GetRoomIP() + ":" + GetRoomPort();

            onStartServer.Invoke(ipport);
        }
예제 #30
0
        public void Return(params object[] args)
        {
            var name = "On" + m_currInvokingName;

            Debuger.Log("->[{0}] {1}({2})", m_currInvokingSrc, name, args.ToListString());

            RPCMessage rpcmsg = new RPCMessage();

            rpcmsg.name = name;
            rpcmsg.args = args;

            IPCMessage msg = new IPCMessage();

            msg.src = m_id;
            msg.rpc = rpcmsg;


            byte[] temp = PBSerializer.NSerialize(msg);
            SendMessage(m_currInvokingSrc, temp, temp.Length);
        }