void packet_timer_Elapsed(object sender, EventArgs e)
        {
            if (client == null)
            {
                return;
            }

            light.net.Client.BufferPacketData data = client.ReadData();
            while (data != null)
            {
                switch (data.PacketID)
                {
                case light.net.Client.PACKET_ID_DISCONNECTED:
                {
                    on_disconnect();
                }
                break;

                case (int)PACKET_S2C.ENTER:
                {
                    var enter = PACKET.ENTER.GetRootAsENTER(new FlatBuffers.ByteBuffer(data.BufferData));

                    textBox_joined_channel.Text = data.Index.ToString();

                    if (user_index == enter.USERINDEX)
                    {
                        log(enter.USERNAME + " entered channel.");
                    }
                    else
                    {
                        send_position();
                    }

                    Button btn = new Button();
                    btn.Text     = string.Format("{0}", enter.USERINDEX);
                    btn.Size     = new Size(button_width, button_height);
                    btn.Location = new Point(0, 0);
                    btn.Visible  = false;        // 안보이게 우선 만들어~

                    //델리게이트를 통해 버튼 이벤트 생성
                    //btn.Click += new EventHandler(btn_Click);

                    groupBox_users_location.Controls.Add(btn);

                    buttons.Add(enter.USERINDEX, btn);
                    listBox_users.Items.Add(enter.USERNAME + "_" + enter.USERINDEX);
                }
                break;

                case (int)PACKET_S2C.LEAVE:
                {
                    var leave = PACKET.LEAVE.GetRootAsLEAVE(new FlatBuffers.ByteBuffer(data.BufferData));

                    textBox_joined_channel.Text = "";

                    if (user_index == leave.USERINDEX)
                    {
                        listBox_users.Items.Clear();
                        buttons.Clear();
                        groupBox_users_location.Controls.Clear();

                        log(leave.USERNAME + " leave channel.");
                    }
                    else
                    {
                        log(leave.USERNAME + " left channel.");
                        listBox_users.Items.Remove(leave.USERNAME + "_" + leave.USERINDEX);

                        Button btn = buttons[leave.USERINDEX];

                        groupBox_users_location.Controls.Remove(btn);

                        buttons.Remove(leave.USERINDEX);
                    }
                }
                break;

                case (int)PACKET_S2C.BROADCAST:
                {
                    var    broadcast = PACKET.BROADCAST.GetRootAsBROADCAST(new FlatBuffers.ByteBuffer(data.BufferData));
                    Button btn       = buttons[broadcast.USERINDEX];

                    try
                    {
                        var p = JsonConvert.DeserializeObject <POSITION>(broadcast.MESSAGE);
                        btn.Location = new Point((int)p.X, (int)p.Y);
                        btn.Visible  = true;
                    }
                    catch (Exception ex)
                    {
                        log("exception: " + ex + " message:" + broadcast.MESSAGE);
                    }
                }
                break;
                }

                data = client.ReadData();
            }
        }
        void packet_timer_Elapsed(object sender, EventArgs e)
        {
            if (before_update_time != 0)
            {
                long nowTime = System.DateTime.Now.Ticks;
                update_time_gap = (nowTime - before_update_time) / 10000.0f;
            }

            before_update_time = System.DateTime.Now.Ticks;

            if (client == null)
            {
                return;
            }

            light.net.Client.BufferPacketData data = client.ReadData();
            while (data != null)
            {
                switch (data.PacketID)
                {
                case light.net.Client.PACKET_ID_DISCONNECTED:
                {
                    on_disconnect();
                }
                break;

                case (int)PACKET_S2C.JOIN:
                {
                    var join = PACKET.RES_JOIN.GetRootAsRES_JOIN(new FlatBuffers.ByteBuffer(data.BufferData));

                    textBox_joined_channel.Text = data.Index.ToString();

                    PACKET.PLAYER_DATA player = join.DATA;
                    add_player(player);

                    log(player.NAME + " entered channel.");

                    for (int n = 0; n < join.PLAYERDATASLength; ++n)
                    {
                        PACKET.PLAYER_DATA the_other = join.GetPLAYERDATAS(n);
                        add_player(the_other);
                    }
                }
                break;

                case (int)PACKET_S2C.JOINED:
                {
                    var joined = PACKET.JOINED.GetRootAsJOINED(new FlatBuffers.ByteBuffer(data.BufferData));

                    textBox_joined_channel.Text = data.Index.ToString();

                    PACKET.PLAYER_DATA player = joined.DATA;
                    add_player(player);

                    log(player.NAME + " entered channel.");
                }
                break;

                case (int)PACKET_S2C.LEAVE:
                {
                    var leave = PACKET.RES_LEAVE.GetRootAsRES_LEAVE(new FlatBuffers.ByteBuffer(data.BufferData));

                    textBox_joined_channel.Text = "";

                    if (user_index == leave.USERINDEX)
                    {
                        listBox_users.Items.Clear();
                        buttons.Clear();
                        groupBox_users_location.Controls.Clear();

                        log("i leaved channel.");
                    }
                    else
                    {
                        Button btn = buttons[leave.USERINDEX];
                        log(btn.Text + " left channel.");
                        listBox_users.Items.Remove(btn.Text + "_" + leave.USERINDEX);


                        groupBox_users_location.Controls.Remove(btn);

                        buttons.Remove(leave.USERINDEX);
                    }
                }
                break;

                case (int)PACKET_S2C.SPAWN:
                {
                    var spawn = PACKET.RES_SPAWN.GetRootAsRES_SPAWN(new FlatBuffers.ByteBuffer(data.BufferData));
                    log("spawn. monster_id : " + spawn.MONSTERID);
                }
                break;

                case (int)PACKET_S2C.READY:
                {
                    var ready = PACKET.RES_READY.GetRootAsRES_READY(new FlatBuffers.ByteBuffer(data.BufferData));
                    log("ready. game_start : " + ready.GAMESTART);

                    if (ready.GAMESTART)
                    {
                        move();
                    }
                }
                break;

                case (int)PACKET_S2C.SEND:
                {
                    var send = PACKET.RES_SEND.GetRootAsRES_SEND(new FlatBuffers.ByteBuffer(data.BufferData));
                    try
                    {
                        for (int n = 0; n < send.MESSAGELength; ++n)
                        {
                            var    p   = JsonConvert.DeserializeObject <relay_message>(send.GetMESSAGE(n));
                            Button btn = buttons[p.user_index];
                            btn.Location = new Point((int)p.position.X, (int)p.position.Y);
                            btn.Visible  = true;
                        }

                        move();
                    }
                    catch (Exception ex)
                    {
                        log("exception: " + ex);
                    }
                }
                break;
                }

                data = client.ReadData();
            }
        }
