コード例 #1
0
ファイル: ServerMessageBus.cs プロジェクト: paralin/SuperPool
        /// <summary>
        /// Helper, sends an update with all the *local* clients ids to the server.
        /// </summary>
        bool SendClientsUpdate(int socketId)
        {
            Console.WriteLine("Send clients update: " + socketId);
            ClientsListMessage message = new ClientsListMessage();

            foreach (MessageBusClient client in Clients)
            {
                message.Ids.Add(client.Id);
                message.AddType(client.GetType(), client.OptionalSourceType);
            }
            lock (_syncRoot){
                foreach (ClientId id in _remoteClientsTypes.Keys)
                {
                    //Console.WriteLine("Client sent: "+id.ToString());
                    //if (_remoteClientsNetIds.ContainsKey(socketId) && _remoteClientsNetIds[socketId].Contains(id))
                    //    continue;
                    message.Ids.Add(id);
                    message.AddType(_remoteClientsTypes[id], null);
                }
            }
            foreach (var sourceTypes in message.SourcesTypes)
            {
                if (sourceTypes == null)
                {
                    continue;
                }
                foreach (string type in sourceTypes)
                {
                    Console.WriteLine("Source type: " + type);
                }
            }

            return(ToClient(socketId, message, null));
        }
コード例 #2
0
        protected internal void AddConnection(ClientDataset clientDataset)
        {
            СlientSignInOutMessage(clientDataset.clientInfo.Name, clientDataset.clientInfo.Id, 1);
            clientDatasets.Add(clientDataset);
            Console.WriteLine("AddConnection");
            ClientsListMessage clientsListMessage = CreateClientListMessage(clientDataset.clientInfo.Id);

            clientDataset.clientObject.client.Send(serializer.MakeSerialize(clientsListMessage));
        }
コード例 #3
0
ファイル: ClientMessageBus.cs プロジェクト: paralin/SuperPool
        /// <summary>
        /// Helper, sends an update with all the local clients ids to the server.
        /// </summary>
        bool SendClientsUpdate()
        {
            ClientsListMessage message = new ClientsListMessage();

            foreach (MessageBusClient client in Clients)
            {
                message.Ids.Add(client.Id);
                message.AddType(client.GetType(), client.OptionalSourceType);
            }

            return(ToServer(message, null));
        }
コード例 #4
0
        public ClientsListMessage CreateClientListMessage(int Id)
        {
            List <ClientInfo> clientInfoList = new List <ClientInfo>();

            foreach (ClientDataset clientDataset in clientDatasets)
            {
                clientInfoList.Add(clientDataset.clientInfo);
            }
            ClientsListMessage clientsListMessage = new ClientsListMessage(DateTime.Now, servIp, port, clientInfoList, Id);

            return(clientsListMessage);
        }
コード例 #5
0
        public void SendList()
        {
            ClientsListMessage message = new ClientsListMessage();

            foreach (var p in usersList)
            {
                message.Content += p.Name + " ";
            }
            StreamWriter writer;

            foreach (var o in usersList)
            {
                writer = new StreamWriter(o.stream);
                writer.Write(message.ToFullString());
                writer.WriteLine();
                writer.Flush();
            }
        }
