コード例 #1
0
        void acceptCompleted(Socket accepted)
        {
            // Send a ConnectionAccepted.

            try
            {
                ClientRepresentation client = new ClientRepresentation(this)
                {
                    ClientSocket = accepted
                };

                connectedClients.Add(client);

                client.MessageReceived += ProcessMessageBytes;
                client.SendBytes(SocketPipeHelper.BuildMessage(MessageType.ConnectionAccepted, null));

                ClientConnected?.Invoke(this);

                client.AwaitBytes();
            }
            finally
            {
                if (!isStopped)
                {
                    serverAccept();
                }
            }
        }
コード例 #2
0
        internal void ProcessMessageBytes(byte[] buffer)
        {
            logger.Info("Message bytes received.");

            IFormatter formatter = new BinaryFormatter();

            MessageType type = SocketPipeHelper.GetMessageType(buffer);

            if (type == MessageType.Message || type == MessageType.BroadcastMessage)
            {
                using (MemoryStream ms = new MemoryStream())
                {
                    ms.Write(buffer, 8, buffer.Length - 8);
                    ms.Position = 0;

                    object o = formatter.Deserialize(ms);

                    if (o is BaseMessage)
                    {
                        ProcessMessage(o as BaseMessage);
                    }
                }
            }
            else if (type == MessageType.ConnectionAccepted)
            {
                Connected?.Invoke();
            }
        }
コード例 #3
0
        public void PushMessage(BaseMessage msg)
        {
            try
            {
                logger.Info($"PushMessage({msg.GetType().Name}) {connectedClients.Count}");

                IFormatter formatter = new BinaryFormatter();

                using (MemoryStream stream = new MemoryStream())
                {
                    formatter.Serialize(stream, msg);

                    byte[] arr = stream.ToArray();

                    byte[] message = SocketPipeHelper.BuildMessage(MessageType.Message, arr);
                    foreach (var client in connectedClients)
                    {
                        client.SendBytes(message);
                    }
                }
            }
            catch (Exception ex)
            {
                LoggerUtil.RecursivelyLogException(logger, ex);
            }
        }
コード例 #4
0
        public void PushMessage(BaseMessage msg)
        {
            logger.Info($"PushMessage({msg.GetType().Name})");

            IFormatter formatter = new BinaryFormatter();

            using (MemoryStream stream = new MemoryStream())
            {
                formatter.Serialize(stream, msg);

                byte[] arr = stream.ToArray();

                byte[] message = SocketPipeHelper.BuildMessage(msg is ClientToClientMessage ? MessageType.BroadcastMessage : MessageType.Message, arr);
                client.SendBytes(message);
            }
        }