Ejemplo n.º 1
0
 private void MoveUnit()
 {
     // 이동데이터 한번 앞으로
     lock (movelist)
     {
         if (movelist.Count > 0)
         {
             position = movelist[0];
             movelist.RemoveAt(0);
             JObject json = new JObject();
             json["type"] = NetworkProtocol.Move;
             json["no"]   = no;
             json["x"]    = position.x;
             json["y"]    = position.y;
             json["z"]    = position.z;
             json["q"]    = position.q;
             if (this is User)
             {
                 NetworkSend.SendAllUser(json, (User)this);
             }
             else
             {
                 NetworkSend.SendAllUser(json);
             }
         }
     }
 }
Ejemplo n.º 2
0
 private void MoveUnit()
 {
     // 이동데이터 한번 앞으로, 모든 유저에게 움직인 정보를 전송
     lock (movelist)
     {
         if (movelist.Count > 0)
         {
             // 다음 위치 꺼내오기
             position = movelist[0];
             movelist.RemoveAt(0);
             // 위치정보를 담은 JObject 만들기
             JObject json = new JObject();
             json["type"] = NetworkProtocol.Move;
             json["no"]   = no;
             json["x"]    = position.x;
             json["y"]    = position.y;
             json["z"]    = position.z;
             json["q"]    = position.q;
             // 이 클래스가 User 클래스의 부모 클래스일경우
             if (this is User)
             {
                 NetworkSend.SendAllUser(json, (User)this); // 메세지를 전송하는데, 자기 자신(유저)에게는 전송하지 않는다.
             }
             else
             {
                 NetworkSend.SendAllUser(json); // 모두에게 메세지를 전송한다.
             }
         }
     }
 }
Ejemplo n.º 3
0
        /// <summary>
        /// 이 객체가 대화를 시작합니다.
        /// </summary>
        /// <param name="message"></param>
        /// <param name="Type"></param>
        public void ChatMessage(string message, int Type)
        {
            JObject json = new JObject();

            json["type"]     = NetworkProtocol.Chat;
            json["chattype"] = Type;
            json["no"]       = no;   // 보낸사람의 고유번호
            json["sender"]   = name; // 보낸사람 이름
            json["message"]  = message;
            NetworkSend.SendAllUser(json);
        }
Ejemplo n.º 4
0
        /// <summary>
        /// 해당 유저가 채팅을 시작합니다. 이 함수에서 명령어 구문 분석이 실행됩니다.
        /// </summary>
        /// <param name="message">입력 메세지</param>
        /// <param name="Type">입력 메세지 타입 (ChatType)</param>
        public override void ChatMessage(string message, int Type)
        {
            //Dice
            JObject json = new JObject();

            json["type"] = NetworkProtocol.Chat;

            if (message.IndexOf("/주사위") == 0)
            {
                Random rd = new Random();
                json["chattype"] = ChatType.Notice;
                json["message"]  = name + "(이)가 주사위를 굴렸습니다~!! 주사위가 " + rd.Next(1, 6).ToString() + " 나왔습니다!";
                NetworkSend.SendAllUser(json);
                return;
            }

            //Whisper
            if ((message.IndexOf("/ㅈ ") == 0) || (message.IndexOf("/w ") == 0) || (message.IndexOf("/귓속말 ") == 0))
            {
                string[] Receiver = message.Split(' ');
                //형식이 맞는지 확인
                if (Receiver.Length > 2)
                {
                    for (int i = 3; i < Receiver.Length; i++)
                    {
                        Receiver[2] += " " + Receiver[i];
                    }
                    string receiverID = GachonUser.GetID(Receiver[1]); //Sender가 입력한 이름을 통해 귓속말 대상 ID를 얻음

                    //대상이 접속해있는지 아닌지 확인
                    foreach (User user in User.Items.Values.ToList())
                    {
                        if (user.ID.Equals(receiverID))
                        {
                            json["chattype"] = ChatType.Whisper;
                            json["message"]  = Receiver[2]; //메세지 내용
                            json["no"]       = no;
                            json["sender"]   = name;
                            user.socket.Send(json);

                            json["group"] = "To " + Receiver[1];
                            //json["sender"] = "["+Receiver[1]+"]"+ name; //Sender에게 [Reiever]Sender: Content 로 보이도록
                            this.socket.Send(json);
                            return;
                        }
                    }
                    json["message"] = "[귓속말] 현재 접속해있지 않는 사용자입니다.";
                }
                else
                {
                    json["message"] = "[귓속말] 잘못된 귓속말 형식 입니다. '/w 대상 내용' 으로 입력해 주세요.";
                }
                json["chattype"] = ChatType.System;
                socket.Send(json);
                return;
            }
            // 해당 영역이 그룹의 영역일때
            string ingroup = InGroup();

            if (ingroup != null)
            {
                List <string> idlist = Study.Items[ingroup].Users;
                if (idlist.Contains(ID))
                {
                    json["chattype"] = ChatType.Group;
                    json["message"]  = message;
                    json["no"]       = no;
                    json["sender"]   = name;
                    json["group"]    = ingroup;
                    foreach (User user in User.Items.Values)
                    {
                        if (idlist.Contains(user.ID))
                        {
                            user.socket.Send(json);
                        }
                    }
                    MysqlNode node = new MysqlNode(private_data.mysqlOption, "INSERT INTO group_chat(group_name, student_id, data) VALUES (?group, ?id, ?data)");
                    node["group"] = ingroup;
                    node["id"]    = ID;
                    node["data"]  = message;
                    node.ExecuteInsertQuery();
                }
                else
                {
                    base.ChatMessage(message, Type);
                }
            }
            else
            {
                base.ChatMessage(message, Type);
            }
        }