Beispiel #1
0
        protected override bool WorkFlow(Pipe pipeClient2Server, Pipe pipeServer2Client)
        {
            bool result = false;

            byte[] request = pipeClient2Server.ReadByte();
            if (request != null)
            {
                int version = request[0];
                // check if is socks version 5
                if (version == '\u0005')
                {
                    string reply = "\u0005\u0000";
                    pipeServer2Client.Write(reply);

                    request = pipeClient2Server.ReadByte();
                    if (request != null)
                    {
                        CMDType cmdType = (CMDType)request[1];
                        if (cmdType == CMDType.Connect)
                        {
                            result = HandleTCPReq(request, pipeServer2Client, pipeClient2Server);
                        }
                        else if (cmdType == CMDType.Udp)
                        {
                            // result = HandleUDPReq(request, pipeServer2Client, pipeClient2Server);
                        }
                    }
                }
            }
            return(result);
        }
        protected override void HandleClient(object clientObj)
        {
            Connect   connect2Client = clientObj as Connect;
            TcpClient socket2Client  = connect2Client.client;

            Pipe client2Server = new Pipe(
                socket2Client,
                null,
                connect2Client.userFrom
                );
            Pipe server2Client = new Pipe(
                null,
                socket2Client,
                connect2Client.userFrom
                );

            client2Server.EncryptFrom = true;
            server2Client.EncryptTo   = true;
            try
            {
                byte[] request = client2Server.Read();
                if (request == null)
                {
                    return;
                }
                // not socket 5 request
                int version = request[0];
                if (version != '\u0005')
                {
                    return;
                }

                string reply = "\u0005\u0000";
                server2Client.Write(reply);

                request = client2Server.Read();
                if (request == null)
                {
                    return;
                }

                CMDType cmdType = (CMDType)request[1];

                if (cmdType == CMDType.Connect)
                {
                    HandleTCPReq(request, server2Client, client2Server);
                }
                else if (cmdType == CMDType.Udp)
                {
                    //HandleUDPReq(request, server2Client);
                }
            }
            catch (SocketException se)
            {
                Console.WriteLine(se.Message);
                client2Server.Close();
                server2Client.Close();
            }
        }
Beispiel #3
0
 public CMD(CMDType Type)
 {
     type  = Type;
     sPin  = 0;
     sMode = PinMode.Lock;
     if (Type == CMDType.Pause)
     {
         value = 1000;
     }
     else
     {
         value = 0;
     }
 }
Beispiel #4
0
        /// <summary>
        /// 获取指定协议类型的正则表达式
        /// </summary>
        /// <param name="cmdType">协议类型</param>
        /// <returns>指定协议的正则表达式</returns>
        static public string GetProtocolPattern(CMDType cmdType)
        {
            UnityModule.DebugPrint("开始获取协议正则表达式:{0}", cmdType.ToString());
            string ProtocolString = "";

            //每条协议最后使用换行符结束
            try
            {
                switch (cmdType)
                {
                case CMDType.ChatMessage:
                {
                    ProtocolString = "HEY_CVER=(?<CLIENTVERSION>.+?)_CMDTYPE=CHATMESSAGE_TOID=(?<TOID>.+?)_MESSAGE=(?<MESSAGE>.+?)\n";
                    break;
                }

                case CMDType.GetChatHistory:
                {
                    ProtocolString = "HEY_CVER=(?<CLIENTVERSION>.+?)_CMDTYPE=GETCHATHISTORY_FRIENDID=(?<FRIENDID>.+?)_FIRSTMESSAGEID=(?<FIRSTMESSAGEID>.+?)\n";
                    break;
                }

                case CMDType.SignIn:
                {
                    ProtocolString = "HEY_CVER=(?<CLIENTVERSION>.+?)_CMDTYPE=SIGNIN_USERID=(?<USERID>.+?)_PASSWORD=(?<PASSWORD>.+?)\n";
                    break;
                }

                case CMDType.WhoAmI:
                {
                    ProtocolString = "HEY_CVER=(?<CLIENTVERSION>.+?)_CMDTYPE=WHOAMI_USERID=(?<USERID>.+?)\n";
                    break;
                }

                default:
                {
                    ProtocolString = "";
                    break;
                }
                }
                UnityModule.DebugPrint("协议正则表达式:{0}", ProtocolString);
                return(ProtocolString);
            }
            catch (Exception ex)
            {
                UnityModule.DebugPrint("获取 {0} 协议正则表达式时遇到错误:{1}", cmdType.ToString(), ex.Message);
                return("");
            }
        }
