Ejemplo n.º 1
0
 /// <summary>
 /// The SrvRecGet.
 /// </summary>
 /// <param name="buffer">The buffer<see cref="ISerialBuffer"/>.</param>
 private void SrvRecGet(ISerialBuffer buffer)
 {
     transferContext.SendMessage    = false;
     transferContext.ReceiveMessage = false;
     transaction.HeaderReceived     = transaction.MyHeader;
     transferContext.HandleGetRequest();
 }
Ejemplo n.º 2
0
        /// <summary>
        /// The CltRecHead.
        /// </summary>
        /// <param name="buffer">The buffer<see cref="ISerialBuffer"/>.</param>
        private void CltRecHead(ISerialBuffer buffer)
        {
            DealHeader headerObject = (DealHeader)transaction.MyHeader.Deserialize(buffer);

            if (headerObject != null)
            {
                transaction.HeaderReceived = headerObject;

                transaction.MyHeader.Context.Identity.Key    = null;
                transaction.MyHeader.Context.Identity.Name   = null;
                transaction.MyHeader.Context.Identity.UserId = transaction.HeaderReceived.Context.Identity.UserId;
                transaction.MyHeader.Context.Identity.Token  = transaction.HeaderReceived.Context.Identity.Token;
                transaction.MyHeader.Context.Identity.DeptId = transaction.HeaderReceived.Context.Identity.DeptId;

                object reciveContent = transaction.HeaderReceived.Content;

                Type[] ifaces = reciveContent.GetType().GetInterfaces();
                if (ifaces.Contains(typeof(ISerialFormatter)) && ifaces.Contains(typeof(ISerialObject)))
                {
                    if (transaction.MyHeader.Content == null)
                    {
                        transaction.MyHeader.Content = ((ISerialObject)reciveContent).Locate();
                    }

                    object myContent = transaction.MyHeader.Content;

                    ((ISerialObject)myContent).Merge(reciveContent);

                    int objectCount = transaction.HeaderReceived.Context.ObjectsCount;
                    if (objectCount == 0)
                    {
                        transferContext.ReceiveMessage = false;
                    }
                    else
                    {
                        transaction.MessageReceived = new DealMessage(transaction, DirectionType.Receive, myContent);
                    }
                }
                else if (reciveContent is Hashtable)
                {
                    Hashtable hashTable = (Hashtable)reciveContent;
                    if (hashTable.Contains("Register"))
                    {
                        transferContext.Denied = !(bool)hashTable["Register"];
                        if (transferContext.Denied)
                        {
                            transferContext.Close          = true;
                            transferContext.ReceiveMessage = false;
                            transferContext.SendMessage    = false;
                        }
                    }
                }
                else
                {
                    transferContext.SendMessage = false;
                }
            }
        }
Ejemplo n.º 3
0
 /// <summary>
 /// The SrvRecPost.
 /// </summary>
 /// <param name="buffer">The buffer<see cref="ISerialBuffer"/>.</param>
 private void SrvRecPost(ISerialBuffer buffer)
 {
     if (SrvRecPostDealer(buffer))
     {
         transaction.HeaderReceived = transaction.MyHeader;
     }
     transferContext.SendMessage    = false;
     transferContext.ReceiveMessage = false;
 }
Ejemplo n.º 4
0
        /// <summary>
        /// The SetBinary.
        /// </summary>
        /// <param name="bank">The bank<see cref="DealHeader"/>.</param>
        /// <param name="buffer">The buffer<see cref="ISerialBuffer"/>.</param>
        /// <returns>The <see cref="int"/>.</returns>
        public static int SetBinary(this DealHeader bank, ISerialBuffer buffer)
        {
            MemoryStream ms = new MemoryStream();

            ms.Write(new byte[buffer.BlockOffset], 0, buffer.BlockOffset);
            BinaryFormatter binform = new BinaryFormatter();

            binform.Serialize(ms, bank);
            buffer.SerialBlock = ms.ToArray();
            ms.Dispose();
            return(buffer.SerialBlock.Length);
        }
