private void WriteHeader(PacketStream2 stream, EPacketProtoID protoID, byte protoParams) { byte protoIDOffset = (byte)((int)protoID << 4); stream.ResetByteIndex(); stream.WriteBytes(protoIDOffset | protoParams); }
public void ProcessMessageQueue(MessageQueue2 queue, EClientMessageFlow flowType) { if (!queue.hasMessages) { return; } List <Message2> messages = queue.messages; PacketStream2 stream = client.packetStream; Message2 msg; for (int m = 0; m < messages.Count; m++) { msg = messages[m]; stream.ResetByteIndex(); msg.bytes.CopyTo(stream.byteStream, 0); if (ProcessMessage(stream, msg, flowType)) { _messageDiscarded.Add(msg); } } while (_messageDiscarded.Count > 0) { messages.Remove(_messageDiscarded.Pop().Recycle()); } _messageDiscarded.Clear(); }
//////////////////////////////////////////////////////////////////////////////////// private void __HeartBeat(Gear obj) { Log.traceClear(); Log.trace(Utils.GetTime()); PacketStream2 stream = client.packetStream; WriteHeader(stream, EPacketProtoID._00_HEART_BEAT, (byte)Utils.Random(15)); stream.WriteStrings("Hello World"); client.Send(); }
public UnityServer(float ticksPerSecond = 10f, int port = -1, int dataStreamSize = -1, bool autoListens = true) : base(port, dataStreamSize, autoListens) { clientsUnity = new UnityClients(); clientsToForget = new List <UnityClient>(); packetStreamTemp = new PacketStream2(); timeStarted = DateTime.Now; //Hook-up the events: this.OnNewClient += OnNewUnityClient; this.OnReceivedFromClient += OnClientReceivedData; //Set the "ticker" for sending messages back at given intervals: clockTicker = new Clockwork().StartAutoUpdate(ticksPerSecond); clockTicker.AddListener(__ProcessClientMessages); clockTicker.AddGear("Unity Housekeeping").AddListener(__OnCheckClientsAlive); }
private bool ProcessMessage(PacketStream2 stream, Message2 msg, EClientMessageFlow flowType) { bool canDiscard = true; MessageQueue2 outgoing = _messageQueueOut; switch (flowType) { case EClientMessageFlow.INCOMING: byte protoHeader = stream.ReadByte(); byte protoID = (byte)(protoHeader >> 4); byte protoParams = (byte)(protoHeader & 0xf); EPacketProtoID PROTO_ID = (EPacketProtoID)protoID; switch (PROTO_ID) { case EPacketProtoID._00_HEART_BEAT: string heartBeatMessage = stream.ReadString(); trace("heartBeatMessage: " + heartBeatMessage); //Ouff... I think we need another temporary Stream / Bytes to write the pending outgoing messages!!! //outgoing.AddBytes() break; default: trace("Unknown proto-ID: " + PROTO_ID); break; } break; case EClientMessageFlow.OUTGOING: break; } return(canDiscard); }