コード例 #6
0
ファイル: ClientMessageBus.cs プロジェクト: paralin/SuperPool
        void _messageClient_MessageReceivedEvent(SocketCommunicator helper, object message)
        {
            if (message is EnvelopeMessage)
            {
                EnvelopeMessage envelopeMessage = (EnvelopeMessage)message;

                // Remove the remote message bus index association.
                envelopeMessage.Sender.LocalMessageBusIndex = ClientId.InvalidMessageBusClientIndex;

                foreach (ClientId id in envelopeMessage.Receivers)
                {
                    // Decode the id.
                    id.LocalMessageBusIndex = base.GetClientIndexByGuid(id.Guid);

                    if (id.IsMessageBusIndexValid)
                    {
                        // Assign as a part of the local bus.
                        id.MessageBus = this;
                        if (DoSendToClient(envelopeMessage.Sender, id, envelopeMessage.Envelope, null) != SendToClientResultEnum.Success)
                        {
#if Matrix_Diagnostics
                            InstanceMonitor.OperationError(string.Format("Failed to accept envelope message [{0}].", envelopeMessage.ToString()));
#endif
                        }
                    }
                    else
                    {
#if Matrix_Diagnostics
                        InstanceMonitor.OperationError(string.Format("Failed to accept envelope message [{0}] due to unrecognized receiver id.", envelopeMessage.ToString()));
#endif
                    }
                }
            }
            else if (message is ClientsListMessage)
            {// Received client update from server.
                ClientsListMessage listMessage = (ClientsListMessage)message;

                int jef = 0;
                foreach (var client in listMessage.Ids)
                {
                    Console.WriteLine("Incoming client id: " + client + " Source type: " + listMessage.SourcesTypes[jef]);
                    jef++;
                }

                List <ClientId> existingIds = new List <ClientId>();
                lock (_syncRoot)
                {
                    existingIds.AddRange(_originalServerClientsHotSwap.Values);

                    _originalServerClientsHotSwap.Clear();
                    _originalServerClientsTypesHotSwap.Clear();
                    _originalServerClientsSourcesTypesHotNamesSwap.Clear();

                    // Preprocess Ids, by assigning them new indeces and adding to the local message bus register.
                    for (int i = 0; i < listMessage.Ids.Count; i++)
                    {
                        // Add an original copy to the list.
                        _originalServerClientsHotSwap.Add(listMessage.Ids[i].Guid, listMessage.Ids[i]);

                        _originalServerClientsTypesHotSwap.Add(listMessage.Ids[i].Guid, listMessage.Types[i]);
                        _originalServerClientsSourcesTypesHotNamesSwap.Add(listMessage.Ids[i].Guid, listMessage.SourcesTypes[i]);

                        // Add the client to a new spot.
                        //_clientsHotSwap.Add(null);
                        //int messageBusIndex = _clientsHotSwap.Count - 1;

                        // This type of assignment will also work with multiple entries.
                        // This performs an internal hotswap.
                        //_guidToIndexHotSwap[id.Guid] = messageBusIndex;

                        // Also add to this classes collection.
                        //_localToRemoteId[messageBusIndex] = id;
                    }
                }

                foreach (ClientId id in listMessage.Ids)
                {
                    existingIds.Remove(id);
                    RaiseClientAddedEvent(id);
                }

                // Raise for any that were removed.
                foreach (ClientId id in existingIds)
                {
                    RaiseClientRemovedEvent(id, true);
                }
            }
            else if (message is RequestClientListUpdateMessage)
            {
                SendClientsUpdate();
            }
            else if (message is ClientUpdateMessage)
            {
                ClientUpdateMessage updateMessage = (ClientUpdateMessage)message;

                if (_originalServerClientsHotSwap.ContainsKey(updateMessage.ClientId.Guid))
                {
                    RaiseClientUpdateEvent(updateMessage.ClientId);
                }
                else
                {
#if Matrix_Diagnostics
                    InstanceMonitor.OperationError(string.Format("Failed to raise update event for client [{0}], since client not found.", updateMessage.ClientId.ToString()));
#endif
                }
            }
            else if (message is StateUpdateMessage)
            {
                RaiseCounterPartyUpdateEvent("Server", ((StateUpdateMessage)message).State.ToString());
            }
            else
            {
#if Matrix_Diagnostics
                InstanceMonitor.Warning(string.Format("Message [{0}] not recognized.", message.GetType().Name));
#endif
            }
        }