Ejemplo n.º 5
0
        /// <summary>
        /// The SrvRecMsg.
        /// </summary>
        /// <param name="buffer">The buffer<see cref="ISerialBuffer"/>.</param>
        private void SrvRecMsg(ISerialBuffer buffer)
        {
            object           serialCardsObj   = ((object[])transaction.MessageReceived.Content)[buffer.DeserialBlockId];
            object           deserialCardsObj = ((ISerialFormatter)serialCardsObj).Deserialize(buffer);
            ISerialFormatter deserialCards    = (ISerialFormatter)deserialCardsObj;

            if (deserialCards.DeserialCount <= deserialCards.ProgressCount || deserialCards.ProgressCount == 0)
            {
                transaction.Context.ObjectsLeft--;
                deserialCards.ProgressCount = 0;
            }
        }
Ejemplo n.º 6
0
 /// <summary>
 /// The GetBinary.
 /// </summary>
 /// <param name="bank">The bank<see cref="DealHeader"/>.</param>
 /// <param name="buffer">The buffer<see cref="ISerialBuffer"/>.</param>
 /// <returns>The <see cref="DealHeader"/>.</returns>
 public static DealHeader GetBinary(this DealHeader bank, ISerialBuffer buffer)
 {
     try
     {
         MemoryStream    ms      = new MemoryStream(buffer.DeserialBlock);
         BinaryFormatter binform = new BinaryFormatter();
         DealHeader      _bank   = (DealHeader)binform.Deserialize(ms);
         ms.Dispose();
         return(_bank);
     }
     catch (Exception ex)
     {
         return(null);
     }
 }
Ejemplo n.º 7
0
 /// <summary>
 /// The Serialize.
 /// </summary>
 /// <param name="buffer">The buffer<see cref="ISerialBuffer"/>.</param>
 /// <param name="offset">The offset<see cref="int"/>.</param>
 /// <param name="batchSize">The batchSize<see cref="int"/>.</param>
 /// <param name="serialFormat">The serialFormat<see cref="SerialFormat"/>.</param>
 /// <returns>The <see cref="int"/>.</returns>
 public int Serialize(ISerialBuffer buffer, int offset, int batchSize, SerialFormat serialFormat = SerialFormat.Binary)
 {
     if (serialFormat == SerialFormat.Binary)
     {
         return(this.SetBinary(buffer));
     }
     else if (serialFormat == SerialFormat.Json)
     {
         return(this.SetJson(buffer));
     }
     else
     {
         return(-1);
     }
 }
Ejemplo n.º 8
0
 /// <summary>
 /// The Deserialize.
 /// </summary>
 /// <param name="buffer">The buffer<see cref="ISerialBuffer"/>.</param>
 /// <param name="serialFormat">The serialFormat<see cref="SerialFormat"/>.</param>
 /// <returns>The <see cref="object"/>.</returns>
 public object Deserialize(ISerialBuffer buffer, SerialFormat serialFormat = SerialFormat.Binary)
 {
     if (serialFormat == SerialFormat.Binary)
     {
         return(this.GetBinary(buffer));
     }
     else if (serialFormat == SerialFormat.Json)
     {
         return(this.GetJson(buffer));
     }
     else
     {
         return(null);
     }
 }
Ejemplo n.º 9
0
        /// <summary>
        /// The SetJson.
        /// </summary>
        /// <param name="thdr">The thdr<see cref="DealHeader"/>.</param>
        /// <param name="buffer">The buffer<see cref="ISerialBuffer"/>.</param>
        /// <param name="offset">The offset<see cref="int"/>.</param>
        /// <returns>The <see cref="int"/>.</returns>
        public static int SetJson(this DealHeader thdr, ISerialBuffer buffer, int offset = 0)
        {
            if (offset > 0)
            {
                byte[] jsonBytes   = Encoding.UTF8.GetBytes(thdr.SetJsonString());
                byte[] serialBytes = new byte[jsonBytes.Length + offset];
                jsonBytes.CopyTo(serialBytes, offset);
                buffer.SerialBlock = serialBytes;
                jsonBytes          = null;
            }
            else
            {
                buffer.SerialBlock = Encoding.UTF8.GetBytes(thdr.SetJsonString());
            }

            return(buffer.SerialBlock.Length);
        }
