Exemple #1
0
        public WazClient()
        {
            mSock = new Socket(AddressFamily.InterNetwork, SocketType.Stream, ProtocolType.Tcp);

            mSession = new WazSession(mSock.Handle.ToInt64(), mSock);
            //mReciveBuff = new byte[mSock.ReceiveBufferSize];
            mReceiveStream = new System.IO.MemoryStream();
            //mSendPasser.Evt_WorkThread_Received += Handle_WorkThread_Received;
            //mReciveBuffExchange = new byte[mSock.ReceiveBufferSize];
            //mReciveBuff = new List<ArraySegment<int>>();

            //mSock.Blocking = false;
        }
Exemple #2
0
        public WazClient()
        {
            mSock = new Socket(AddressFamily.InterNetwork, SocketType.Stream, ProtocolType.Tcp);

            mSession = new WazSession(mSock.Handle.ToInt64(), mSock);
            //mReciveBuff = new byte[mSock.ReceiveBufferSize];
            mReceiveStream = new System.IO.MemoryStream();
            //mSendPasser.Evt_WorkThread_Received += Handle_WorkThread_Received;
            //mReciveBuffExchange = new byte[mSock.ReceiveBufferSize];
            //mReciveBuff = new List<ArraySegment<int>>();

            //mSock.Blocking = false;
        }
Exemple #3
0
        public bool Send(WazSession s, object data)
        {
            Packable packAttr = (Packable)Attribute.GetCustomAttribute(data.GetType(), typeof(Packable));

            if (packAttr == null)
            {
                return(false);
            }

            int sizePackOffsetLen = sizeof(PackageOffsetToEnd);

            try
            {
                //序列化
                FieldInfo[] members = data.GetType().GetFields();
                mMemSendStream.Position = 0;
                mMemSendStream.SetLength(0);
                mBinWriter.Write(mPackHead);

                long posPackLen = mMemSendStream.Position;
                //留空位给等下回来写包长度
                mBinWriter.Seek(sizePackOffsetLen, SeekOrigin.Current);
                mBinWriter.Write(packAttr.ID);
                foreach (FieldInfo f in members)
                {
                    object o = f.GetValue(data);

                    WazSerializerHelper.Write(mBinWriter, o);
                }

                PackageOffsetToEnd offsetToEnd = (PackageOffsetToEnd)(mMemSendStream.Position - posPackLen - sizePackOffsetLen);

                mBinWriter.Write(mPackEnd);

                mBinWriter.Seek((int)posPackLen, SeekOrigin.Begin);
                mBinWriter.Write(offsetToEnd);

                mNetwork.Send(s, mMemSendStream.ToArray());
                return(true);
            }
            catch
            {
                return(false);
            }
        }
Exemple #4
0
        /// <summary>
        /// 注册指定session,包触发的处理函数
        /// </summary>
        /// <param name="s">S.</param>
        /// <param name="packType">Pack type.</param>
        /// <param name="handler">Handler.</param>
        public void RegEvtHandler(WazSession s, Type packType, Action <object> handler)
        {
            Dictionary <Type, Action <object> > packTypeMap;

            if (!mPackDispatchMap.TryGetValue(s.Handle, out packTypeMap))
            {
                packTypeMap = new Dictionary <Type, Action <object> >();
                mPackDispatchMap.Add(s.Handle, packTypeMap);
            }

            Action <object> tmpHandler;

            if (!packTypeMap.TryGetValue(packType, out tmpHandler))
            {
                packTypeMap.Add(packType, tmpHandler);
            }

            packTypeMap[packType] += handler;
        }
Exemple #5
0
        public bool UnRegEvtHandler(WazSession s, Type packType, Action <object> handler)
        {
            Dictionary <Type, Action <object> > packTypeMap;

            if (!mPackDispatchMap.TryGetValue(s.Handle, out packTypeMap))
            {
                return(false);
            }

            Action <object> tmpHandler;

            if (!packTypeMap.TryGetValue(packType, out tmpHandler))
            {
                return(false);
            }

            packTypeMap[packType] -= handler;
            return(true);
        }
Exemple #6
0
        public override void Send(WazSession session, byte[] data, bool copyData)
        {
            byte[] dataToSend = data;
            if (copyData)
            {
                dataToSend = new byte[data.Length];
                Array.Copy(data, dataToSend, data.Length);
            }

            //mSendPasser.MainThread_Pass(dataToSend);
            try
            {
                mSock.Send(dataToSend);

                //mSock.BeginSend(dataToSend, 0, dataToSend.Length, SocketFlags.None,null, null);
            }
            catch (Exception e)
            {
                Console.WriteLine(e);
            }
        }
