예제 #1
0
 internal void RaiseMessageReceived(byte[] msg, KindMessage kindOfSend)
 {
     if (KindOfMessage == KindMessage.Message)
     {
         var handler = MessageReceived;
         if (handler != null)
         {
             handler(this, msg, kindOfSend);
         }
     }
     else if (KindOfMessage == KindMessage.ListClientId)
     {
         if (isServerSocket)
         {
             var handler = MessageReceived;
             if (handler != null)
             {
                 handler(this, msg, kindOfSend);
             }
         }
         else
         {
             this.RaiseReceivedListClientId(msg.ToListOfInt());
         }
     }
     else if (KindOfMessage == KindMessage.ServerReady)
     {
     }
     else if (KindOfMessage == KindMessage.ClientId)
     {
         this.RaiseReceivedClientId(msg.ToInt());
     }
 }
        internal static void SendBytes(this Client client, byte[] msg, KindMessage kind)
        {
            try
            {
                if (msg == null)
                {
                    msg = new byte[0];
                }

                var length = msg.Length;

                if (length > ushort.MaxValue)
                {
                    throw new ArgumentOutOfRangeException();
                }

                byte[] outMsg;
                EnvelopeSend(msg, kind, length, out outMsg);

                lock (client.sendMsg)
                {
                    client.sendMsg.Enqueue(outMsg);
                }

                client.mreBeginSend.SetIfNotNull();
            }
            catch (Exception e)
            {
                client.HandleError(e);
            }
        }
예제 #3
0
 private void client_MessageReceived(Client client, byte[] msg, KindMessage kindOfSend)
 {
     if (msg != null)
     {
         HandleNewMsg(Environment.NewLine + Encoding.UTF8.GetString(msg));
     }
 }
        internal static void EnvelopeSend(byte[] response, KindMessage kindOfSend, int length, out byte[] outMsg)
        {
            outMsg = new byte[length + Const.TotalSizeOfEnvelope];

            outMsg[0] = (byte)kindOfSend;
            Array.Copy(length.ToByte(), 0, outMsg, Const.SizeOfEnvelopeKind, Const.SizeOfEnvelopeLength);
            Array.Copy(response, 0, outMsg, Const.TotalSizeOfEnvelope, length);
        }
예제 #5
0
 private void server_MessageReceived(int id, byte[] msg, KindMessage kindOfSend)
 {
     if (msg != null)
     {
         var text = Encoding.UTF8.GetString(msg);
         text = string.Format("From Client Id {0}: {1}", id, text);
         HandleNewMsg(Environment.NewLine + text);
         if (kindOfSend == KindMessage.Message)
         {
             server.SendAll(text);
         }
     }
 }
예제 #6
0
 internal void RaiseMessageReceived(int ClientId, byte[] msg, KindMessage kindOfSend)
 {
     if (kindOfSend == KindMessage.Message)
     {
         var handler = MessageReceived;
         if (handler != null)
         {
             handler(ClientId, msg, kindOfSend);
         }
     }
     else if (kindOfSend == KindMessage.ListClientId)
     {
         GetClient(ClientId).SendBytes(clients.Keys.ToArrayOfByte(), KindMessage.ListClientId);
     }
 }
예제 #7
0
 private void state_MessageReceived(Client client, byte[] msg, KindMessage kindOfSend)
 {
     RaiseMessageReceived(client.Id, msg, kindOfSend);
 }
예제 #8
0
 internal void Send(byte[] msg, KindMessage kind)
 {
     this.SendBytes(msg, kind);
 }