Ejemplo n.º 10
0
        /// <summary>
        /// The GetJson.
        /// </summary>
        /// <param name="thdr">The thdr<see cref="DealHeader"/>.</param>
        /// <param name="buffer">The buffer<see cref="ISerialBuffer"/>.</param>
        /// <returns>The <see cref="DealHeader"/>.</returns>
        public static DealHeader GetJson(this DealHeader thdr, ISerialBuffer buffer)
        {
            try
            {
                DealHeader trs = null;

                byte[]        _fromarray = buffer.DeserialBlock;
                StringBuilder sb         = new StringBuilder();

                sb.Append(_fromarray.ToChars(CharEncoding.UTF8));
                trs = thdr.GetJsonObject(sb.ToString())["DealHeader"];

                _fromarray = null;
                sb         = null;
                return(trs);
            }
            catch (Exception ex)
            {
                return(null);
            }
        }
Ejemplo n.º 11
0
        /// <summary>
        /// The SrvRecPostDealHeader.
        /// </summary>
        /// <param name="buffer">The buffer<see cref="ISerialBuffer"/>.</param>
        /// <returns>The <see cref="bool"/>.</returns>
        private bool SrvRecPostDealHeader(ISerialBuffer buffer)
        {
            bool   isError      = false;
            string errorMessage = "";

            try
            {
                DealHeader headerObject = (DealHeader)transaction.MyHeader.Deserialize(buffer, SerialFormat.Json);
                headerObject.Context.Identity.Ip = transaction.MyHeader.Context.RemoteEndPoint.Address.ToString();
                if (DealServer.Security.Register(headerObject.Context.Identity, true))
                {
                    transaction.HeaderReceived = (headerObject != null) ? headerObject : null;
                    transaction.MyHeader.Context.Complexity = headerObject.Context.Complexity;
                    transaction.MyHeader.Context.Identity   = headerObject.Context.Identity;

                    if (headerObject.Context.ContentType != null)
                    {
                        object instance = new object();
                        JsonParser.PrepareInstance(out instance, headerObject.Context.ContentType);
                        object content = headerObject.Content;
                        object result  = ((ISerialFormatter)instance).Deserialize(buffer, SerialFormat.Json);
                        transaction.HeaderReceived.Content = result;
                        object _content = transaction.HeaderReceived.Content;

                        Type[] ifaces = _content.GetType().GetInterfaces();
                        if (ifaces.Contains(typeof(ISerialFormatter)) && ifaces.Contains(typeof(ISerialObject)))
                        {
                            int objectCount = buffer.DeserialBlockId;

                            object myheader = ((ISerialObject)_content).Locate();

                            //Settings clientConfig = ((ISettings)_content).Config;

                            if (myheader != null)
                            {
                                if (objectCount == 0)
                                {
                                    transferContext.ReceiveMessage = false;

                                    //if (clientConfig.DealerId.IsNotEmpty)
                                    //    transaction.MyHeader.Content = ((ISerialObject)myheader).Merge(_content);
                                    //else
                                    //{
                                    //  ((ISettings)myheader).State.Expeled = true;
                                    transaction.MyHeader.Content = myheader;
                                    // }
                                }
                                else
                                {
                                    transaction.MyHeader.Content = ((ISerialObject)myheader).Merge(_content);
                                    transaction.MessageReceived  = new DealMessage(transaction, DirectionType.Receive, transaction.MyHeader.Content);
                                }
                            }
                            else
                            {
                                isError       = true;
                                errorMessage += "Prime not exist - incorrect object target ";
                            }
                        }
                        else
                        {
                            isError       = true;
                            errorMessage += "Incorrect DPOT object - deserialization error ";
                        }
                    }
                    else
                    {
                        transaction.MyHeader.Content = new Hashtable()
                        {
                            { "Register", true }
                        };
                        transaction.MyHeader.Context.Echo += "Registration success - ContentType: null ";
                    }
                }
                else
                {
                    isError = true;
                    transaction.MyHeader.Content = new Hashtable()
                    {
                        { "Register", false }
                    };
                    transaction.MyHeader.Context.Echo += "Registration failed - access denied ";
                }
            }
            catch (Exception ex)
            {
                isError       = true;
                errorMessage += ex.ToString();
            }

            if (isError)
            {
                transaction.Context.SendMessage = false;
                if (errorMessage != "")
                {
                    transaction.MyHeader.Content      += errorMessage;
                    transaction.MyHeader.Context.Echo += errorMessage;
                }
                transaction.MyHeader.Context.Errors++;
            }
            return(isError);
        }