Beispiel #5
0
        public static CMDType GetJsonCMD(string jstr)
        {
            JObject obj = new JObject();
            CMDType cmd = CMDType.CMDErr;



            try
            {
                obj = (JObject)JsonConvert.DeserializeObject(jstr);
                cmd = (CMDType)Convert.ToInt16(obj["cmd"].ToString());
            }
            catch
            {
            }
            return(cmd);
        }
Beispiel #6
0
        /// <summary>
        /// 获取指定协议类型的正则表达式
        /// </summary>
        /// <param name="cmdType">协议类型</param>
        /// <returns>指定协议的正则表达式</returns>
        static public string GetProtocolPattern(CMDType cmdType)
        {
            UnityModule.DebugPrint("开始获取协议正则表达式:{0}", cmdType.ToString());
            string ProtocolString = null;

            //每条协议最后使用换行符结束
            switch (cmdType)
            {
            case CMDType.ChatMessage:
            {
                ProtocolString = "HI_CMDTYPE=CHATMESSAGE_FROMID=(?<FROMID>.+?)_CHATTIME=(?<CHATTIME>.+?)_MESSAGEID=(?<MESSAGEID>.+?)_MESSAGE=(?<MESSAGE>.+?)\n";
                break;
            }

            case CMDType.GetFriendsList:
            {
                ProtocolString = "HI_CMDTYPE=GETFRIENDSLIST_FRIENDID=(?<FRIENDID>.+?)_NICKNAME=(?<NICKNAME>.+?)_SIGNATURE=(?<SIGNATURE>.+?)_ONLINE=(?<ONLINE>.+?)\n";
                break;
            }

            case CMDType.FriendSignIn:
            {
                ProtocolString = "HI_CMDTYPE=FRIENDSIGNIN_FRIENDID=(?<FRIENDID>.+?)\n";
                break;
            }

            case CMDType.FriendSignOut:
            {
                ProtocolString = "HI_CMDTYPE=FRIENDSIGNOUT_FRIENDID=(?<FRIENDID>.+?)\n";
                break;
            }

            default:
            {
                ProtocolString = "";
                break;
            }
            }
            UnityModule.DebugPrint("协议正则表达式:{0}", ProtocolString);
            return(ProtocolString);
        }
Beispiel #7
0
 public CMD(CMDType type, params object[] args)
 {
     this.type = type;
     this.args = args;
 }
Beispiel #8
0
 public CMD(CMDType type)
 {
     this.type = type;
 }
Beispiel #9
0
        /// <summary>
        /// 获取按指定协议类型格式化的协议字符串
        /// </summary>
        /// <param name="cmdType">协议类型</param>
        /// <returns>协议字符串</returns>
        static public string FormatProtocol(CMDType cmdType, params string[] ProtocolValues)
        {
            UnityModule.DebugPrint("开始格式化通信协议:{0} : {1}", cmdType.ToString(), string.Join(" + ", ProtocolValues));
            string ProtocolString = null;

            //每条协议最后加一个换行符,否则服务端无法使用正则匹配最后一个参数
            try
            {
                switch (cmdType)
                {
                case CMDType.ChatMessage:
                {
                    ProtocolString = string.Format("HI_CMDTYPE=CHATMESSAGE_FROMID={0}_CHATTIME={1}_MESSAGEID={2}_MESSAGE={3}\n", ProtocolValues[0], ProtocolValues[1], ProtocolValues[2], ProtocolValues[3]);
                    break;
                }

                case CMDType.GetFriendsList:
                {
                    ProtocolString = string.Format("HI_CMDTYPE=GETFRIENDSLIST_FRIENDID={0}_NICKNAME={1}_SIGNATURE={2}_ONLINE={3}\n", ProtocolValues[0], Convert.ToBase64String(Encoding.UTF8.GetBytes(ProtocolValues[1])), Convert.ToBase64String(Encoding.UTF8.GetBytes(ProtocolValues[2])), ProtocolValues[3]);
                    break;
                }

                case CMDType.SignInSuccessfully:
                {
                    ProtocolString = string.Format("HI_CMDTYPE=SIGNINSUCCESSFULLY_USERID={0}\n", ProtocolValues[0]);
                    break;
                }

                case CMDType.SignInUnsuccessfully:
                {
                    ProtocolString = string.Format("HI_CMDTYPE=SIGNINUNSUCCESSFULLY_USERID={0}\n", ProtocolValues[0]);
                    break;
                }

                case CMDType.FriendsListComplete:
                {
                    ProtocolString = string.Format("HI_CMDTYPE=FRIENDSLISTCOMPLETE_USERID={0}\n", ProtocolValues[0]);
                    break;
                }

                case CMDType.MessageNSYComplete:
                {
                    ProtocolString = string.Format("HI_CMDTYPE=MESSAGENSYCOMPLETE_USERID={0}\n", ProtocolValues[0]);
                    break;
                }

                case CMDType.FriendSignIn:
                {
                    ProtocolString = string.Format("HI_CMDTYPE=FRIENDSIGNIN_FRIENDID={0}\n", ProtocolValues[0]);
                    break;
                }

                case CMDType.FriendSignOut:
                {
                    ProtocolString = string.Format("HI_CMDTYPE=FRIENDSIGNOUT_FRIENDID={0}\n", ProtocolValues[0]);
                    break;
                }

                case CMDType.AnothorSignIn:
                {
                    ProtocolString = string.Format("HI_CMDTYPE=ANOTHORSIGNIN_USERID={0}\n", ProtocolValues[0]);
                    break;
                }

                case CMDType.ServerShutdown:
                {
                    ProtocolString = string.Format("HI_CMDTYPE=SERVERSHUTDOWN_\n");
                    break;
                }

                default:
                {
                    ProtocolString = "";
                    break;
                }
                }

                UnityModule.DebugPrint("协议内容:{0}", ProtocolString);
                return(ProtocolString);
            }
            catch (Exception ex)
            {
                UnityModule.DebugPrint("获取 {0} 通信协议时遇到错误:{1}", cmdType.ToString(), ex.Message);
                return("");
            }
        }