コード例 #7
0
ファイル: ServerMessageBus.cs プロジェクト: paralin/SuperPool
        void _server_ClientMessageReceivedEvent(SocketMessageServer server, SocketCommunicatorEx client, object message)
        {
            ServerAccessControl accessControl = AccessControl;

            // Check security first.
            if (accessControl != null && message is AccessMessage == false)
            {
                if (accessControl.IsAllowed(ObtainClientAccessControl(client.Id)) == false)
                {
#if Matrix_Diagnostics
                    InstanceMonitor.Info("Message [" + message.ToString() + "] from client [" + client.ToString() + "] not allowed due to access control.", TracerItem.PriorityEnum.Medium);
#endif
                    return;
                }
            }

            if (message is EnvelopeMessage)
            {// Envelope user message.
                EnvelopeMessage envelopeMessage = (EnvelopeMessage)message;

                // Remove the remote message bus index association.
                envelopeMessage.Sender.LocalMessageBusIndex = ClientId.InvalidMessageBusClientIndex;

                foreach (ClientId id in envelopeMessage.Receivers)
                {
                    // Assign the id as local id, if it is, otherwise skip it.
                    id.LocalMessageBusIndex = base.GetClientIndexByGuid(id.Guid);
                    if (id.IsMessageBusIndexValid)
                    {
                        id.MessageBus = this;
                        if (DoSendToClient(envelopeMessage.Sender, id, envelopeMessage.Envelope, null) != SendToClientResultEnum.Success)
                        {
#if Matrix_Diagnostics
                            InstanceMonitor.OperationError(string.Format("Failed to accept envelope message [{0}].", envelopeMessage.ToString()));
#endif
                        }
                    }
                    else
                    {
#if Matrix_Diagnostics
                        InstanceMonitor.OperationError(string.Format("Failed to accept envelope message [{0}] due unrecognized receiver id.", envelopeMessage.ToString()));
#endif
                    }
                }
            }
            else if (message is ClientsListMessage)
            {// Message bus system message.
                ClientsListMessage updateMessage = (ClientsListMessage)message;
                for (int i = 0; i < updateMessage.Ids.Count; i++)
                {
                    RegisterClientId(client.Id, updateMessage.Ids[i], updateMessage.Types[i], updateMessage.SourcesTypes[i]);
                }
            }
            else if (message is RequestClientListUpdateMessage)
            {
                SendClientsUpdate(client.Id);
            }
            else if (message is ClientUpdateMessage)
            {
                ClientUpdateMessage updateMessage = (ClientUpdateMessage)message;

                bool validClient;
                lock (_syncRoot)
                {
                    validClient = _remoteClientNetId.ContainsKey(updateMessage.ClientId);
                }

                if (validClient)
                {
                    RaiseClientAddedEvent(updateMessage.ClientId);
                }
                else
                {
#if Matrix_Diagnostics
                    InstanceMonitor.OperationError(string.Format("Failed to raise update event for client [{0}], since client not found.", updateMessage.ClientId.ToString()));
#endif
                }
            }
            else if (message is AccessMessage)
            {
                ClientAccessControl control = ObtainClientAccessControl(client.Id);
                if (control != null)
                {
                    control.Update(message as AccessMessage);
                }
            }
            else if (message is StateUpdateMessage)
            {
                RaiseCounterPartyUpdateEvent("Client:" + client.Id.ToString(), ((StateUpdateMessage)message).State.ToString());
            }
            else
            {
#if Matrix_Diagnostics
                InstanceMonitor.Warning(string.Format("Message [{0}] not recognized.", message.GetType().Name));
#endif
            }
        }
コード例 #8
0
 public void HandleReceivedMessages(ChatHelpingLibrary.Message message)
 {
     if (message is ChatMessage)
     {
         ChatMessage chatMessage = (ChatMessage)message;
         if (chatMessage.ReceiverId == 0)
         {
             if (selectedDialogId != 0)
             {
                 Action action = delegate
                 {
                     NewMessagelabel.Text = "Вам пришло новое сообщение в Общий чат";
                     NewMessageChatId     = 0;
                 };
                 if (InvokeRequired)
                 {
                     Invoke(action);
                 }
                 else
                 {
                     action();
                 }
             }
             ClientInfo findClientInfoList = clientsInfoList.Find(f => f.Id == chatMessage.ReceiverId);
             int        index = clientsInfoList.IndexOf(findClientInfoList);
             clientsInfoList[index].MessageHistory.Add(chatMessage);
             if (chatMessage.ReceiverId == selectedDialogId)
             {
                 RedrawOther(chatMessage.SenderName, chatMessage.Content, chatMessage.DateTime);
                 if (chatMessage.IsAnyFiles)
                 {
                     foreach (FileInMessage fileInMessage in chatMessage.FilesInMessageList)
                     {
                         RedrawFileInDialogPanel(chatMessage.SenderName + "отправил файл", fileInMessage.fileName, chatMessage.DateTime, fileInMessage.fileID);
                     }
                 }
             }
         }
         else
         {
             if (chatMessage.SenderId != selectedDialogId)
             {
                 Action action = delegate
                 {
                     NewMessagelabel.Text = "Вам пришло новое сообщение от " + chatMessage.SenderName;
                     NewMessageChatId     = chatMessage.SenderId;
                 };
                 if (InvokeRequired)
                 {
                     Invoke(action);
                 }
                 else
                 {
                     action();
                 }
             }
             ClientInfo findClientInfoList = clientsInfoList.Find(f => f.Id == chatMessage.SenderId);
             int        index = clientsInfoList.IndexOf(findClientInfoList);
             clientsInfoList[index].MessageHistory.Add(chatMessage);
             if (chatMessage.SenderId == selectedDialogId)
             {
                 RedrawOther(chatMessage.SenderName, chatMessage.Content, chatMessage.DateTime);
                 if (chatMessage.IsAnyFiles)
                 {
                     foreach (FileInMessage fileInMessage in chatMessage.FilesInMessageList)
                     {
                         RedrawFileInDialogPanel(chatMessage.SenderName + "отправил файл", fileInMessage.fileName, chatMessage.DateTime, fileInMessage.fileID);
                     }
                 }
             }
         }
     }
     if (message is ClientsListMessage)
     {
         ClientsListMessage clientsListMessage = (ClientsListMessage)message;
         clientsInfoList    = clientsListMessage.clientInfoList;
         currentClient.MyId = clientsListMessage.YourId;
         RefreshOnlineListBox();
     }
     if (message is ActionWithClientMessage)
     {
         ActionWithClientMessage actionWithClientMessage = (ActionWithClientMessage)message;
         if (actionWithClientMessage.ActionType == 1)
         {
             ClientInfo clientInfo = new ClientInfo();
             clientInfo.Id   = actionWithClientMessage.ClientId;
             clientInfo.Name = actionWithClientMessage.ClientName;
             clientsInfoList.Add(clientInfo);
         }
         else if (actionWithClientMessage.ActionType == 0)
         {
             var removeValue = clientsInfoList.First(x => x.Id == actionWithClientMessage.ClientId);
             clientsInfoList.Remove(removeValue);
         }
         RefreshOnlineListBox();
     }
 }
