private static CommanderAIComponent CreateAndPlaceCommander(EncounterState state) { var commanderUnitId = "Invisible Commander AI Unit"; var commander = EntityBuilder.CreateCommanderEntity(state.CurrentTick, FactionName.NEUTRAL); var commanderAI = commander.GetComponent <CommanderAIComponent>(); state.PlaceEntity(commander, new EncounterPosition(1, 1)); // Invisible and unreachable but you CAN mouse over it, lol. it's fiiine // Commander unit is required for non-targeted commands to resolve properly var commanderUnit = new Unit(commanderUnitId, FactionName.NEUTRAL, commander.GetComponent <PositionComponent>().EncounterPosition, UnitOrder.REFORM, FormationType.LINE_20, FormationFacing.SOUTH); state.AddUnit(commanderUnit); commanderAI.RegisterUnit(commanderUnit); // Boilerplate conditions var playerRouted = new OrderTrigger(OrderTriggerType.ALL_UNITS_OF_FACTION_ROUTED, false, triggerFaction: FactionName.PLAYER); commanderAI.RegisterTriggeredOrder(playerRouted, new Order(commanderUnitId, OrderType.DECLARE_DEFEAT)); var enemyRouted = new OrderTrigger(OrderTriggerType.ALL_UNITS_OF_FACTION_ROUTED, false, triggerFaction: FactionName.ENEMY); commanderAI.RegisterTriggeredOrder(enemyRouted, new Order(commanderUnitId, OrderType.DECLARE_VICTORY)); return(commanderAI); }
public static OrderTrigger Deserialize(ReadOnlySpan <byte> bytes) { if (bytes == null) { throw new ArgumentNullException(nameof(bytes)); } if (bytes.Length != MessageSize) { throw new Exception("Order Trigger Message must be of Size : " + sizeOfMessage); } var messageType = (MessageType)(bytes[messageTypeOffset]); if (messageType != MessageType.OrderTrigger) { throw new Exception(Constant.INVALID_MESSAGE); } var version = BitConverter.ToInt16(bytes.Slice(versionOffset)); if (version != OrderTriggerSerializer.version) { throw new Exception(Constant.INVALID_VERSION); } var orderTrigger = new OrderTrigger(); orderTrigger.OrderId = BitConverter.ToInt32(bytes.Slice(orderIdOffset)); orderTrigger.Timestamp = BitConverter.ToInt32(bytes.Slice(timestampOffset)); orderTrigger.MessageSequence = BitConverter.ToInt64(bytes.Slice(messageSequenceOffset)); return(orderTrigger); }
public static void Serialize(OrderTrigger orderTrigger, Span <byte> bytes) { if (orderTrigger == null) { throw new ArgumentNullException(nameof(orderTrigger)); } Serialize(orderTrigger.MessageSequence, orderTrigger.OrderId, orderTrigger.Timestamp, bytes); }
private static void RegisterRoutAtPercentage(CommanderAIComponent commanderAIComponent, Unit unit, float percentage) { var trigger = new OrderTrigger(OrderTriggerType.UNIT_BELOW_STRENGTH_PERCENT, false, watchedUnitIds: new List <string>() { unit.UnitId }, belowStrengthPercent: percentage); commanderAIComponent.RegisterTriggeredOrder(trigger, new Order(unit.UnitId, OrderType.ROUT)); var laneClearTrigger = new OrderTrigger(OrderTriggerType.LANE_CLEAR_OF_UNITS_FROM_FACTION, false, watchedUnitIds: new List <string>() { unit.UnitId }, triggerFaction: unit.UnitFaction.Opposite()); commanderAIComponent.RegisterTriggeredOrder(laneClearTrigger, new Order(unit.UnitId, OrderType.PREPARE_SWEEP_NEXT_LANE)); }
public async Task <IActionResult> AdvanceOrderAsync([FromRoute] int orderNumber, [FromQuery] OrderTrigger trigger) { try { Order order = await findOrderByNumberPort.FindByNumber(orderNumber); await stateMachine.BuildFor(order).FireAsync(trigger); return(Ok(order.Number)); } catch (OrderNotFoundException ex) { logger.LogError(ex, ex.Message); return(NotFound(orderNumber)); } catch (Exception ex) { logger.LogError(ex, ex.Message); return(StatusCode((int)HttpStatusCode.InternalServerError)); } }
public SerializeBenchmark() { book = new Book(); book.AddOrderOpenBook(new Order { CancelOn = 1000, IsBuy = true, OpenQuantity = 1000, OrderId = 3434, Price = 234 }); book.AddOrderOpenBook(new Order { CancelOn = 1000, IsBuy = true, OpenQuantity = 1000, OrderId = 3434, Price = 235 }); book.AddOrderOpenBook(new Order { CancelOn = 1000, IsBuy = true, OpenQuantity = 1000, OrderId = 3435, Price = 236 }); book.AddOrderOpenBook(new Order { CancelOn = 1000, IsBuy = true, OpenQuantity = 1000, OrderId = 3436, Price = 237 }); book.AddOrderOpenBook(new Order { CancelOn = 1000, IsBuy = true, OpenQuantity = 1000, OrderId = 3437, Price = 238 }); book.AddOrderOpenBook(new Order { CancelOn = 1000, IsBuy = false, OpenQuantity = 1000, OrderId = 3438, Price = 239 }); book.AddOrderOpenBook(new Order { CancelOn = 1000, IsBuy = false, OpenQuantity = 1000, OrderId = 3439, Price = 240 }); book.AddOrderOpenBook(new Order { CancelOn = 1000, IsBuy = false, OpenQuantity = 1000, OrderId = 3440, Price = 241 }); book.AddOrderOpenBook(new Order { CancelOn = 1000, IsBuy = false, OpenQuantity = 1000, OrderId = 3441, Price = 242 }); book.AddOrderOpenBook(new Order { CancelOn = 1000, IsBuy = false, OpenQuantity = 1000, OrderId = 3442, Price = 243 }); bid = book.BidSide.Select(x => new KeyValuePair <Price, Quantity>(x.Key, x.Value.Quantity)).ToList(); ask = book.AskSide.Select(x => new KeyValuePair <Price, Quantity>(x.Key, x.Value.Quantity)).ToList(); var order = new Order() { CancelOn = 12345678, IsBuy = true, OrderId = 56789, Price = 404, OpenQuantity = 1000, OrderCondition = OrderCondition.ImmediateOrCancel, StopPrice = 9534, TotalQuantity = 7878234 }; orderJsonString = JsonConvert.SerializeObject(order); orderBinarySerialized = new byte[OrderSerializer.MessageSize]; OrderSerializer.Serialize(order, orderBinarySerialized); orderMsgPck = MessagePackSerializer.Serialize(new Order2 { IsBuy = true, IsTip = false, OpenQuantity = 100, OrderId = 1001, Price = 400, Quantity = 100, Sequnce = 0, StopPrice = 0 }); fillJsonString = JsonConvert.SerializeObject(new Fill { MakerOrderId = 10001, MatchQuantity = 2000, MatchRate = 2400, TakerOrderId = 9999, Timestamp = 10303 }); fillBinary = new byte[FillSerializer.MessageSize]; FillSerializer.Serialize(new Fill { MakerOrderId = 10001, MatchQuantity = 2000, MatchRate = 2400, TakerOrderId = 9999, Timestamp = 10303 }, fillBinary); cancelJsonString = JsonConvert.SerializeObject(new CancelledOrder { OrderId = 1201, CancelReason = CancelReason.UserRequested, RemainingQuantity = 2000, Timestamp = 234 }); cancelBinary = new byte[CancelledOrderSerializer.MessageSize]; CancelledOrderSerializer.Serialize(new CancelledOrder { OrderId = 1201, CancelReason = CancelReason.UserRequested, RemainingQuantity = 2000, Timestamp = 234 }, cancelBinary); cancelRequestJsonString = JsonConvert.SerializeObject(new CancelRequest { OrderId = 1023 }); cancelRequestBinary = new byte[CancelRequestSerializer.MessageSize]; CancelRequestSerializer.Serialize(new CancelRequest { OrderId = 1023 }, cancelRequestBinary); orderTriggerBinary = new byte[OrderTriggerSerializer.MessageSize]; OrderTriggerSerializer.Serialize(new OrderTrigger { OrderId = 3453, Timestamp = 35345 }, orderTriggerBinary); orderTriggerJsonString = JsonConvert.SerializeObject(new OrderTrigger { OrderId = 3453, Timestamp = 35345 }); bookRequestBinary = new byte[BookRequestSerializer.MessageSize]; BookRequestSerializer.Serialize(new BookRequest { }, bookRequestBinary); bookRequestJsonString = JsonConvert.SerializeObject(new BookRequest { }); bookRequest2Bytes = MessagePackSerializer.Serialize(new BookRequest2 { }); bookDepth = new BookDepth(1234, 100, bid, ask); bookJsonString = JsonConvert.SerializeObject(bookDepth); bookBinary = new byte[OrderSerializer.MessageSize]; BookSerializer.Serialize(bookDepth, bookBinary); fill = new Fill { MakerOrderId = 10001, MatchQuantity = 2000, MatchRate = 2400, TakerOrderId = 9999, Timestamp = 10303 }; order2 = new Order2 { IsBuy = true, IsTip = false, OpenQuantity = 100, OrderId = 1001, Price = 400, Quantity = 100, Sequnce = 0, StopPrice = 0 }; this.order = new Order { IsBuy = true, OpenQuantity = 100, OrderId = 1001, Price = 400, Sequnce = 0, TotalQuantity = 100, OrderCondition = OrderCondition.None, StopPrice = 0 }; cancelledOrder = new CancelledOrder { OrderId = 1201, CancelReason = CancelReason.UserRequested, RemainingQuantity = 2000, Timestamp = 234 }; cancelRequest = new CancelRequest { OrderId = 1023 }; orderTrigger = new OrderTrigger { OrderId = 3453, Timestamp = 35345 }; bookRequest = new BookRequest { LevelCount = 50 }; bookRequest2 = new BookRequest2 { LevelCount = 50 }; }