Ejemplo n.º 12
0
        /// <summary>
        /// The Resolve.
        /// </summary>
        /// <param name="buffer">The buffer<see cref="ISerialBuffer"/>.</param>
        public void Resolve(ISerialBuffer buffer = null)
        {
            switch (protocol)
            {
            case DealProtocol.DOTP:
                switch (site)
                {
                case ServiceSite.Server:
                    switch (direction)
                    {
                    case DirectionType.Receive:
                        switch (part)
                        {
                        case MessagePart.Header:
                            SrvRecHead(buffer);
                            break;

                        case MessagePart.Message:
                            SrvRecMsg(buffer);
                            break;
                        }
                        break;

                    case DirectionType.Send:
                        switch (part)
                        {
                        case MessagePart.Header:
                            SrvSendHead();
                            break;

                        case MessagePart.Message:
                            SrvSendMsg();
                            break;
                        }
                        break;
                    }
                    break;

                case ServiceSite.Client:
                    switch (direction)
                    {
                    case DirectionType.Receive:
                        switch (part)
                        {
                        case MessagePart.Header:
                            CltRecHead(buffer);
                            break;

                        case MessagePart.Message:
                            CltRecMsg(buffer);
                            break;
                        }
                        break;

                    case DirectionType.Send:
                        switch (part)
                        {
                        case MessagePart.Header:
                            CltSendHead();
                            break;

                        case MessagePart.Message:
                            CltSendMsg();
                            break;
                        }
                        break;
                    }
                    break;
                }
                break;

            case DealProtocol.NONE:
                switch (site)
                {
                case ServiceSite.Server:
                    switch (direction)
                    {
                    case DirectionType.Receive:
                        switch (part)
                        {
                        case MessagePart.Header:
                            SrvRecHead(buffer);
                            break;

                        case MessagePart.Message:
                            SrvRecMsg(buffer);
                            break;
                        }
                        break;

                    case DirectionType.Send:
                        switch (part)
                        {
                        case MessagePart.Header:
                            SrvSendHead();
                            break;

                        case MessagePart.Message:
                            SrvSendMsg();
                            break;
                        }
                        break;
                    }
                    break;

                case ServiceSite.Client:
                    switch (direction)
                    {
                    case DirectionType.Receive:
                        switch (part)
                        {
                        case MessagePart.Header:
                            CltRecHead(buffer);
                            break;

                        case MessagePart.Message:
                            CltRecMsg(buffer);
                            break;
                        }
                        break;

                    case DirectionType.Send:
                        switch (part)
                        {
                        case MessagePart.Header:
                            CltSendHead();
                            break;

                        case MessagePart.Message:
                            CltSendMsg();
                            break;
                        }
                        break;
                    }
                    break;
                }
                break;

            case DealProtocol.HTTP:
                switch (method)
                {
                case ProtocolMethod.GET:
                    switch (site)
                    {
                    case ServiceSite.Server:
                        switch (direction)
                        {
                        case DirectionType.Receive:
                            switch (part)
                            {
                            case MessagePart.Header:
                                SrvRecGet(buffer);
                                break;
                            }
                            break;

                        case DirectionType.Send:
                            switch (part)
                            {
                            case MessagePart.Header:
                                SrvSendGet();
                                break;
                            }
                            break;
                        }
                        break;
                    }
                    break;

                case ProtocolMethod.POST:
                    switch (site)
                    {
                    case ServiceSite.Server:
                        switch (direction)
                        {
                        case DirectionType.Receive:
                            switch (part)
                            {
                            case MessagePart.Header:
                                SrvRecPost(buffer);
                                break;
                            }
                            break;

                        case DirectionType.Send:
                            switch (part)
                            {
                            case MessagePart.Header:
                                SrvSendPost();
                                break;
                            }
                            break;
                        }
                        break;
                    }
                    break;

                case ProtocolMethod.OPTIONS:
                    switch (site)
                    {
                    case ServiceSite.Server:
                        switch (direction)
                        {
                        case DirectionType.Receive:
                            switch (part)
                            {
                            case MessagePart.Header:
                                SrvRecOptions();
                                break;
                            }
                            break;

                        case DirectionType.Send:
                            switch (part)
                            {
                            case MessagePart.Header:
                                SrvSendOptions();
                                break;
                            }
                            break;
                        }
                        break;
                    }
                    break;
                }
                break;
            }
        }