Exemple #3
0
        void timer_Elapsed(object sender, EventArgs e)
        {
            if (client == null)
            {
                return;
            }

            light.net.Client.BufferPacketData data = client.ReadData();
            if (data != null)
            {
                switch (data.PacketID)
                {
                case light.net.Client.PACKET_ID_DISCONNECTED:
                {
                    on_disconnect();
                }
                break;

                case (int)PACKET_S2C.ENTER:
                {
                    var enter = PACKET.ENTER.GetRootAsENTER(new FlatBuffers.ByteBuffer(data.BufferData));

                    textBox_joined_channel.Text = data.Index.ToString();

                    if (user_index == enter.USERINDEX)
                    {
                        log(enter.USERNAME + " entered channel.");
                    }

                    textBox_nickname.ReadOnly   = true;
                    textBox_channel_no.ReadOnly = true;

                    listBox_users.Items.Add(enter.USERNAME);
                }
                break;

                case (int)PACKET_S2C.LEAVE:
                {
                    var leave = PACKET.LEAVE.GetRootAsLEAVE(new FlatBuffers.ByteBuffer(data.BufferData));

                    textBox_joined_channel.Text = "";

                    if (user_index == leave.USERINDEX)
                    {
                        listBox_users.Items.Clear();
                        log(leave.USERNAME + " leave channel.");
                    }
                    else
                    {
                        log(leave.USERNAME + " left channel.");
                        listBox_users.Items.Remove(leave.USERNAME);
                    }

                    textBox_nickname.ReadOnly   = false;
                    textBox_channel_no.ReadOnly = false;
                }
                break;

                case (int)PACKET_S2C.BROADCAST:
                {
                    var broadcast = PACKET.BROADCAST.GetRootAsBROADCAST(new FlatBuffers.ByteBuffer(data.BufferData));
                    log("[" + broadcast.USERNAME + "] " + broadcast.MESSAGE);
                }
                break;
                }
            }
        }