private void MessagingTick() { foreach (ConcurrentQueue <IncomingServerSessionMessage> incomingMessage in this._incomingMessages) { int count = incomingMessage.Count; for (int peerNo = 0; peerNo < count; ++peerNo) { IncomingServerSessionMessage result = (IncomingServerSessionMessage)null; incomingMessage.TryDequeue(out result); ServersideSession peer = result.Peer; NetworkMessage networkMessage = result.NetworkMessage; try { networkMessage.BeginRead(); byte id = networkMessage.ReadByte(); if (!peer.ContainsMessageHandler(id)) { networkMessage.ResetRead(); peer.OnMessageReceived((INetworkMessageReader)networkMessage); } else { MessageContract messageContract = MessageContract.CreateMessageContract(peer.GetMessageContractType(id)); messageContract.DeserializeFromNetworkMessage((INetworkMessageReader)networkMessage); peer.HandleMessage(messageContract); } } catch (Exception ex) { this.RemovePeer(peerNo); } } } }
public void AddMessageHandler <T>(MessageContractHandlerDelegate <T> handler) where T : MessageContract { MessageContractHandler <T> messageContractHandler = new MessageContractHandler <T>(handler); Type type = typeof(T); byte contractId = MessageContract.GetContractId(type); this.MessageContractTypes.Add(contractId, type); this.MessageHandlers.Add(contractId, (MessageContractHandler)messageContractHandler); }
protected void SendPlainMessage(MessageContract message) { NetworkMessage forWriting = NetworkMessage.CreateForWriting(); forWriting.BeginWrite(); forWriting.Write(message); forWriting.FinalizeWrite(); forWriting.UpdateHeader(); this.Socket.SendMessage(forWriting.MessageBuffer); }
public void HandleNetworkMessage(NetworkMessage networkMessage) { byte key = networkMessage.ReadByte(); Type messageContractType = this.MessageContractTypes[key]; MessageContract messageContract = MessageContract.CreateMessageContract(messageContractType); Debug.Print("Message with id: " + (object)key + " / contract:" + (object)messageContractType + "received and processing..."); messageContract.DeserializeFromNetworkMessage((INetworkMessageReader)networkMessage); this.HandleMessage(messageContract); }
public void SendMessage(MessageContract message) { if (!this.IsActive) { return; } NetworkMessage forWriting = NetworkMessage.CreateForWriting(); forWriting.BeginWrite(); forWriting.Write(message); forWriting.FinalizeWrite(); int dataLength = forWriting.DataLength; forWriting.DataLength = dataLength; forWriting.UpdateHeader(); this.Socket.SendMessage(forWriting.MessageBuffer); }
public static MessageContract CreateMessageContract(Type messageContractType) { MessageContract.InitializeMessageContract(messageContractType); return(MessageContract.MessageContractCreators[messageContractType].Invoke()); }
protected MessageContract() { this._myType = this.GetType(); MessageContract.InitializeMessageContract(this._myType); }
internal static MessageContractCreator GetContractCreator(Type type) { MessageContract.InitializeMessageContract(type); return(MessageContract.MessageContractCreators[type]); }
internal static byte GetContractId(Type type) { MessageContract.InitializeMessageContract(type); return(MessageContract.MessageContracts[type]); }
internal void HandleMessage(MessageContract messageContract) => this._messageContractHandlerManager.HandleMessage(messageContract);
public void HandleMessage(MessageContract messageContract) => this.MessageHandlers[messageContract.MessageId].Invoke(messageContract);