コード例 #9
0
 public void HandleReceivedMessages(ChatHelpingLibrary.Message message)
 {
     if (message is ChatMessage)
     {
         ChatMessage chatMessage = (ChatMessage)message;
         if (chatMessage.ReceiverId == 0)
         {
             if (selectedDialogId != 0)
             {
                 NewMessagelabel.Text = "Вам пришло новое сообщение в Общий чат";
                 NewMessageChatId     = 0;
             }
             ClientInfo findClientInfoList = clientsInfoList.Find(f => f.Id == chatMessage.ReceiverId);
             int        index = clientsInfoList.IndexOf(findClientInfoList);
             clientsInfoList[index].MessageHistory.Add(chatMessage);
             if (chatMessage.ReceiverId == selectedDialogId)
             {
                 RedrawOther(chatMessage.senderName, chatMessage.Content, chatMessage.dateTime);
             }
         }
         else
         {
             if (chatMessage.SenderId != selectedDialogId)
             {
                 NewMessagelabel.Text = "Вам пришло новое сообщение от " + chatMessage.senderName;
                 NewMessageChatId     = chatMessage.SenderId;
             }
             ClientInfo findClientInfoList = clientsInfoList.Find(f => f.Id == chatMessage.SenderId);
             int        index = clientsInfoList.IndexOf(findClientInfoList);
             clientsInfoList[index].MessageHistory.Add(chatMessage);
             if (chatMessage.SenderId == selectedDialogId)
             {
                 RedrawOther(chatMessage.senderName, chatMessage.Content, chatMessage.dateTime);
             }
         }
     }
     if (message is ClientsListMessage)
     {
         ClientsListMessage clientsListMessage = (ClientsListMessage)message;
         clientsInfoList    = clientsListMessage.clientInfoList;
         currentClient.MyId = clientsListMessage.YourId;
         RefreshOnlineListBox();
     }
     if (message is ActionWithClientMessage)
     {
         ActionWithClientMessage actionWithClientMessage = (ActionWithClientMessage)message;
         if (actionWithClientMessage.ActionType == 1)
         {
             ClientInfo clientInfo = new ClientInfo();
             clientInfo.Id   = actionWithClientMessage.ClientId;
             clientInfo.Name = actionWithClientMessage.ClientName;
             clientsInfoList.Add(clientInfo);
         }
         else if (actionWithClientMessage.ActionType == 0)
         {
             var removeValue = clientsInfoList.First(x => x.Id == actionWithClientMessage.ClientId);
             clientsInfoList.Remove(removeValue);
         }
         RefreshOnlineListBox();
     }
 }