Пример #1
0
 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);