Exemple #7
0
 public virtual void CloseSession(WazSession s)
 {
 }
Exemple #8
0
 public virtual void Send(WazSession session, byte[] data, bool copyData)
 {
 }
Exemple #9
0
 void SendData(WazSession waz)
 {
     mP.RegPack(typeof(CS_RequestUserID));
     mP.RegPack(typeof(SC_AllocUserID));
     mP.RegPack(typeof(CS_GamePlayerLogin));
     mP.RegPack(typeof(CS_GamePlayerLogout));
     mP.RegPack(typeof(CS_RequestRank));
     mP.RegPack(typeof(SC_ResponRank));
     mP.RegPack(typeof(CS_CommitScore));
     mP.RegPack(typeof(SC_RewardDaily));
     mP.RegPack(typeof(CS_PayNotify));
     mP.RegPack(typeof(CS_RequestChangeName));
     mP.RegPack(typeof(SC_RequestChangeNameResp));
     CS_RequestUserID RegID;
     // RegID.MachineID = 1;
     //  RegID.MachineID = (SystemInfo.deviceUniqueIdentifier);
     ///Debug.Log(Moudle_FileRead.GameID.Val);
     if (Moudle_FileRead.GameFirstRun.Val == true)
     {
         RegID.MachineID = SystemInfo.deviceUniqueIdentifier;
         RegID.Resolution = Screen.currentResolution.width.ToString() + "*" + Screen.currentResolution.height.ToString();
         mP.Send(session, RegID);
     }
     else
     {
        // Debug.Log("不是第一次登录");
         CS_GamePlayerLogin id;
         id.UserID = Moudle_FileRead.GameID.Val;
         //id.UserID = 21;
        // Debug.Log(id.UserID);
         mP.Send(session, id);
     }
 }
Exemple #10
0
 public override void CloseSession(WazSession s)
 {
     //mSock.Shutdown(SocketShutdown.Both);
     mSock.Close();
 }
Exemple #11
0
 void Handle_SessionClose(WazSession s)
 {
     mSessionRecHelpers.Remove(s.Handle);
 }
Exemple #12
0
    void Handle_ReceivePack(WazSession s, object pack)
    {
        if (Moudle_FileRead.GameFirstRun.Val == true)
        {
            if (pack.GetType() == typeof(SC_AllocUserID))
            {
               // Debug.Log("第一次运行玩家登录成功");
                SC_AllocUserID Receive = (SC_AllocUserID)pack;
               // Debug.Log(Receive.UserID);
                CS_GamePlayerLogin id;
                id.UserID = Receive.UserID;
               // id.UserID = 21;
                mP.Send(session, id);

                if (Moudle_FileRead.GameID.Val == uint.MaxValue)
                {
                    Moudle_FileRead.GameID.Val = id.UserID;
                }
                Moudle_FileRead.GameFirstRun.Val = false;
            }
        }
        if(pack.GetType()==typeof(SC_RewardDaily))
        {
            bEveryDayReward = true;
         //   Debug.Log("每日奖励");
            Moudle_FileRead.EveryRewardDays.Val++;
            //Moudle_FileRead.EveryRewardDays.Val = Moudle_FileRead.EveryRewardDays.Val%7 + 1;
            //Debug.Log(Moudle_FileRead.EveryRewardDays.Val);
            if (Moudle_FileRead.EveryRewardDays.Val > 7)
            {
                Moudle_FileRead.EveryRewardDays.Val = 1;
            }
            //Debug.Log(Moudle_FileRead.EveryRewardDays.Val++);
        }
        if (pack.GetType() == typeof(SC_ResponRank))
        {
            SC_ResponRank Receive = (SC_ResponRank)pack;
            //Debug.Log("当前排名"+Receive.Rank);
            SetRank(Receive.Rank);
            switch (Receive.Rank)
            {
                case 1:
                 //   Debug.Log("第一名");
                    RankData[0] = MobileInterface.GetPlayerScore();
                    RankName[0] = Receive.Name;
                    RankData[1] = Receive.RankOffsetN1;
                    RankName[1] = Receive.RankNameOffsetN1;
                    RankData[2] = Receive.RankOffsetN2;
                    RankName[2] = Receive.RankNameOffsetN2;
                    break;
                case 2:
                    RankData[0] = Receive.RankOffset1;
                    RankName[0] = Receive.RankNameOffset1;
                    RankData[1] = MobileInterface.GetPlayerScore();
                    RankName[1] = Receive.Name;
                    RankData[2] = Receive.RankOffsetN1;
                    RankName[2] = Receive.RankNameOffsetN1;
                    RankData[3] = Receive.RankOffsetN2;
                    RankName[3] = Receive.RankNameOffsetN2;
                    break;
                default:
                    RankData[0] = Receive.RankOffset2;
                    RankName[0] = Receive.RankNameOffset2;
                    RankData[1] = Receive.RankOffset1;
                    RankName[1] = Receive.RankNameOffset1;
                    RankData[2] = MobileInterface.GetPlayerScore();
                    RankName[2] = Receive.Name;
                    RankData[3] = Receive.RankOffsetN1;
                    RankName[3] = Receive.RankNameOffsetN1;
                    RankData[4] = Receive.RankOffsetN2;
                    RankName[4] = Receive.RankNameOffsetN2;
                    break;
            }
           if (Module_Rank.EvtR != null)//+= Data_Finish;
               Module_Rank.EvtR();
        }
        if (pack.GetType() == typeof(SC_RequestChangeNameResp))
        {
            SC_RequestChangeNameResp resp = (SC_RequestChangeNameResp)pack;
            if (resp.Result)
            {
                CS_CommitScore iscore;
                iscore.score = MobileInterface.GetPlayerScore();
                mP.Send(session, iscore);

                //Debug.Log("请求排行榜");
                CS_RequestRank rank;
                mP.Send(session, rank);
              //  Debug.Log("改名成功");
                Moudle_FileRead.FirstChangeName.Val = false;
                Module_Rank.SetRank();

                Module_Rank.go_Rank.transform.FindChild("改名字").gameObject.SetActive(false);
                //go_Rank.SetActive(false);
                Moudle_main.Singlton.go_Black.SetActive(false);
            }
        }
    }