Ejemplo n.º 13
0
        /// <summary>
        /// The SrvRecPostDealer.
        /// </summary>
        /// <param name="buffer">The buffer<see cref="ISerialBuffer"/>.</param>
        /// <returns>The <see cref="bool"/>.</returns>
        private bool SrvRecPostDealer(ISerialBuffer buffer)
        {
            bool   isError      = false;
            string errorMessage = "";

            try
            {
                byte[]        _array = buffer.DeserialBlock;
                StringBuilder sb     = new StringBuilder();
                sb.Append(_array.ToChars(CharEncoding.UTF8));

                string dpttransx = sb.ToString();
                int    msgid     = dpttransx.IndexOf(",\"DealMessage\":");
                string dptheadx  = dpttransx.Substring(0, msgid) + "}";
                string dptmsgx   = "{" + dpttransx.Substring(msgid, dpttransx.Length - msgid).Trim(',');

                string[] msgcntsx    = dptmsgx.Split(new string[] { "\"Content\":" }, StringSplitOptions.RemoveEmptyEntries);
                string[] cntarrays   = msgcntsx.Length > 0 ? msgcntsx[1].Split(new string[] { "\"Cards\":" }, StringSplitOptions.None) : null;
                int      objectCount = 0;
                if (cntarrays != null)
                {
                    for (int i = 1; i < cntarrays.Length; i += 1)
                    {
                        string[] itemarray = cntarrays[i].Split('[');
                        for (int x = 1; x < itemarray.Length; x += 1)
                        {
                            if (itemarray[x].IndexOf(']') > 0)
                            {
                                objectCount++;
                            }
                        }
                    }
                }

                string msgcntx = msgcntsx[1].Trim(' ').Substring(0, 6);

                object dptheadb = dptheadx;
                object dptmsgb  = dptmsgx;

                isError = SrvRecPostDealHeader(buffer);
                if (objectCount > 0 && !isError)
                {
                    isError = SrvRecPostDealMessage(dptmsgb);
                }
            }
            catch (Exception ex)
            {
                isError      = true;
                errorMessage = ex.ToString();
            }

            if (isError)
            {
                transaction.Context.SendMessage = false;
                if (errorMessage != "")
                {
                    transaction.MyHeader.Content      += errorMessage;
                    transaction.MyHeader.Context.Echo += errorMessage;
                }
                transaction.MyHeader.Context.Errors++;
            }
            return(isError);
        }
