Exemple #1
0
 public void Send(MessageFromServer outgoingChat)
 {
     foreach (var user in Users)
     {
         user.Connection.Send(outgoingChat.ToByteArray());
     }
 }
Exemple #2
0
        public bool Registration(string username, string password)
        {
            MessageToServer message = new MessageToServer
            {
                Command  = CommandToServer.ASK_REGISTRATION,
                Username = username,
                Password = password
            };

            byte[] bytes = message.EncodeMessage();
            _sender.Send(bytes);
            bytes = new byte[3072];
            _sender.Receive(bytes);
            MessageFromServer received = MessageFromServer.DecodeMessage(bytes);

            if (received.Command == CommandFromServer.ACCEPTED)
            {
                UserInfo.Id       = received.Id;
                UserInfo.Name     = received.Name;
                UserInfo.Username = username;
                return(true);
            }
            else
            {
                return(false);
            }
        }
Exemple #3
0
        internal void Reject(Socket handler)
        {
            MessageFromServer message = new MessageFromServer()
            {
                Command = CommandFromServer.REJECTED
            };

            handler.Send(message.EncodeMessage());
        }
Exemple #4
0
        internal void Accept(Socket handler)
        {
            MessageFromServer message = new MessageFromServer()
            {
                Command = CommandFromServer.ACCEPTED
            };

            handler.Send(message.EncodeMessage());
        }
Exemple #5
0
        internal void SearchContacts(MessageToServer receivedMessage, Socket handler)
        {
            MessageFromServer message = new MessageFromServer
            {
                Users = _database.SearchUsers(receivedMessage.Name)
            };

            handler.Send(message.EncodeMessage());
        }
Exemple #6
0
        internal void GetContacts(MessageToServer receivedMessage, Socket handler)
        {
            MessageFromServer message = new MessageFromServer
            {
                Users = _database.SelectContacts(receivedMessage.Id)
            };

            handler.Send(message.EncodeMessage());
        }
Exemple #7
0
        internal void LoadMessages(MessageToServer receivedMessage, Socket handler)
        {
            MessageFromServer message = new MessageFromServer
            {
                Messages = _database.SelectMessages(receivedMessage.Id, receivedMessage.TargetId)
            };

            handler.Send(message.EncodeMessage());
        }
Exemple #8
0
        /// <summary>
        /// Called when a command from player arrives. Login and register requests are already handled by the GCC system.
        /// </summary>
        /// <param name="context">Context of the message. See more at Context Serialization in our online documentation.</param>
        /// <param name="command">Message class implementing IGameCommand</param>
        /// <param name="playerId">Player who sends the command. GCC has filtered unauthorized or malicious requests before calling this method.</param>
        public override void OnCommand(ulong connectionId, short context, IGameCommand command) //ulong connectionId, short context, IGameCommand command
        {
            switch (context)
            {
            case NetworkCommands.PLAYER_CHARACTER_STATE_CHANGE:
                PlayersInGame[((PlayerCharacter)command).playerId].UpdateState((PlayerCharacter)command, false);
                NotifyStateChanged(PlayersInGame[((PlayerCharacter)command).playerId]);
                break;

            case NetworkCommands.GET_AREA:

                SendInitArea(connectionId);
                foreach (PlayerCharacter plr in PlayersInGame.Values.ToList())
                {
                    if (connectionId == plr.connectionId)
                    {
                        plr.isInGame = true;
                    }
                }
                break;

            case NetworkCommands.MESSAGE_SEND:
                string            sender = GetMessageSender(connectionId);
                MessageFromServer curr   = new MessageFromServer()
                {
                    Sender = sender, Msg = ((Message)command).Msg
                };
                command = curr;
                //Message curr = (Message)command;
                Console.WriteLine(curr.Msg);
                foreach (var pl in PlayersInGame)
                {
                    List <ulong> players = new List <ulong>();

                    foreach (var plr in PlayersInGame)
                    {
                        players.Add(plr.Value.connectionId);
                    }

                    SendToMultipleConnections(NetworkCommands.MESSAGE_RECIEVE, command, players);

                    Console.WriteLine("Message send back to clients!");
                }

                break;

            default:
                throw new InvalidOperationException(string.Format("Received not supported command:{0} context:{1}, connectionId:{2}",
                                                                  command, context, connectionId));
            }
        }