Exemple #13
0
        public bool Send(WazSession s, object data)
        {
            Packable packAttr = (Packable)Attribute.GetCustomAttribute(data.GetType(), typeof(Packable));
            if (packAttr == null)
                return false;

            int sizePackOffsetLen = sizeof(PackageOffsetToEnd);
            try
            {
                //序列化
                FieldInfo[] members = data.GetType().GetFields();
                mMemSendStream.Position = 0;
                mMemSendStream.SetLength(0);
                mBinWriter.Write(mPackHead);

                long posPackLen = mMemSendStream.Position;
                //留空位给等下回来写包长度
                mBinWriter.Seek(sizePackOffsetLen, SeekOrigin.Current);
                mBinWriter.Write(packAttr.ID);
                foreach (FieldInfo f in members)
                {
                    object o = f.GetValue(data);

                    WazSerializerHelper.Write(mBinWriter, o);

                }

                PackageOffsetToEnd offsetToEnd = (PackageOffsetToEnd)(mMemSendStream.Position - posPackLen - sizePackOffsetLen);

                mBinWriter.Write(mPackEnd);

                mBinWriter.Seek((int)posPackLen, SeekOrigin.Begin);
                mBinWriter.Write(offsetToEnd);

                mNetwork.Send(s, mMemSendStream.ToArray());
                return true;
            }
            catch
            {
                return false;
            }
        }
