Пример #1
0
    public void OnClickReigst()
    {
        RegistData data = new RegistData();

        data.NickName = registInput.text;
        NetWork.SendPacket <RegistData>(CTS.CTS_Regist, data, LoginCallback);
    }
Пример #2
0
        static void OnRegist(byte[] data, Action5001 action)
        {
            int uid = action.GetActionGetter().GetSession().UserId;

            var userInfo = CacheSet.UserInfoCach.FindKey(uid);

            if (userInfo == null)
            {
                return;
            }

            RegistData registData = ProtoBufUtils.Deserialize <RegistData>(data);

            userInfo.ModifyLocked(() =>
            {
                userInfo.NickName = registData.NickName;
            });

            LoginResponse response = new LoginResponse();

            response.UserID   = uid;
            response.NickName = userInfo.NickName;
            byte[] responseData = ProtoBufUtils.Serialize(response);
            action.SetResponseData(responseData);
        }
Пример #3
0
        protected override void Handle(Package package, Action act = null)
        {
            RegistData data = package.GetValue <RegistData>();

            var loginChannel  = data.LoginChannel.GetValue <List <int> >();
            var logoutChannel = data.LogoutChannel.GetValue <List <int> >();

            if (loginChannel != null)
            {
                loginChannel.ForEach((channelId) =>
                {
                    if (!ownerServer.currentChannel.Contains(channelId))
                    {
                        ownerServer.currentChannel.Add(channelId);
                    }
                });
            }

            if (logoutChannel != null)
            {
                logoutChannel.ForEach((channelId) =>
                {
                    if (ownerServer.currentChannel.Contains(channelId))
                    {
                        ownerServer.currentChannel.Remove(channelId);
                    }
                });
            }
        }
Пример #4
0
 public static void Register(RegistData data)
 {
     if (data == null)
     {
         return;
     }
     RpcServiceStore.Instance.RegisterService(data);
 }
Пример #5
0
        public static T GetApi <T>(string ip, int port)
        {
            var result = RpcClientHelper.Instance.GetApi(typeof(T), ip, port);
            var data   = new RegistData();

            data.Address     = ip;
            data.Port        = port;
            data.ServiceInfc = typeof(T).FullName();
            RpcClient.Register(data);
            return((T)result);
        }
Пример #6
0
        /// <summary>
        /// 注册频道
        /// </summary>
        /// <param name="loginChannelList">要登入的频道</param>
        /// <param name="logoutChannelList">要登出的频道</param>
        public void Regist(List <int> loginChannelList, List <int> logoutChannelList, Action <Package> callback = null)
        {
            string     loginListStr  = loginChannelList.ConverToString();
            string     logoutListStr = logoutChannelList.ConverToString();
            RegistData data          = new RegistData();

            data.LoginChannel  = loginListStr;
            data.LogoutChannel = logoutListStr;

            Request <RegistData>(HandlerConst.RequestId.RegistChannelHandler, -1, data, SendType.TCP, callback);
        }
Пример #7
0
        private void registerService(RegistData data)
        {
            if (data == null || string.IsNullOrWhiteSpace(data.ServiceInfc) ||
                string.IsNullOrWhiteSpace(data.ServiceImpl))
            {
                return;
            }
            var value = new ServiceRegistData(data);

            servicestore.TryAdd(Guid.NewGuid().ToString(), value);
        }
Пример #8
0
 private bool RpcImplEnable(RegistData data)
 {
     if (data == null)
     {
         return(false);
     }
     if (string.IsNullOrWhiteSpace(data.ServiceImpl))
     {
         return(false);
     }
     return(Type.GetType(data?.ServiceImpl, false, true) != null);
 }
Пример #9
0
        public void RegisterService(RegistData data)
        {
            if (data == null || string.IsNullOrWhiteSpace(data.ServiceInfc))
            {
                return;
            }
            if (this.GetServiceByIntfc(data.ServiceInfc, data.ServiceMethod) != null)
            {
                return;
            }
            var value = new ClientRegistData(data);

            servicestore.TryAdd(Guid.NewGuid().ToString(), value);
        }
Пример #10
0
 public static void Register(RegistData data)
 {
     RpcServiceStore.Instance.RegisterService(data);
 }
Пример #11
0
 public ClientRegistData(RegistData data) : base(data)
 {
     this.ServerChannel = this.CreateChannel(data.Address, data.Port);
 }
Пример #12
0
 public void RegisterService(RegistData data)
 {
     registerService(data);
 }
