/// <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(); }
/// <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; } } }
/// <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; }
/// <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); }
/// <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; } }
/// <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); } }
/// <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); } }
/// <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); } }
/// <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); }
/// <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); } }
/// <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); }
/// <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; } }
/// <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); }
/// <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++; } }
/// <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); }