Exemple #14
0
        void Handle_RecivePackage(WazSession s, byte[] data, int size)
        {
            PackRecHelper recHelper;
            if (!mSessionRecHelpers.TryGetValue(s.Handle, out recHelper))
                return;

            //将data 放入读取stream末尾
            recHelper.Stream.Write(data, 0, size);
            recHelper.Stream.Seek(recHelper.PreReadStreamOffset, SeekOrigin.Begin);
            bool havePackageCut = false;
            //开始读取.
            while (recHelper.Stream.Position < recHelper.Stream.Length - 1)
            {
                long posStartRead = recHelper.Stream.Position;
                object objPack;
                Type typePack;
                try
                {
                    //读包头
                    byte head = recHelper.Reader.ReadByte();
                    if (head != mPackHead)
                        continue;
                    //读长度(实际为到包尾offset)
                    PackageOffsetToEnd offsetToEnd = recHelper.Reader.ReadUInt16();

                    //判断超出当前流(一个包在两段流中)
                    if (recHelper.Stream.Position + offsetToEnd + 1 > recHelper.Stream.Length)
                    {
                        recHelper.PreReadStreamOffset = posStartRead;
                        havePackageCut = true;
                        break;
                    }

                    //判断包尾是否正确
                    long posTmp = recHelper.Stream.Position;
                    recHelper.Stream.Seek(offsetToEnd, SeekOrigin.Current);
                    byte end = recHelper.Reader.ReadByte();
                    recHelper.Stream.Position = posTmp;//还原pos到读位置之后
                    if (end != mPackEnd)
                        continue;

                    //读命令id
                    PackageID pID = recHelper.Reader.ReadUInt16();

                    if (!mPackageMap.TryGetValue(pID, out typePack))
                    {
                        Debug.WriteLine("[erro]解析包时出现未注册包ID");
                        continue;
                    }

                    //正式开始数据
                    objPack = Activator.CreateInstance(typePack);
                    FieldInfo[] packFields = typePack.GetFields();
                    foreach (FieldInfo f in packFields)
                    {
                        f.SetValue(objPack, WazSerializerHelper.Read(recHelper.Reader, f.FieldType));
                    }

                    //跳过包尾
                    recHelper.Stream.Seek(1, SeekOrigin.Current);
                }
                catch (Exception e)
                {
                    //					recHelper.PreReadStreamOffset = posStartRead;
                    //					havePackageCut = true;
                    Debug.WriteLine("[erro]接收数据包异常.可能出现错误包 \r\n" + e.ToString());
                    break;
                }

                if (objPack != null)
                {

                    if (EvtRecevicePack != null)
                        EvtRecevicePack(s, objPack);

                    //触发pack绑定处理函数
                    Action<WazSession, object> packBindHanlders;
                    if (mPackDispathToAllSessionMap.TryGetValue(typePack, out packBindHanlders))
                    {
                        packBindHanlders(s, objPack);
                    }

                    //触发session,pack绑定处理函数
                    Dictionary<Type, Action<object>> typePackMap;
                    if (mPackDispatchMap.TryGetValue(s.Handle, out typePackMap))
                    {
                        Action<object> handler;
                        if (typePackMap.TryGetValue(typePack, out handler))
                        {
                            handler(objPack);
                        }
                    }

                }
            }

            //证明完成读包,重置缓冲区
            if (!havePackageCut)
            {
                recHelper.PreReadStreamOffset = 0;
                recHelper.Stream.Position = 0;
                recHelper.Stream.SetLength(0);
            }
        }
Exemple #15
0
 public virtual void Send(WazSession session, byte[] data)
 {
 }
Exemple #16
0
 public virtual void Send(WazSession session, byte[] data)
 {
 }
Exemple #17
0
 void Handle_SessionAccept(WazSession s)
 {
     mSessionRecHelpers.Add(s.Handle, new PackRecHelper());
 }
Exemple #18
0
 void Handle_SessionClose(WazSession s)
 {
     mSessionRecHelpers.Remove(s.Handle);
 }
Exemple #19
0
        void Handle_RecivePackage(WazSession s, byte[] data, int size)
        {
            PackRecHelper recHelper;

            if (!mSessionRecHelpers.TryGetValue(s.Handle, out recHelper))
            {
                return;
            }

            //将data 放入读取stream末尾
            recHelper.Stream.Write(data, 0, size);
            recHelper.Stream.Seek(recHelper.PreReadStreamOffset, SeekOrigin.Begin);
            bool havePackageCut = false;

            //开始读取.
            while (recHelper.Stream.Position < recHelper.Stream.Length - 1)
            {
                long   posStartRead = recHelper.Stream.Position;
                object objPack;
                Type   typePack;
                try
                {
                    //读包头
                    byte head = recHelper.Reader.ReadByte();
                    if (head != mPackHead)
                    {
                        continue;
                    }
                    //读长度(实际为到包尾offset)
                    PackageOffsetToEnd offsetToEnd = recHelper.Reader.ReadUInt16();

                    //判断超出当前流(一个包在两段流中)
                    if (recHelper.Stream.Position + offsetToEnd + 1 > recHelper.Stream.Length)
                    {
                        recHelper.PreReadStreamOffset = posStartRead;
                        havePackageCut = true;
                        break;
                    }

                    //判断包尾是否正确
                    long posTmp = recHelper.Stream.Position;
                    recHelper.Stream.Seek(offsetToEnd, SeekOrigin.Current);
                    byte end = recHelper.Reader.ReadByte();
                    recHelper.Stream.Position = posTmp;//还原pos到读位置之后
                    if (end != mPackEnd)
                    {
                        continue;
                    }

                    //读命令id
                    PackageID pID = recHelper.Reader.ReadUInt16();

                    if (!mPackageMap.TryGetValue(pID, out typePack))
                    {
                        Debug.WriteLine("[erro]解析包时出现未注册包ID");
                        continue;
                    }

                    //正式开始数据
                    objPack = Activator.CreateInstance(typePack);
                    FieldInfo[] packFields = typePack.GetFields();
                    foreach (FieldInfo f in packFields)
                    {
                        f.SetValue(objPack, WazSerializerHelper.Read(recHelper.Reader, f.FieldType));
                    }

                    //跳过包尾
                    recHelper.Stream.Seek(1, SeekOrigin.Current);
                }
                catch (Exception e)
                {
                    //					recHelper.PreReadStreamOffset = posStartRead;
                    //					havePackageCut = true;
                    Debug.WriteLine("[erro]接收数据包异常.可能出现错误包 \r\n" + e.ToString());
                    break;
                }

                if (objPack != null)
                {
                    if (EvtRecevicePack != null)
                    {
                        EvtRecevicePack(s, objPack);
                    }

                    //触发pack绑定处理函数
                    Action <WazSession, object> packBindHanlders;
                    if (mPackDispathToAllSessionMap.TryGetValue(typePack, out packBindHanlders))
                    {
                        packBindHanlders(s, objPack);
                    }

                    //触发session,pack绑定处理函数
                    Dictionary <Type, Action <object> > typePackMap;
                    if (mPackDispatchMap.TryGetValue(s.Handle, out typePackMap))
                    {
                        Action <object> handler;
                        if (typePackMap.TryGetValue(typePack, out handler))
                        {
                            handler(objPack);
                        }
                    }
                }
            }

            //证明完成读包,重置缓冲区
            if (!havePackageCut)
            {
                recHelper.PreReadStreamOffset = 0;
                recHelper.Stream.Position     = 0;
                recHelper.Stream.SetLength(0);
            }
        }
