virtual public void handleMessage(STServerPeer sender, STClientCode code, Dictionary <byte, object> ev_params) { }
override public void handleMessage(STServerPeer sender, STClientCode code, Dictionary <byte, object> event_params) { String sid = (event_params.ContainsKey((byte)100)) ? (String)event_params[(byte)100] : ""; Dictionary <byte, object> response_params = new Dictionary <byte, object>(); switch (code) { case STClientCode.APP_Join: Log.Warn("Join Game B!!"); int join_success = checkJoinSuccess(event_params); response_params.Add((byte)1, join_success); if (join_success == 1) { int iwait = getNewWaitingIndex(sender); Log.Debug("New in Waiting List: " + iwait); response_params.Add((byte)101, iwait); addIdInGame(sid); InsertToSql(new String[] { sid, "Join Game" }); lock (online_client) { online_client.Add(sender); } checkWaitingStatus(); } else { //sender.delayDisconnect(5); } sender.sendOpResponseToPeer(STServerCode.CJoin_Success, response_params); break; case STClientCode.APP_Rotate: if (isIdInGame(sid)) { game_app.SendNotifyLED(STServerCode.LSet_Rotate, event_params); } else { Log.Error("!! Not in-game ID: " + sid + " ! Kill it!!"); //sender.delayDisconnect(3); } break; case STClientCode.LED_StartRun: if (waiting_list.Count >= mcur_player) { sendStartRun(); } break; case STClientCode.LED_EatIcon: int ipeer = (int)event_params[(byte)101]; STServerPeer peer = null; if (ipeer == 1 && waiting_list.Count > 0) { peer = waiting_list[icur_player]; } if (ipeer == 0 && waiting_list.Count > 1) { peer = waiting_list[icur_player + 1]; } if (peer != null) { peer.sendEventToPeer(STServerCode.CGameB_Eat, event_params); } break; case STClientCode.LED_Score: sender.sendOpResponseToPeer(STServerCode.LSend_Score_Success, response_params); //game_app.sendGameOverToAll(event_params); sendScoreToPeer(event_params); EndRound(); InsertToSql(new String[] { "game", "End Round" }); break; } }
override public void handleMessage(STServerPeer sender, STClientCode code, Dictionary <byte, object> event_params) { String sid = (event_params.ContainsKey((byte)100))?(String)event_params[(byte)100]:""; Dictionary <byte, object> response_params = new Dictionary <byte, object>(); switch (code) { case STClientCode.APP_Join: Log.Warn("Join Game A!!"); //bool enough_time = checkEnoughTimeForPlayer(); //if (!enough_time) //{ // Log.Debug("Not Enough Time!!"); // response_params.Add(1, 0); //}else{ int join_success = checkJoinSuccess(event_params); response_params.Add(1, join_success); if (join_success == 1) { lock (online_client) { online_client.Add(sender); } addIdInGame(sid); InsertToSql(new String[] { sid, "Join Game" }); } else { // sender.delayDisconnect(5); } // if is first one joining //if(isWaiting()) StartRound(); //} sender.sendOpResponseToPeer(STServerCode.CJoin_Success, response_params); return; case STClientCode.LED_StartRun: bool enough_time_round = checkEnoughTimeForRound(INTERACTIVE_SPAN); if (isWaiting() && enough_time_round) { response_params.Add(1, 1); response_params.Add(2, getGameRemainTime()); //sender.sendOpResponseToPeer(STServerCode.LGameB_Start, response_params); game_app.SendNotifyLED(STServerCode.LGameB_Start, response_params); StartRound(); return; } Log.Debug("Not Enough Time!!"); response_params.Add(1, 0); game_app.SendNotifyLED(STServerCode.LGameB_Start, response_params); return; case STClientCode.LED_Score: sender.sendOpResponseToPeer(STServerCode.LSend_Score_Success, response_params); game_app.sendGameOverToAll(event_params); EndRound(); return; } if (!isIdInGame(sid)) { Log.Error("!! Not in-game ID: " + sid + " ! Kill it!!"); //sender.delayDisconnect(3); return; } switch (code) { case STClientCode.APP_Set_Side: bool has_vacancy = false; int side_index = -1; if ((int)event_params[(byte)101] == 1) { lock (left_online_client) { has_vacancy = (left_online_client.Count < Client_Limit / 2); if (has_vacancy) { if (!left_online_client.ContainsKey((String)event_params[(byte)100])) { left_online_client.Add((String)event_params[(byte)100], sender); } side_index = 1; sender.client_side = side_index; } else { Log.Debug("No vacancy at left " + left_online_client.Count); } } } else if ((int)event_params[(byte)101] == 0) { lock (right_online_client) { has_vacancy = (right_online_client.Count < Client_Limit / 2); if (has_vacancy) { if (!right_online_client.ContainsKey((String)event_params[(byte)100])) { right_online_client.Add((String)event_params[(byte)100], sender); } side_index = 0; sender.client_side = side_index; } else { Log.Debug("No vacancy at right " + right_online_client.Count); } } } response_params.Add(1, has_vacancy?1:0); response_params.Add(101, side_index); sender.sendOpResponseToPeer(STServerCode.CSet_Side_Success, response_params); game_app.SendNotifyLED(STServerCode.LAdd_House, event_params); break; case STClientCode.APP_Set_Name: //TODO:check id & side?? String _name = (String)event_params[(byte)1]; //check word bool isgood = game_app.checkGoodName(_name); response_params.Add((byte)1, isgood?1:2); if (isgood) { byte[] _bname = System.Text.Encoding.UTF8.GetBytes(_name); event_params[(byte)1] = _bname; game_app.SendNotifyLED(STServerCode.LSet_Name, event_params); InsertToSql(new String[] { sid, "Name: " + _name }); } sender.sendOpResponseToPeer(STServerCode.CSet_Name_Success, response_params); break; case STClientCode.APP_Set_House: //TODO: check id & side response_params.Add((byte)1, 1); game_app.SendNotifyLED(STServerCode.LSet_House, event_params); sender.sendOpResponseToPeer(STServerCode.CSet_House_Success, response_params); break; case STClientCode.APP_Blow: game_app.SendNotifyLED(STServerCode.LSet_Blow, event_params); break; case STClientCode.APP_Light: game_app.SendNotifyLED(STServerCode.LSet_Light, event_params); break; case STClientCode.APP_Shake: game_app.SendNotifyLED(STServerCode.LSet_Shake, event_params); break; case STClientCode.APP_Leave: game_app.SendNotifyLED(STServerCode.LSet_User_Leave, event_params); response_params.Add((byte)1, 1); sender.sendOpResponseToPeer(STServerCode.CSet_Leave_Success, response_params); /* disconnect finished player */ //sender.delayDisconnect(); lock (online_client) { bool rm = online_client.Remove(sender); if (rm) { Log.Debug(" Remove Client Success!!"); } else { Log.Debug(" Remove Client Fail!!"); } } //int side = (int)event_params[(byte)101]; lock (left_online_client) { left_online_client.Remove(sid); } lock (right_online_client) { right_online_client.Remove(sid); } removeIdInGame(sid); InsertToSql(new String[] { sid, "Leave" }); break; } }
public void handleMessage(STServerPeer sender, STClientCode code, Dictionary <byte, object> ev_params) { agame_scene[cur_game].handleMessage(sender, code, ev_params); }
override public void handleMessage(STServerPeer sender, STClientCode code, Dictionary <byte, object> event_params) { String sid = (event_params.ContainsKey((byte)100)) ? (String)event_params[(byte)100] : ""; Dictionary <byte, object> response_params = new Dictionary <byte, object>(); switch (code) { case STClientCode.APP_Join: Log.Warn("Join Game C!!"); int success = checkJoinSuccess(event_params); response_params.Add(1, success); //response_params.Add(2,game_app.getClientIndex(sender)); if (success == 1) { lock (online_client) { if (!online_client.Contains(sender)) { online_client.Add(sender); } } addIdInGame(sid); } else { // sender.delayDisconnect(5); } sender.sendOpResponseToPeer(STServerCode.CJoin_Success, response_params); break; case STClientCode.APP_Face: if (!clock_mode && isIdInGame(sid)) { // TODO: save to server String uid = (String)event_params[(byte)100]; byte[] image_byte = Convert.FromBase64String((String)event_params[(byte)2]); bool img_good = checkImage(image_byte); if (img_good) { String file_path = saveImage(uid, image_byte); InsertToSql(new String[] { uid, file_path }); //event_params[(byte)2] = file_path; game_app.SendNotifyLED(STServerCode.LSet_Face, event_params); response_params.Add((byte)1, 1); } else { response_params.Add((byte)1, 0); } sender.sendOpResponseToPeer(STServerCode.CSet_Face_Success, response_params); } else { Log.Error("!! Not in-game ID: " + sid + " ! Kill it!!"); response_params.Add((byte)1, 0); sender.sendOpResponseToPeer(STServerCode.CSet_Face_Success, response_params); } /* disconnect finished player */ //sender.delayDisconnect(); removeIdInGame(sid); lock (online_client) { online_client.Remove(sender); } break; //case STClientCode.LED_Score: // sender.sendOpResponseToPeer(STServerCode.LSend_Score_Success,response_params); // game_app.sendGameOverToAll(event_params); // EndRound(); // break; } }
protected override void OnOperationRequest(OperationRequest operationRequest, SendParameters sendParameters) { Log.Debug("!!! STPhotonServer Recv Operation: " + operationRequest.OperationCode); //foreach(KeyValuePair<byte,Object> keypair in operationRequest.Parameters) //{ // Log.Debug(keypair.Key.ToString()+" - "+keypair.Value.ToString()); //} //Console.WriteLine("STPhotonServer Recv Request: " + operationRequest.OperationCode); switch (operationRequest.OperationCode) { case 230: // user log in Log.Warn("------------------- User LogIn !"); //var info_param=new Dictionary<byte,object>{{1,game_app.cur_game},{2,game_app.checkAvailable()}}; var info_param = new Dictionary <byte, object>(); OperationResponse info_response = new OperationResponse((byte)STServerCode.CLogin_Success, info_param) { ReturnCode = (short)0, DebugMessage = "server feedback" }; this.fiber.Enqueue(() => SendOperationResponse(info_response, new SendParameters())); break; case 253: //raise event: int ievent = Convert.ToInt32(operationRequest.Parameters[244]); //Log.Warn("Get Event: "+ievent); STClientCode event_code = (STClientCode)(ievent & 0xFF); Log.Warn("---------Get Event: " + event_code.ToString() + "---------- "); Object oparams = operationRequest.Parameters[245]; //Log.Warn("params type: "+oparams.GetType()); Hashtable eparams = (Hashtable)(operationRequest.Parameters[245]); Dictionary <byte, Object> event_params = new Dictionary <byte, Object>(); if (eparams != null) { foreach (DictionaryEntry entry in eparams) { try { Log.Debug(entry.Key + " " + entry.Key.GetType() + " - " + entry.Value + " " + entry.Value.GetType()); } catch (Exception e) { Log.Error(e.ToString()); } byte kbyte; try{ kbyte = (byte)entry.Key; }catch (InvalidCastException e) { byte[] bkey = BitConverter.GetBytes((int)entry.Key); Log.Debug("Unable to cast: " + bkey); kbyte = bkey[0]; } event_params.Add((byte)kbyte, entry.Value); } } Log.Warn("--------------------------------- "); switch (event_code) { case STClientCode.LED_Join: game_app.setupLedPeer(this); event_params.Add((byte)1, game_app.getCurGame()); OperationResponse led_connected_response = new OperationResponse((byte)STServerCode.LConnected, event_params) { ReturnCode = (short)0, DebugMessage = "server feedback" }; this.fiber.Enqueue(() => SendOperationResponse(led_connected_response, new SendParameters())); is_led = true; break; case STClientCode.APP_Check_Id: Dictionary <byte, Object> id_params = new Dictionary <byte, Object>(); id_params.Add((byte)1, game_app.getCurGame()); String get_id = (String)event_params[(byte)100]; if (game_app.led_ready) { id_params.Add((byte)2, game_app.checkAvailable()); bool valid_id = game_app.getValidId(ref get_id); Log.Debug("id: " + valid_id + " - " + get_id); id_params.Add((byte)3, valid_id ? 1 : 0); id_params.Add((byte)100, get_id); id_params.Add((byte)200, game_app.getIosVersion()); id_params.Add((byte)201, game_app.getAndroidVersion()); this.client_id = get_id; } OperationResponse id_response = new OperationResponse((byte)STServerCode.Id_And_Game_Info, id_params) { ReturnCode = (short)0, DebugMessage = "server feedback" }; this.fiber.Enqueue(() => SendOperationResponse(id_response, new SendParameters())); this.client_id = get_id; break; case STClientCode.LED_SwitchGame: int switch_to_game = (int)event_params[(byte)1]; game_app.switchGame(switch_to_game); break; default: //Log.Warn("Undefined event code= "+event_code.ToString()); if (game_app.checkLed()) { game_app.handleMessage(this, event_code, event_params); } else { // if no led available, kick them off! Dictionary <byte, Object> _params = new Dictionary <byte, Object>(); _params.Add((byte)1, game_app.getCurGame()); OperationResponse _response = new OperationResponse((byte)STServerCode.Id_And_Game_Info, _params) { ReturnCode = (short)0, DebugMessage = "server feedback" }; this.fiber.Enqueue(() => SendOperationResponse(_response, new SendParameters())); } break; } break; } }