Beispiel #10
0
 public Cmd(string filename, byte[] data, CMDType type)
 {
     this.filename = filename;
     this.data     = data;
     this.type     = type;
 }
Beispiel #11
0
 public void AddCMD(CMDType type, params object[] args)
 {
     cmds.Add(new CMD(type, args));
 }
Beispiel #12
0
        /// <summary>
        /// 获取按指定协议类型格式化的协议字符串
        /// </summary>
        /// <param name="cmdType">协议类型</param>
        /// <returns>协议字符串</returns>
        static public string FormatProtocol(CMDType cmdType, params string[] ProtocolValues)
        {
            UnityModule.DebugPrint("开始格式化通信协议:{0} : {1}", cmdType.ToString(), string.Join(" + ", ProtocolValues));
            //每条协议最后加一个换行符,否则服务端无法使用正则匹配最后一个参数
            string ProtocolString = "";

            try
            {
                switch (cmdType)
                {
                case CMDType.ChatMessage:
                {
                    ProtocolString = string.Format("HEY_CVER={0}_CMDTYPE=CHATMESSAGE_TOID={1}_MESSAGE={2}\n", ProtocolValues[0], ProtocolValues[1], Convert.ToBase64String(Encoding.UTF8.GetBytes(ProtocolValues[2])));
                    break;
                }

                case CMDType.SignIn:
                {
                    ProtocolString = string.Format("HEY_CVER={0}_CMDTYPE=SIGNIN_USERID={1}_PASSWORD={2}\n", ProtocolValues[0], ProtocolValues[1], ProtocolValues[2]);
                    break;
                }

                case CMDType.WhoAmI:
                {
                    ProtocolString = string.Format("HEY_CVER={0}_CMDTYPE=WHOAMI_USERID={1}\n", ProtocolValues[0], ProtocolValues[1]);
                    break;
                }

                case CMDType.GetFriendsList:
                {
                    ProtocolString = string.Format("HEY_CVER={0}_CMDTYPE=GETFRIENDSLIST_USERID={1}\n", ProtocolValues[0], ProtocolValues[1]);
                    break;
                }

                case CMDType.SignOut:
                {
                    ProtocolString = string.Format("HEY_CVER={0}_CMDTYPE=SIGNOUT_USERID={1}\n", ProtocolValues[0], ProtocolValues[1]);
                    break;
                }

                case CMDType.GetMessageNotSendYet:
                {
                    ProtocolString = string.Format("HEY_CVER={0}_CMDTYPE=GETMESSAGENOTSENDYET_USERID={1}\n", ProtocolValues[0], ProtocolValues[1]);
                    break;
                }

                case CMDType.GetChatHistory:
                {
                    ProtocolString = string.Format("HEY_CVER={0}_CMDTYPE=GETCHATHISTORY_FRIENDID={1}_FIRSTMESSAGEID={2}\n", ProtocolValues[0], ProtocolValues[1], ProtocolValues[2]);
                    break;
                }

                default:
                {
                    ProtocolString = "";
                    break;
                }
                }
                UnityModule.DebugPrint("协议内容:{0}", ProtocolString);
                return(ProtocolString);
            }
            catch (Exception ex)
            {
                UnityModule.DebugPrint("获取 {0} 通信协议时遇到错误:{1}", cmdType.ToString(), ex.Message);
                return("");
            }
        }