Exemple #20
0
 public virtual void Send(WazSession session, byte[] data, bool copyData)
 {
 }
Exemple #21
0
 public override void Send(WazSession session, byte[] data)
 {
     Send(session, data, false);
 }
Exemple #22
0
 public virtual void CloseSession(WazSession s)
 {
 }
Exemple #23
0
 public override void CloseSession(WazSession s)
 {
     //mSock.Shutdown(SocketShutdown.Both);
     mSock.Close();
 }
Exemple #24
0
        public bool UnRegEvtHandler(WazSession s, Type packType, Action<object> handler)
        {
            Dictionary<Type, Action<object>> packTypeMap;
            if (!mPackDispatchMap.TryGetValue(s.Handle, out packTypeMap))
            {
                return false;
            }

            Action<object> tmpHandler;
            if (!packTypeMap.TryGetValue(packType, out tmpHandler))
            {
                return false;
            }

            packTypeMap[packType] -= handler;
            return true;
        }
Exemple #25
0
        public override void Send(WazSession session, byte[] data, bool copyData)
        {
            byte[] dataToSend = data;
            if (copyData)
            {

                dataToSend = new byte[data.Length];
                Array.Copy(data, dataToSend, data.Length);
            }

            //mSendPasser.MainThread_Pass(dataToSend);
            try
            {

                mSock.Send(dataToSend);

                //mSock.BeginSend(dataToSend, 0, dataToSend.Length, SocketFlags.None,null, null);
            }
            catch (Exception e)
            {
                Console.WriteLine(e);
            }
        }
Exemple #26
0
 void Handle_SessionAccept(WazSession s)
 {
     mSessionRecHelpers.Add(s.Handle, new PackRecHelper());
 }
Exemple #27
0
 public override void Send(WazSession session, byte[] data)
 {
     Send(session, data, false);
 }
Exemple #28
0
        /// <summary>
        /// 注册指定session,包触发的处理函数
        /// </summary>
        /// <param name="s">S.</param>
        /// <param name="packType">Pack type.</param>
        /// <param name="handler">Handler.</param>
        public void RegEvtHandler(WazSession s, Type packType, Action<object> handler)
        {
            Dictionary<Type, Action<object>> packTypeMap;
            if (!mPackDispatchMap.TryGetValue(s.Handle, out packTypeMap))
            {
                packTypeMap = new Dictionary<Type, Action<object>>();
                mPackDispatchMap.Add(s.Handle, packTypeMap);
            }

            Action<object> tmpHandler;
            if (!packTypeMap.TryGetValue(packType, out tmpHandler))
            {
                packTypeMap.Add(packType, tmpHandler);
            }

            packTypeMap[packType] += handler;
        }
Exemple #29
0
    IEnumerator ConnectToInternet()
    {
        while (true)
        {
            //Debug.Log("每十秒连一下");
            if (!mC.IsConnect())
                session = mC.Connect(IP_ADDRESS, 9873);
            if (mC.IsConnect())
            {
                CS_CommitScore iscore;
                iscore.score = MobileInterface.GetPlayerScore();
                mP.Send(session, iscore);
            }
            else
            {

            }
            yield return new WaitForSeconds(10.0f);
        }
    }