public static Component GetPlateLocationComponent(ClientPlate plate) { Component locationComponent = GetObjectLocationComponent(plate); if (locationComponent != null) { return(locationComponent); } ClientPlateReturnStation[] plateReturnStations = Object.FindObjectsOfType <ClientPlateReturnStation>(); foreach (ClientPlateReturnStation plateReturnStation in plateReturnStations) { ClientPlateStackBase plateStackBase = (ClientPlateStackBase)ReflectionUtil.GetValue(plateReturnStation, "m_stack"); ClientStack clientStack = (ClientStack)ReflectionUtil.GetValue(plateStackBase, "m_stack"); List <GameObject> stackItems = (List <GameObject>)ReflectionUtil.GetValue(clientStack, "m_stackItems"); if (stackItems.Contains(plate.gameObject)) { return(plateReturnStation); } } return(null); }
public bool Pump() { List <MockStack> serverStacks; if (Queue.Count == 0) { return(false); } MockQueueItem item = Queue.Peek(); switch (item.ItemType) { // state #1 - client requested a send of a request case MockQueueItem.QueueType.ClientSendRequest: Queue.Dequeue(); if (item.Request.Destination == null) { item.Request.Destination = ServerAddress; } ClientStack.SendRequest(item.Request); break; // state #2 - client ready for network send case MockQueueItem.QueueType.ClientSendRequestNetwork: Queue.Dequeue(); MessageEncoder encoder = new Spec.MessageEncoder18(); byte[] encodedRequest = encoder.Encode(item.Request); EndPoint destination = item.Request.Destination; item = new MockQueueItem(MockQueueItem.QueueType.ServerSendRequestNetwork, encodedRequest); item.Source = ClientAddress; item.Destination = destination; Queue.Enqueue(item); break; // state #3 - server receives network send case MockQueueItem.QueueType.ServerSendRequestNetwork: Queue.Dequeue(); serverStacks = ServerStacks[item.Destination]; foreach (MockStack s in serverStacks) { s.MyEndPoint.ReceiveData(item); } break; // state #4 - server application receives request case MockQueueItem.QueueType.ServerSendRequest: break; // state #5 - server sends an response case MockQueueItem.QueueType.ServerSendResponse: Queue.Dequeue(); serverStacks = ServerStacks[item.Source]; Assert.AreEqual(1, serverStacks.Count); foreach (MockStack s in serverStacks) { s.SendResponse(item.Exchange, item.Response); } break; // state #6 - server ready to send over network case MockQueueItem.QueueType.ServerSendResponseNetwork: Queue.Dequeue(); encoder = new Spec.MessageEncoder18(); byte[] encodedResponse = encoder.Encode(item.Response); MockQueueItem item2 = new MockQueueItem(MockQueueItem.QueueType.ClientSendResponseNetwork, encodedResponse); item2.Source = item.Response.Source; item2.Destination = item.Response.Destination; Queue.Enqueue(item2); break; // state #7 - client receives response over network case MockQueueItem.QueueType.ClientSendResponseNetwork: Queue.Dequeue(); serverStacks = ServerStacks[item.Destination]; Assert.AreEqual(1, serverStacks.Count); foreach (MockStack s in serverStacks) { s.MyEndPoint.ReceiveData(item); } break; case MockQueueItem.QueueType.ClientSendResponse: break; // state #8 - client application to process response case MockQueueItem.QueueType.ClientSendEmptyMessageNetwork: Queue.Dequeue(); encoder = new Spec.MessageEncoder18(); encodedRequest = encoder.Encode(item.EmptyMessage); item2 = new MockQueueItem(MockQueueItem.QueueType.ServerSendEmptyMessageNetwork, encodedRequest); item2.Source = item.Source; item2.Destination = item.EmptyMessage.Destination; Queue.Enqueue(item2); break; // state #3 - server receives network send case MockQueueItem.QueueType.ServerSendEmptyMessageNetwork: Queue.Dequeue(); serverStacks = ServerStacks[item.Destination]; foreach (MockStack s in serverStacks) { s.MyEndPoint.ReceiveData(item); } break; case MockQueueItem.QueueType.NetworkSend: Queue.Dequeue(); List <MockChannel> channels = ChannelsByEndpoint[item.Destination]; foreach (MockChannel c in channels) { c.ReceiveData(item); } break; default: Assert.Fail("Unknown item in the pump"); break; } return(Queue.Count > 0); }