Exemple #9
0
        public void AddUser(User newUser)
        {
            //send a join message to the room
            var userJoinBroadcast = new MessageFromServer();

            userJoinBroadcast.UserAction = new MessageFromServer.Types.UserAction
            {
                Name       = newUser.Name,
                ActionType = ActionType.Join
            };
            Send(userJoinBroadcast);

            Users.Add(newUser);
        }
Exemple #10
0
        public void RemoveUser(User leavingUser)
        {
            Users.Remove(leavingUser);
            //broadcast to room that the user left
            var userLeaveBroadcast = new MessageFromServer();

            userLeaveBroadcast.UserAction = new MessageFromServer.Types.UserAction
            {
                Name       = leavingUser.Name,
                ActionType = ActionType.Leave
            };

            Send(userLeaveBroadcast);
        }
Exemple #11
0
        public List <Contact> SearchContacts(string search)
        {
            MessageToServer message = new MessageToServer
            {
                Command = CommandToServer.SEARCH_CONTACTS,
                Name    = search
            };

            byte[] bytes = message.EncodeMessage();
            _sender.Send(bytes);
            bytes = new byte[3072];
            _sender.Receive(bytes);
            MessageFromServer received = MessageFromServer.DecodeMessage(bytes);

            return(received.Users);
        }
Exemple #12
0
        public List <Contact> Contacts(int id)
        {
            MessageToServer message = new MessageToServer
            {
                Command = CommandToServer.GET_CONTACTS,
                Id      = id
            };

            byte[] bytes = message.EncodeMessage();
            _sender.Send(bytes);
            bytes = new byte[3072];
            _sender.Receive(bytes);
            MessageFromServer received = MessageFromServer.DecodeMessage(bytes);

            return(received.Users);
        }
        /// <summary>
        /// Get message from server
        /// </summary>
        /// <param name="msg"></param>
        public string GetMsg()
        {
            byte[] receivedBytes = new byte[128];
            var    size          = 0;
            var    serverAnswer  = new StringBuilder();

            do
            {
                size = tcpSocket.Receive(receivedBytes);
                serverAnswer.Append(Encoding.UTF8.GetString(receivedBytes, 0, size));
            } while (tcpSocket.Available > 0);

            MessageFromServer?.Invoke(serverAnswer.ToString());
            tcpSocket.Shutdown(SocketShutdown.Both);
            tcpSocket.Close();
            return(serverAnswer.ToString());
        }
Exemple #14
0
        internal List <Message> GetMessages(int id)
        {
            MessageToServer message = new MessageToServer
            {
                Command  = CommandToServer.GET_MESSAGES,
                Id       = UserInfo.Id,
                TargetId = id
            };

            byte[] bytes = message.EncodeMessage();
            _sender.Send(bytes);
            bytes = new byte[3072];
            _sender.Receive(bytes);
            MessageFromServer received = MessageFromServer.DecodeMessage(bytes);

            return(received.Messages);
        }
