public ITransmissionHandler createTransmissionHandler(int type)
        {
            ITransmissionHandler createdHandler = null;

            switch (type)
            {
            case 3:
                createdHandler = new ConcreteTransmissionHandler(new HandleRemoveUserTransmissionStrategy());
                break;

            case 4:
                createdHandler = new ConcreteTransmissionHandler(new HandleAddUserTransmissionStrategy());
                break;

            case 5:
                createdHandler = new ConcreteTransmissionHandler(new HandleConversationTransmissionStrategy());
                break;

            case 6:
                createdHandler = new ConcreteTransmissionHandler(new HandleMessageTransmissionStrategy());
                break;

            default:
                createdHandler = null;
                break;
            }
            return(createdHandler);
        }
Beispiel #2
0
 /// <summary>
 /// Executed by listener thread.
 /// </summary>
 private void listen()
 {
     try
     {
         int    headerLength = BitConverter.GetBytes(4).Length + 1;
         byte[] headerBytes  = new byte[headerLength];
         ITransmissionHandlerCreator factory = new ConcreteTransmissionHandlerCreator(); //will create context for strategy pattern
         lock (this)
         {
             while (goOn)
             {
                 int bytesReceived = 0;
                 if (socket.Available == 0)
                 {
                     Thread.Sleep(100);
                     continue;
                 }
                 while (bytesReceived < headerLength)
                 {
                     bytesReceived += socket.Receive(headerBytes, bytesReceived, headerLength - bytesReceived, SocketFlags.None);
                 }
                 byte   type          = headerBytes[0];
                 int    messageLength = BitConverter.ToInt32(headerBytes, 1);
                 byte[] inBuffer      = socketFacade.receiveMessage(messageLength);
                 if (type == (byte)1) //received boolean response
                 {
                     responseStatus = (inBuffer[0] == (byte)0) ? false : true;
                     responseReady  = true;
                     Monitor.Pulse(this);
                     Monitor.Wait(this);
                 }
                 else //received transmission of some sort
                 {
                     ITransmissionHandler transmissionHandler = factory.createTransmissionHandler(type); //create strategy pattern context
                     transmissionHandler.handle(this, inBuffer); //thanks to the pattern we don't worry here what transmission exactly it is
                 }
             }
         }
     }
     catch (Exception ex)
     {
         Console.WriteLine("Exception thrown in listener: {0}", ex.Message);
         Console.WriteLine(ex.StackTrace);
     }
 }