Пример #13
0
        /// <summary>
        /// 接收客户端发送的消息
        /// </summary>
        /// <param name="newSocket"></param>
        void Receive(Socket newSocket)
        {
            int             oldadd    = 0;
            int             newadd    = 0;
            RegistData      rd        = null;
            ChannelTempInfo ci        = new ChannelTempInfo();
            int             SerialNum = -1; //流水号
            List <byte>     response  = new List <byte>();

            while (newSocket != null && newSocket.Connected)
            {
                try
                {
                    byte[] requetData = new byte[12];                                //Map报文头+字节数
                    requetData = SocketRead(newSocket, requetData.Length);
                    ushort slavenum         = requetData[6];                         //站号
                    var    address          = requetData[8] * 256 + requetData[9];   //寄存器地址
                    var    registercout     = requetData[10] * 256 + requetData[11]; //寄存器个数
                    byte[] responseDataHead = new byte[9];
                    Buffer.BlockCopy(requetData, 0, responseDataHead, 0, 8);
                    responseDataHead[5] = (byte)(3 + registercout * 2);
                    responseDataHead[8] = (byte)(registercout * 2);
                    switch (requetData[7])   //功能码
                    {
                    //读保持寄存器
                    case 3:
                    {
                        if (ServerStart.Create().DTS.Keys.Contains(this.equipnum))
                        {
                            int equipslavenum = ServerStart.Create().DTS[this.equipnum].SlaveNum;
                            int channelnum    = Math.Abs(slavenum - equipslavenum);
                            if (BitConverter.ToUInt16(requetData, 0) != SerialNum)
                            {
                                response.Clear();
                                object data = ServerStart.Create().DTS[this.equipnum].dataMange.PopData(this.equipnum, slavenum);
                                if (channelnum == 0)
                                {
                                    //设备基本信息
                                }
                                else
                                {
                                    if (data != null)
                                    {
                                        byte[] responseData1 = EquipChannelTempInfo.ProtocolConvert((ChannelTempInfo)data);
                                        response.AddRange(responseData1);

                                        /* byte[] holdregisterdata = new byte[9 + registercout * 2];
                                         * Buffer.BlockCopy(responseDataHead, 0, holdregisterdata, 0, 8);
                                         * Buffer.BlockCopy(response.ToArray(), address * 2, holdregisterdata, 9, registercout * 2);
                                         * newSocket.Send(holdregisterdata);
                                         */

                                        if (this.equipnum == Main.oldEquipNum)
                                        {
                                            ci = (ChannelTempInfo)data;
                                            Main.channelCurvers[ci.ChannelNum.ToString()].DrawSendData(ci);
                                            Main.ObjRefreshZed(ci.ChannelNum.ToString());
                                            //  Thread.Sleep(1000);
                                        }
                                    }
                                }
                                SerialNum = BitConverter.ToUInt16(requetData, 0);
                            }

                            if (response.Count > 0)
                            {
                                byte[] holdregisterdata = new byte[9 + registercout * 2];
                                Buffer.BlockCopy(responseDataHead, 0, holdregisterdata, 0, 9);
                                Buffer.BlockCopy(response.ToArray(), address * 2, holdregisterdata, 9, registercout * 2);
                                newSocket.Send(holdregisterdata);

                                System.Text.StringBuilder builder = new System.Text.StringBuilder();
                                for (int i = 0; i < requetData.Length; i++)
                                {
                                    builder.Append(string.Format("{0:X2} ", requetData[i]));
                                }
                                Debug.WriteLine("接收:" + builder.ToString());
                                builder.Clear();

                                for (int i = 0; i < holdregisterdata.Length; i++)
                                {
                                    builder.Append(string.Format("{0:X2} ", holdregisterdata[i]));
                                }
                                Debug.WriteLine("发送:" + builder.ToString());
                            }
                        }
                    }
                    break;

                    //读输入寄存器
                    case 4:
                    {
                        /*
                         * //当前位置到最后的长度
                         * responseData1[4] = (byte)((3 + registercout * 2) / 256);
                         * responseData1[5] = (byte)((3 + registercout * 2) % 256);
                         * byte[] responseData2 = new byte[1 + registercout * 2];
                         * responseData2[0] = (byte)(registercout * 2);
                         * for (int i = 1; i < responseData2.Length; i++)
                         *  responseData2[i] = 0xff;
                         * if (address >= 0 && address < 65536)
                         * {
                         *  newadd = address;
                         *  rd = ServerStart.Create().PosRegistdata(equipnum, slavenum.ToString());
                         *  if (rd != null)
                         *  {
                         *      byte[] byteArray = rd.inputRegistData;
                         *
                         *      if (address * 2 < byteArray.Length)
                         *      {
                         *          if ((address + registercout) * 2 <= byteArray.Length)
                         *          {
                         *              Buffer.BlockCopy(byteArray, address * 2, responseData2, 1, registercout * 2);
                         *          }
                         *          else
                         *          {
                         *              int len = ((address + registercout) * 2) - byteArray.Length;
                         *              byte[] b = new byte[len];
                         *              for (int i = 0; i < len; i++)
                         *                  b[i] = 0xff;
                         *
                         *              byte[] temp = byteArray.Concat(b).ToArray();
                         *              Buffer.BlockCopy(temp, address * 2, responseData2, 1, registercout * 2);
                         *          }
                         *          var responseData = responseData1.Concat(responseData2).ToArray();
                         *          newSocket.Send(responseData);
                         *
                         *          oldadd = address;
                         *
                         *      }
                         *  }
                         * }
                         */
                    }
                    break;
                    }
                }
                catch (Exception ex)
                {
                    connectsuccessflag = false;
                    if (newSocket?.Connected ?? false)
                    {
                        newSocket?.Shutdown(SocketShutdown.Both);
                    }
                    newSocket?.Close();
                }
            }
        }
