Exemple #1
0
        public IEnumerator SendOnly()
        {
            var f = false;
            var c = Utils.NewClient("ct6");

            c.Connect().OnSuccess(_ => {
                return(c.CreateRoom());
            }, TaskScheduler.FromCurrentSynchronizationContext()).Unwrap().OnSuccess(_ => {
                Task.Run(async() => {
                    var count = 6;
                    while (count > 0 && !f)
                    {
                        var options = new SendEventOptions {
                            ReceiverGroup = ReceiverGroup.Others
                        };
                        await c.SendEvent(5, null, options);
                        Thread.Sleep(5000);
                    }
                });
                Task.Delay(30000).OnSuccess(async __ => {
                    Debug.Log("delay 30s done");
                    await c.Close();
                    f = true;
                });
            }, TaskScheduler.FromCurrentSynchronizationContext());

            while (!f)
            {
                yield return(null);
            }
        }
Exemple #2
0
 /// <summary>
 /// 发送自定义事件
 /// </summary>
 /// <param name="eventId">事件 Id</param>
 /// <param name="eventData">事件参数</param>
 /// <param name="options">事件选项</param>
 public Task SendEvent(byte eventId, PlayObject eventData = null, SendEventOptions options = null)
 {
     if (Room == null)
     {
         throw new Exception("You are not in room yet.");
     }
     return(Room.SendEvent(eventId, eventData, options));
 }
Exemple #3
0
        /// <summary>
        /// 发送自定义事件
        /// </summary>
        /// <param name="eventId">事件 Id</param>
        /// <param name="eventData">事件参数</param>
        /// <param name="options">事件选项</param>
        /// <returns></returns>
        public Task SendEvent(byte eventId, PlayObject eventData, SendEventOptions options)
        {
            if (state != State.Game)
            {
                throw new PlayException(PlayExceptionCode.StateError, $"Error state: {state}");
            }
            var opts = options;

            if (opts == null)
            {
                opts = new SendEventOptions {
                    ReceiverGroup = ReceiverGroup.All
                };
            }
            return(gameConn.SendEvent(eventId, eventData, opts));
        }
Exemple #4
0
        public Task SendEvent(byte eventId, Dictionary <string, object> eventData = null, SendEventOptions options = null)
        {
            if (state != PlayState.GAME)
            {
                throw new PlayException(PlayExceptionCode.StateError,
                                        string.Format("You cannot call SendEvent() on {0} state", state.ToString()));
            }
            var opts = options;

            if (opts == null)
            {
                opts = new SendEventOptions {
                    ReceiverGroup = ReceiverGroup.All
                };
            }
            gameConn.SendEvent(eventId, eventData, opts).OnSuccess(_ => { });
            return(Task.FromResult(true));
        }
Exemple #5
0
        internal Task SendEvent(byte eventId, PlayObject eventData, SendEventOptions options)
        {
            var direct = new DirectCommand {
                EventId = eventId
            };

            if (eventData != null)
            {
                direct.Msg = ByteString.CopyFrom(CodecUtils.SerializePlayObject(eventData));
            }
            direct.ReceiverGroup = (int)options.ReceiverGroup;
            if (options.TargetActorIds != null)
            {
                direct.ToActorIds.AddRange(options.TargetActorIds);
            }
            _ = Send(CommandType.Direct, OpType.None, new Body {
                Direct = direct
            });
            return(Task.FromResult(true));
        }
        public IEnumerator CustomEventWithTargetIds()
        {
            var f        = false;
            var roomName = "ce1_r";
            var c0       = Utils.NewClient("ce1_0");
            var c1       = Utils.NewClient("ce1_1");

            c0.Connect().OnSuccess(_ => {
                return(c0.CreateRoom(roomName));
            }, TaskScheduler.FromCurrentSynchronizationContext()).Unwrap().OnSuccess(_ => {
                c0.OnCustomEvent += (eventId, eventData, senderId) => {
                    Assert.AreEqual(eventId, 2);
                    Assert.AreEqual(eventData["name"], "aaa");
                    Assert.AreEqual(eventData["count"], 100);
                    f = true;
                };
                return(c1.Connect());
            }, TaskScheduler.FromCurrentSynchronizationContext()).Unwrap().OnSuccess(_ => {
                return(c1.JoinRoom(roomName));
            }, TaskScheduler.FromCurrentSynchronizationContext()).Unwrap().OnSuccess(_ => {
                var eventData = new PlayObject {
                    { "name", "aaa" },
                    { "count", 100 },
                };
                var options = new SendEventOptions {
                    TargetActorIds = new List <int> {
                        1, 2
                    }
                };
                return(c1.SendEvent(2, eventData, options));
            }, TaskScheduler.FromCurrentSynchronizationContext()).Unwrap().OnSuccess(_ => {
                Debug.Log("send event done");
            }, TaskScheduler.FromCurrentSynchronizationContext());

            while (!f)
            {
                yield return(null);
            }
            _ = c0.Close();
            _ = c1.Close();
        }
        internal async Task SendEvent(byte eventId, Dictionary <string, object> eventData, SendEventOptions options)
        {
            var msg = Message.NewRequest("direct", null);

            msg["eventId"]       = eventId;
            msg["msg"]           = eventData;
            msg["receiverGroup"] = (int)options.ReceiverGroup;
            if (options.TargetActorIds != null)
            {
                msg["toActorIds"] = options.TargetActorIds.Cast <object>().ToList();
            }
            await Send(msg);
        }