Exemple #15
0
        public void OnSocketMessage(IWebSocketConnection connection, byte[] data)
        {
            //if user has already logged in
            if (joinedUsers.ContainsKey(connection))
            {
                var message = MessageToServer.Parser.ParseFrom(data);
                var user    = joinedUsers[connection];

                //if message is of type Chat
                if (message.MessageCase == MessageToServer.MessageOneofCase.ChatToServer)
                {
                    var outgoingChat = new MessageFromServer();
                    outgoingChat.ChatFromServer = new MessageFromServer.Types.Chat
                    {
                        Name = user.Name,
                        Trip = user.Trip,
                        Text = message.ChatToServer.Text
                    };
                    Log.LogInfo($"{user.Name} @{user.Room.Name} {user.Trip} : {message.ChatToServer}");

                    //send message to all users in that person's room
                    joinedUsers[connection].Room.Send(outgoingChat);
                }
            }
            else
            {
                //this is a new user joining for the first time
                var joinMessage = Join.Parser.ParseFrom(data);

                //the room the the new user is joining
                var room    = GetRoom(joinMessage.Room);
                var newUser = new User(connection, joinMessage.Name, joinMessage.Password, GetRoom(joinMessage.Room));
                joinedUsers.Add(connection, newUser);
                room.AddUser(newUser);

                //send a success response back to the new client
                var joinResponse = new JoinResponse {
                    Success = new JoinResponseSuccessful()
                };
                joinResponse.Success.OnlineUsers.Add(room.Users.Select(roomUser => roomUser.Name).ToList());
                Console.WriteLine("size: " + joinResponse.CalculateSize());
                connection.Send(joinResponse.ToByteArray());

                Log.LogInfo($"{newUser.Name} @ {newUser.Room.Name}  {newUser.Trip} joined");
            }
        }
Exemple #16
0
        internal void Authorize(MessageToServer receivedMessage, Socket handler)
        {
            User user = _database.SelectOneUser(receivedMessage.Username);

            if (user != null)
            {
                if (user.Password == receivedMessage.Password)
                {
                    _connectedUsers.Add(receivedMessage.Username, handler);
                    MessageFromServer message = new MessageFromServer()
                    {
                        Command = CommandFromServer.ACCEPTED,
                        Id      = user.Id,
                        Name    = user.Name
                    };
                    handler.Send(message.EncodeMessage());
                    return;
                }
            }
            Reject(handler);
        }