Пример #14
0
        /// <summary>
        /// 接收客户端发送的消息
        /// </summary>
        /// <param name="newSocket"></param>
        void Receive(Socket newSocket)
        {
            int        oldadd = 0;
            int        newadd = 0;
            RegistData rd     = null;

            while (newSocket != null && newSocket.Connected)
            {
                try
                {
                    byte[] requetData1 = new byte[8];                                 //Map报文头+功能码
                    requetData1 = SocketRead(newSocket, requetData1.Length);
                    byte[] requetData2 = new byte[requetData1[5] - 2];                //数据
                    requetData2 = SocketRead(newSocket, requetData2.Length);
                    var    requetData    = requetData1.Concat(requetData2).ToArray(); //完整的数据请求报文
                    byte[] responseData1 = new byte[8];
                    Buffer.BlockCopy(requetData, 0, responseData1, 0, responseData1.Length);
                    string stationNumberKey = string.Format("{0}", requetData[6]);   //站号
                    var    address          = requetData[8] * 256 + requetData[9];   //寄存器地址
                    var    registerLenght   = requetData[10] * 256 + requetData[11]; //寄存器的长度
                    switch (requetData[7])                                           //功能码
                    {
                    //读保持寄存器
                    case 3:
                    {
                        /*
                         * //当前位置到最后的长度
                         * responseData1[4] = (byte)((3 + registerLenght * 2) / 256);
                         * responseData1[5] = (byte)((3 + registerLenght * 2) % 256);
                         * byte[] responseData2 = new byte[1 + registerLenght * 2];
                         * responseData2[0] = (byte)(registerLenght * 2);
                         * for (int i = 1; i < responseData2.Length; i++)
                         *  responseData2[i] = 0xff;
                         * if (address >= 0 && address < 6000)
                         * {
                         *  RegistData rd = RegistDatas.Create().PosRegistdata(stationNumberKey);
                         *  if (rd != null)
                         *  {
                         *      byte[] byteArray = rd.holdRegistData;
                         *      Buffer.BlockCopy(byteArray, address * 2, responseData2, 1, registerLenght * 2);
                         *
                         *      var responseData = responseData1.Concat(responseData2).ToArray();
                         *      newSocket.Send(responseData);
                         *  }
                         * }
                         */
                    }
                    break;

                    //读输入寄存器
                    case 4:
                    {
                        //当前位置到最后的长度
                        responseData1[4] = (byte)((3 + registerLenght * 2) / 256);
                        responseData1[5] = (byte)((3 + registerLenght * 2) % 256);
                        byte[] responseData2 = new byte[1 + registerLenght * 2];
                        responseData2[0] = (byte)(registerLenght * 2);
                        for (int i = 1; i < responseData2.Length; i++)
                        {
                            responseData2[i] = 0xff;
                        }
                        if (address >= 0 && address < 65536)
                        {
                            newadd = address;
                            rd     = ServerStart.Create().PosRegistdata(equipnum, stationNumberKey);
                            if (rd != null)
                            {
                                byte[] byteArray = rd.inputRegistData;

                                if (address * 2 < byteArray.Length)
                                {
                                    if ((address + registerLenght) * 2 <= byteArray.Length)
                                    {
                                        Buffer.BlockCopy(byteArray, address * 2, responseData2, 1, registerLenght * 2);
                                    }
                                    else
                                    {
                                        int    len = ((address + registerLenght) * 2) - byteArray.Length;
                                        byte[] b   = new byte[len];
                                        for (int i = 0; i < len; i++)
                                        {
                                            b[i] = 0xff;
                                        }

                                        byte[] temp = byteArray.Concat(b).ToArray();
                                        Buffer.BlockCopy(temp, address * 2, responseData2, 1, registerLenght * 2);
                                    }
                                    var responseData = responseData1.Concat(responseData2).ToArray();
                                    newSocket.Send(responseData);

                                    oldadd = address;
                                }
                            }
                        }
                    }
                    break;
                    }
                }
                catch (Exception ex)
                {
                    connectsuccessflag = false;
                    if (newSocket?.Connected ?? false)
                    {
                        newSocket?.Shutdown(SocketShutdown.Both);
                    }
                    newSocket?.Close();
                }
            }
        }