Ejemplo n.º 14
0
        /// <summary>
        /// The SrvRecHead.
        /// </summary>
        /// <param name="buffer">The buffer<see cref="ISerialBuffer"/>.</param>
        private void SrvRecHead(ISerialBuffer buffer)
        {
            bool   isError      = false;
            string errorMessage = "";

            try
            {
                DealHeader headerObject = (DealHeader)transaction.MyHeader.Deserialize(buffer);
                if (headerObject != null)
                {
                    transaction.HeaderReceived = headerObject;

                    if (DealServer.Security.Register(transaction.HeaderReceived.Context.Identity, true))
                    {
                        transaction.MyHeader.Context.Identity.UserId = transaction.HeaderReceived.Context.Identity.UserId;
                        transaction.MyHeader.Context.Identity.Token  = transaction.HeaderReceived.Context.Identity.Token;
                        transaction.MyHeader.Context.Identity.DeptId = transaction.HeaderReceived.Context.Identity.DeptId;

                        if (transaction.HeaderReceived.Context.ContentType != null)
                        {
                            object _content = transaction.HeaderReceived.Content;
                            //((ISettings)_content).State.Synced = false;

                            Type[] ifaces = _content.GetType().GetInterfaces();
                            if (ifaces.Contains(typeof(ISerialFormatter)) && ifaces.Contains(typeof(ISerialObject)))
                            {
                                int objectCount = transaction.HeaderReceived.Context.ObjectsCount;
                                transferContext.Synchronic = transaction.HeaderReceived.Context.Synchronic;

                                object myheader = ((ISerialObject)_content).Locate();

                                if (myheader != null)
                                {
                                    if (objectCount == 0)
                                    {
                                        transferContext.ReceiveMessage = false;

                                        //if (((ISettings)_content).Config.DealerId.IsNotEmpty)
                                        //    transaction.MyHeader.Content = ((ISerialObject)myheader).Merge(_content);
                                        //else
                                        //{
                                        //    ((ISettings)myheader).State.Expeled = true;
                                        transaction.MyHeader.Content = myheader;
                                        // }
                                    }
                                    else
                                    {
                                        transaction.MyHeader.Content = ((ISerialObject)myheader).Merge(_content);
                                        transaction.MessageReceived  = new DealMessage(transaction, DirectionType.Receive, transaction.MyHeader.Content);
                                    }
                                }
                                else
                                {
                                    isError       = true;
                                    errorMessage += "Prime not exist - incorrect object target ";
                                }
                            }
                            else
                            {
                                isError       = true;
                                errorMessage += "Incorrect DPOT object - deserialization error ";
                            }
                        }
                        else
                        {
                            transaction.MyHeader.Content = new Hashtable()
                            {
                                { "Register", true }
                            };
                            transaction.MyHeader.Context.Echo += "Registration success - ContentType: null ";
                        }
                    }
                    else
                    {
                        isError = true;
                        transaction.MyHeader.Content = new Hashtable()
                        {
                            { "Register", false }
                        };
                        transaction.MyHeader.Context.Echo += "Registration failed - access denied ";
                    }
                }
                else
                {
                    isError       = true;
                    errorMessage += "Incorrect DPOT object - deserialization error ";
                }
            }
            catch (Exception ex)
            {
                isError       = true;
                errorMessage += ex.ToString();
            }

            if (isError)
            {
                transaction.Context.Close          = true;
                transaction.Context.ReceiveMessage = false;
                transaction.Context.SendMessage    = false;

                if (errorMessage != "")
                {
                    transaction.MyHeader.Content      += errorMessage;
                    transaction.MyHeader.Context.Echo += errorMessage;
                }
                transaction.MyHeader.Context.Errors++;
            }
        }
Ejemplo n.º 15
0
 /// <summary>
 /// The SetJson.
 /// </summary>
 /// <param name="tmsg">The tmsg<see cref="DealMessage"/>.</param>
 /// <param name="buffer">The buffer<see cref="ISerialBuffer"/>.</param>
 /// <returns>The <see cref="int"/>.</returns>
 public static int SetJson(this DealMessage tmsg, ISerialBuffer buffer)
 {
     buffer.SerialBlock = Encoding.UTF8.GetBytes(tmsg.SetJsonString());
     return(buffer.SerialBlock.Length);
 }