Exemple #17
0
        internal void Register(MessageToServer receivedMessage, Socket handler)
        {
            User user = _database.SelectOneUser(receivedMessage.Username);

            if (user != null)
            {
                Reject(handler);
            }
            else
            {
                _connectedUsers.Add(receivedMessage.Username, handler);
                user = new User(receivedMessage.Username, receivedMessage.Password, receivedMessage.Username);
                _database.Insert(user);
                user = _database.SelectOneUser(user.Username);
                MessageFromServer message = new MessageFromServer()
                {
                    Command = CommandFromServer.ACCEPTED,
                    Id      = user.Id,
                    Name    = user.Name
                };
                handler.Send(message.EncodeMessage());
            }
        }
    private void Update()
    {
        if (msgToProcess != null)
        {
            if (!(msgToProcess.showStore) && (msgToProcess.message != null))
            {
                DialogCanvasController.RequestStatusPrompt(msgToProcess.title, msgToProcess.message, () => {});
            }

            if ((msgToProcess.showStore) && (msgToProcess.message != null))
            {
                DialogCanvasController.RequestConfirmationPrompt(msgToProcess.title, msgToProcess.message,
                                                                 (response) =>
                {
                    if (response)
                    {
                        DialogCanvasController.RequestStore(PF_GameData.StandardStores[0]);
                    }
                }
                                                                 );
            }
        }
        msgToProcess = null;
    }
 private void HandleOnMessageToPlayer(MessageFromServer msg)
 {
     msgToProcess = msg;
 }
        void Listen_server(object socket)
        {
            Socket connectionSocket = socket as Socket;

            while (true)
            {
                try
                {
                    object serverMessage;
                    {
                        byte[] serverData = new byte[10000];
                        if (connectionSocket.Receive(serverData) == 0)
                        {
                            Console.WriteLine("00000000");
                            return;
                        }
                        serverMessage = Functions.Deserialize(serverData);
                        Console.WriteLine("Получен ответ");
                    }
                    if (serverMessage is MessageFromServer)
                    {
                        MessageFromServer message = (serverMessage as MessageFromServer);
                        if (message.Message.IndexOf("Пользователь") != -1)
                        {
                            Dispatcher.Invoke(() =>
                            {
                                if (!OnlineAndAllCheckBox.IsChecked.Value)
                                {
                                    _getUsersOnline.BeginInvoke(null, null);
                                }
                            });
                        }
                        else
                        {
                            MessageBox.Show(message.Message);
                        }
                        Console.WriteLine("Пришло простое сообщение от сервера");
                    }
                    if (serverMessage is GetUsersOnline)
                    {
                        GetUsersOnline usersInform = serverMessage as GetUsersOnline;
                        Console.WriteLine("Пришёл список пользователей");
                        Dispatcher.Invoke(() =>
                        {
                            if (OnlineAndAllCheckBox.IsChecked.Value)
                            {
                                return;
                            }
                            UsersListBox.Items.Clear();
                            foreach (AccountInformation t in usersInform.AccountsInformation)
                            {
                                UsersListBox.Items.Add(new Correspondence(t));
                            }
                        });
                    }
                    if (serverMessage is GetMessages)
                    {
                        Console.WriteLine("Пришла переписка с пользователем");
                        Dispatcher.Invoke(() =>
                        {
                            listMessagesStackPanel.Children.Clear();
                            foreach (Message message in (serverMessage as GetMessages).Messages)
                            {
                                DrawingMessage(message);
                                message.WhetherRead = true;
                                Functions.SerializeAndSend(message, _connectionSocket);
                            }
                        });
                    }
                    if (serverMessage is Message)
                    {
                        Message message = (serverMessage as Message);
                        Console.WriteLine("Сообщение: " + message.TextMessage);
                        Dispatcher.Invoke(() =>
                        {
                            Correspondence correspondence1 = UsersListBox.SelectedItem as Correspondence;
                            if (correspondence1 != null && correspondence1.Interlocutor.Id == message.SenderId)
                            {
                                DrawingMessage(message);
                                //прочитано сообщение
                            }
                            else
                            {
                                for (int index = 0; index < UsersListBox.Items.Count; index++)
                                {
                                    Correspondence correspondence = (UsersListBox.Items[index] as Correspondence);
                                    if (correspondence.Interlocutor.Id != message.SenderId)
                                    {
                                        continue;
                                    }
                                    correspondence.NumberOfUnreadMessages++;
                                    //usersOnlineListBox.Items.Insert(index, correspondence);
                                }
                                UsersListBox.UpdateLayout();
                            }
                        });
                    }
                    if (serverMessage is GetAllUsers)
                    {
                        GetAllUsers usersInform = (serverMessage as GetAllUsers);
                        Console.WriteLine("Пришёл список пользователей");
                        Dispatcher.Invoke(() =>
                        {
                            UsersListBox.Items.Clear();
                            foreach (AccountInformation t in usersInform.AccountsInformation)
                            {
                                UsersListBox.Items.Add(new Correspondence(t));
                            }
                        });
                    }
                    if (serverMessage is UserDisconnect)
                    {
                        UserDisconnect ud = (serverMessage as UserDisconnect);
                        Dispatcher.Invoke(() =>
                        {
                            if (!OnlineAndAllCheckBox.IsChecked.Value)
                            {
                                for (int i = 0; i < UsersListBox.Items.Count; i++)
                                {
                                    if ((UsersListBox.Items[i] as Correspondence).Interlocutor.Id ==
                                        ud.ThisAccountInforamtion.Id)
                                    {
                                        UsersListBox.Items.RemoveAt(i);
                                    }
                                }
                            }
                        });
                    }
                }
                catch (Exception ex)
                {
                    //connectionSocket.Disconnect(false);
                    Console.WriteLine(ex.Message + "\n" + ex.StackTrace);
                    return;
                }
            }
        }